1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/bigfacecat-zhouning-GyJdbc

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 6.1 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 29.11.2024 03:43 37d517b

Что такое

GyJdbc — это фреймворк, основанный на jdbctemplate и похожий на JPA, который обеспечивает уровень персистентности. Он имеет следующие преимущества:

  1. Не нужно писать код для слоя DAO.
  2. Можно использовать цепной SQL в сочетании с лямбда-выражением, что удобно и лаконично.
  3. Поддерживает мощное объединение SQL и все известные синтаксисы SQL.
  4. Простота изучения благодаря близости к синтаксису SQL, разработчикам легко писать SQL так же, как они делают это обычно.
  5. Предоставляет синтаксис, аналогичный JPA и MongoTemplate, для объединения SQL.
  6. Поддерживает несколько источников данных, балансировку нагрузки между ними, требуется только одна аннотация или один вызов метода.

Быстрый старт

Шаг 1. Добавьте координаты Maven:

<dependency>
    <groupId>io.github.springstudent</groupId>
    <artifactId>GyJcdc</artifactId>
    <version>1.4.1.RELEASE</version>
</dependency>

Шаг 2. Определите класс Pojo, соответствующий таблице базы данных: Используйте аннотацию @Table, чтобы определить отношение класса Pojo к таблице базы данных. Используйте атрибут pk для определения первичного ключа таблицы.

@Table(name = "tb_user", pk = "id")
public class TbUser {
    private String id;
    private String name;
    ...
}

Шаг 3. Определите интерфейсы Dao и DaoImpl, которые наследуются от EntityDao и EntityDaoImpl соответственно:

public interface TbUserDao extends EntityDao<TbUser, String> {

}

@Repository
public class TbUserDaoImpl extends EntityDaoImpl<TbUser, String> implements TbUserDao {

}

Шаг 4. Внедрите Dao в сервисный слой и используйте методы EntityDao для выполнения операций добавления, удаления, изменения и запроса:

  • Добавление:
void save(T t)throws Exception;
void batchSave(List<T> list)throws Exception;
int insertWithSql(SQL sql)throws Exception;
  • Удаление:
void delete(Id id)throws Exception;
void deleteWithCriteria(Criteria criteria)throws Exception;
void batchDelete(List<Id> ids)throws Exception;
int deleteWithSql(SQL sql)throws Exception;
void truncate()throws Exception;
void drop()throws Exception;
void drunk(SQL sql)throws Exception;
  • Изменение:
void update(T t)throws Exception;
void batchUpdate(List<T> list)throws Exception;
int updateWithSql(SQL sql)throws Exception;
  • Запрос:
T queryOne(Id id)throws Exception;
List<T> queryAll()throws Exception;
PageResult<T> pageQuery(Page page)throws Exception;
...

Пример использования Criteria:

//where name = 'zhouning'
new Criteria().where(TbUser::getName,"zhouning").andIfAbsent(TbUser::getName,null);
//where name in ('zhouning','yinhw')
new Criteria().in(TbUser::getName,Arrays.asList("zhouning","yinhw"));
//where age < 28 order by age desc
new Criteria().lt(TbUser::getAge,28).orderBy(new Sort(TbUser::getAge);
//where age < 20 and (name like '%zhou%' or realName like 'zhouning')
new Criteria().lt(TbUser::getAge,20).andCriteria(new Criteria().like(TbUser::getName,"zhou").orLike(TbUser::getRealName,"周"));

Пример использования SQL:

new SQL().select(TbUser::getName,TbUser::getEmail,TbUser::getRealName,TbUser::getMobile).from(TbUser.class).where(TbUser::getIsActive,1);
new SQL().select("age",countAs("age").as("num")).from(TbUser.class).orderBy(new Sort(TbUser::getAge)).groupBy(TbUser::getAge);
new SQL().update(TbAccount.class).set(TbUser::getRealName,"元林").set(TbUser::getEmail,"13888888888@163.com").where(TbUser::getName,"Smith");
new SQL().insertInto(TbAccount.class,"userName","realName").values("test","测试").values("test2","测试2");
new SQL().delete().from(TbUser.class).gt(TbUser::getAge,20);
``` **Реализует SQLInterceptor:**

    @Override
    public void beforeBuild(SQLType sqlType, SqlModifier sqlModifier) throws Exception {
        // Грубая гранулярность: через тип SQL добавляем поля, которые нужно обновить и вставить.
        if (sqlType.equals(SQLType.Update)) {
            if (sqlModifier.tableName().startsWith("sys_tb_")) {
                sqlModifier.addUpdate("updateTime", new Date());
                sqlModifier.addUpdate("updateUser", "admin");
            }
        } else if (sqlType.equals(SQLType.Insert)) {
            if (sqlModifier.tableName().startsWith("sys_tb_")) {
                sqlModifier.addInsert("createTime", new Date());
                sqlModifier.addInsert("createUser", "admin");
                sqlModifier.addInsert("updateTime", new Date());
                sqlModifier.addInsert("updateUser", "admin");
            }
        }

        // Тонкая гранулярность: согласно sqlId добавляем соответствующие поля обновления и условия запроса.
        if (sqlModifier.sqlId().equals("updateBirthAuto")) {
            sqlModifier.addUpdate("isActive", 0);
        } else if (sqlModifier.sqlId().equals("isDelete1")) {
            sqlModifier.addAnd(Where.where("isActive").equal(1));
        }
    }

    @Override
    public void afterBuild(String sql, Object[] args) throws Exception {
        // sql аудит.
        System.out.println("sql:" + sql + " args:" + ArrayUtils.toString(args));
    }

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/bigfacecat-zhouning-GyJdbc.git
git@api.gitlife.ru:oschina-mirror/bigfacecat-zhouning-GyJdbc.git
oschina-mirror
bigfacecat-zhouning-GyJdbc
bigfacecat-zhouning-GyJdbc
master