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

OSCHINA-MIRROR/durcframework-easymybatis

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Объявление: EasyMyBatis больше не будет разрабатывать новые функции, только исправлять ошибки. Настоятельно рекомендуется использовать улучшенную версию EasyMyBatis — FastMyBatis.

Адрес: https://gitee.com/durcframework/fastmybatis

API более понятный, функционал богаче, код стабильнее.

Простое введение

EasyMyBatis – это расширенная библиотека MyBatis, цель которой – упростить разработку MyBatis и сделать её более эффективной.

Особенности EasyMyBatis:

  • Не нужно писать XML-файлы для выполнения CRUD-операций.
  • Поддерживает многотабличные запросы, агрегатные запросы и постраничные запросы (поддерживает несколько баз данных).
  • Поддерживает пакетное добавление, добавление по указанным полям.
  • Контролирует доступ к слою DAO, например, некоторые DAO имеют только функцию запроса, а некоторые DAO поддерживают операции CRUD.
  • Позволяет настраивать SQL, операторы SQL можно записать в файле конфигурации, также поддерживаются теги MyBatis.
  • Поддержка MySQL, SQLServer, Oracle, PostgreSQL, SQLite. Легко расширить поддержку других баз данных (достаточно добавить шаблонный файл).
  • Способ использования не меняется, требуется изменить только одну конфигурацию при интеграции со Spring.
  • Интеграция с Spring-boot.
  • Лёгкий вес, ненавязчивость, может сосуществовать с традиционным использованием MyBatis.
  • Без изменения исходного кода фреймворка (без плагинов), можно одновременно использовать официально предоставленные функции.

Архитектура

Архитектура EasyMyBatis выглядит следующим образом:

Архитектура

Процесс работы

Процесс работы EasyMyBatis представлен в виде блок-схемы:

  1. При запуске сервера EasyMyBatis отвечает за сканирование файлов Dao.java.
  2. После завершения сканирования анализируются файлы Dao.class и Entity.class.
  3. Компонент генерации кода создаёт содержимое файла mapper на основе анализа файлов Dao.class и Entity.class, используя шаблоны Velocity.
  4. Содержимое файла mapper преобразуется в объект Resource и устанавливается в SqlSessionFactory.

Описание проекта

  • EasyMyBatis: исходный код фреймворка.
  • EasyMyBatis-demo: демонстрационный пример.
  • EasyMyBatis-doc: документация для разработчиков в автономном режиме.
  • EasyMyBatis-generator: инструмент генерации кода.
  • EasyMyBatis-starter: соответствует Springboot-стартеру.

Если у вас возникнут проблемы во время использования, вы можете присоединиться к QQ группе 328419269 для получения помощи.

Полный тестовый пример

public class TUserDaoTest extends EasymybatisSpringbootApplicationTests {
    @Resource
    TUserDao dao;
    @Resource
    TransactionTemplate transactionTemplate;

    // 根据 первичному ключу поиск
    @Test
    public void testGet() {
        TUser user = dao.get(3);
        print(user);
    }

    // Поиск по полю, получение одной записи
    @Test
    public void testGetByProperty() {
        TUser user = dao.getByProperty("username", "王五");
        print(user);
    }

    // По условиям поиск одной записи
    @Test
    public void testGetByExpression() {
        // Запрос ID=3 пользователя
        Query query = Query.build().eq("id", 3);

        TUser user = dao.getByExpression(query);

        print(user);
    }

    // Условный запрос
    // Запрос пользователя с именем '张三'
    @Test
    public void testFind() {
        Query query = new Query();
        // Добавление условий запроса
        query.eq("username", "张三");

        List<TUser> list = dao.find(query); // Получение результатов
        long count = dao.countTotal(query); // Подсчёт общего количества
        print("count:" + count);
        for (TUser user : list) {
            System.out.println(user);
        }
    }

    // Страничный запрос
    /*MYSQL оператор:
     * 
     * SELECT t.`id` , t.`username` , t.`state` , t.`isdel` , t.`remark` , t.`add_time` , t.`money` , t.`left_money` 
     * FROM `t_user` t 
     * ORDER BY id DESC 
     * LIMIT ?,? 
     * 
     * Параметры: 2(Integer), 2(Integer)
     */
    @Test
    public void testPage() {
        Query query = new Query();

        query.setPage(2, 2) // Установка pageIndex, pageSize
            .addSort("id", Sort.DESC); // Добавление сортировки

        // Результаты после запроса, включая общее количество записей, результаты и общее количество страниц и т.д.
        PageInfo<TUser> pageInfo = QueryUtils.query(dao, query);

        List<TUser> rows = pageInfo.getList();
        for (TUser user : rows) {
            System.out.println(user);
        }
    }

    // Пользовательский возврат полей, возврат только двух полей
    // SELECT t.id,t.username FROM `t_user` t LIMIT 0,10
    @Test
    public void testSelfColumns() {
        Query query = new Query();
        // Возврат только id, username
        query.setColumns(Arrays.asList("t.id","t.username"));

        List<TUser> list = dao.find(query);

        for (TUser user : list) {
            System.out.println(user);
        }
    }

    // Многотабличный запрос, левое соединение
    // Подходит для сценария: получение информации о полях из двух таблиц и возврат её на передний план
    /* 
     *  MYSQL генерирует следующий оператор SQL:
        SELECT 
            t.`id` , t.`username` , t.`state` , t.`isdel` , t.`remark` , t.`add_time` , t.`money` , t.`left_money` 
            , t2.city , t2.address 
        FROM `t_user` t left join user_info t2 on t.id = t2.user_id 
        WHERE t2.id = ?
        ORDER BY id ASC 
        LIMIT ?,?
     */
    @Test
    public void testJoin() {
        Query query = new Query();
        // Добавляем поля второй таблицы, вместе с полями основной таблицы
        query.addOtherColumns(
                    "t2.city"
                    ,"t2.address"
        );
        // Левое соединение, основная таблица по умолчанию имеет псевдоним t
        query.join("left join");
    }
}
``` Данный фрагмент написан на языке Java.

user_info t2 on t.id = t2.user_id"); //Добавление условия query.eq("t2.id", 2);

query.addSort("t.id");

List list = dao.find(query);

System.out.println("=============="); for (TUser user : list) { System.out.println( user.getId() + " " + user.getUsername() // Ниже два поля из второй таблицы + " " + user.getCity() + " " + user.getAddress() ); } System.out.println("=============="); }

// Добавление-сохранение всех полей @Test public void testInsert() { TUser user = new TUser(); user.setAddTime(new Date()); user.setIsdel(false); user.setLeftMoney(22.1F); user.setMoney(new BigDecimal(100.5)); user.setRemark("备注"); user.setState((byte)0); user.setUsername("张三");

dao.save(user);

print("Добавленный первичный ключ:" + user.getId());
print(user);

}

// Добавление-сохранение непустых полей @Test public void testInsertIgnoreNull() { TUser user = new TUser(); user.setAddTime(new Date()); user.setIsdel(true); user.setMoney(new BigDecimal(100.5)); user.setState((byte)0); user.setUsername("张三notnull"); user.setLeftMoney(null); user.setRemark(null);

dao.saveIgnoreNull(user);

print("Добавлен первичный ключ:" + user.getId());
print(user);

}

// Пакетное добавление /*

  • Поддержка mysql,sqlserver2008. Для поддержки других баз данных используйте метод saveMulti

  • INSERT INTO person (id, name, age) VALUES (1, 'Kelvin', 22), (2, 'ini_always', 23); */ @Test public void testInsertBatch() { List users = new ArrayList<>();

    for (int i = 0; i < 3; i++) { // Создание трех объектов TUser user = new TUser(); user.setUsername("username" + i); user.setMoney(new BigDecimal(i)); user.setRemark("remark" + i); user.setState((byte)0); user.setIsdel(false); user.setAddTime(new Date()); user.setLeftMoney(200F); users.add(user); }

    int i = dao.saveBatch(users); // Возвращает количество успешных операций

    System.out.println("saveBatch --> " + i); }

// Обновление всех полей @Test public void testUpdate() { TUser user = dao.get(3); user.setUsername("李四"); user.setMoney(user.getMoney().add(new BigDecimal(0.1))); user.setIsdel(true);

int i = dao.update(user);
print("testUpdate --> " + i);

}

// Обновление непустых полей /* *UPDATE [t_user] SET [username]=?, [isdel]=? WHERE [id] = ?
*/ @Test public void updateIgnoreNull() { TUser user = new TUser(); user.setId(3); user.setUsername("王五"); user.setIsdel(false); int i = dao.updateIgnoreNull(user); print("updateNotNull --> " + i); }

// По условию обновление // UPDATE t_user SET remark = '批量修改备注' WHERE state = 0 @Test public void testUpdateNotNullByExpression() { Query query = new Query(); query.eq("state", 0);

TUser user = new TUser();
user.setRemark("批量修改备注");

int i = dao.updateIgnoreNullByExpression(user, query);
print("testUpdateNotNullByExpression --> " + i);

}

// Удаление @Test public void testDel() { TUser user = new TUser(); user.setId(14); int i = dao.del(user); print("del --> " + i); }

// По выражению удаление // DELETE FROM t_user WHERE state = ? @Test public void delByExpression() { Query query = new Query(); query.eq("state", 3); int i = dao.delByExpression(query); print("delByExpression --> " + i); }


Комментарии ( 0 )

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

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/durcframework-easymybatis.git
git@api.gitlife.ru:oschina-mirror/durcframework-easymybatis.git
oschina-mirror
durcframework-easymybatis
durcframework-easymybatis
master