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

OSCHINA-MIRROR/durcframework-fastmybatis

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 11 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 09.03.2025 19:59 f104fca

быстрый mybatis

maven

FastMyBatis — это фреймворк для работы с MyBatis, цель которого заключается в том, чтобы обеспечивать простоту, скорость и эффективность.

  • Быстрое начало работы без конфигураций, без зависимости от Spring
  • Возможность выполнения операций CRUD без необходимости создания XML-файлов, поддержка LambdaQuery запросов и JPA Query Method запросов (findByXxx)
  • Поддерживает MySQL, SQL Server, Oracle, PostgreSQL, SQLite, StarRocks (ранее DorisDB)
  • Поддерживает создание собственных SQL-запросов, базовые операции CRUD выполняются автоматически, специальные SQL-запросы (например, запросы агрегации) могут быть записаны в XML
  • Интегрируется с Spring Boot, достаточно использовать starter, поддерживает Spring Boot 3.0
  • Поддерживает разработку плагинов
  • Поддерживает режим ActiveRecord
  • Поддерживает многопользовательскую систему
  • Предоставляет универсальный Service
  • API богатый, более 40 методов, удовлетворяет потребностям повседневной разработки
  • Легковесный, независимый, является расширением официального MyBatis

Запросы

Используйте объект Query для выполнения операций поиск/обновление/удаление.

// Поиск по условиям
// SELECT ... FROM t_user WHERE username = ? AND age > 30
List<TUser> list = TUser.query()
        .eq(TUser::getUsername, "Зhang San") // Учитывайте правильное написание имени
        .gt(TUser::getAge, 30)
        .list();
```// Пагинация
// SELECT ... FROM t_user WHERE username = ? ORDER BY id DESC LIMIT 0, 10
PageInfo<TUser> pageInfo = this.query()
        .eq(TUser::getUsername, "Зhang San") // Учитывайте, что имя "张三" может быть произвольной строкой, которую лучше оставить без перевода, если это имя пользователя
        .orderByDesc(TUser::getId)
        .paginate(1, 10);
long total = pageInfo.getTotal();
List<TUser> records = pageInfo.getRecords();// Удаление по условию, логическое удаление
// UPDATE t_user SET deleted = 1 WHERE username = ?
int count = this.query()
        .eq(TUser::getUsername, "张三")
        .delete();

// Удаление по условию, принудительное удаление, игнорирует поле логического удаления
// DELETE FROM t_user WHERE username = ?
int count2 = this.query()
        .eq(TUser::getUsername, "张三")
        .deleteForce();

// Обновление данных
// UPDATE t_user SET username = ?, add_time=now() WHERE id = ?
int updatedRows = TUser.query()
        .set(TUser::getUsername, "李四")
        .setExpression("add_time=now()")
        .eq(TUser::getId, 6)
        .update();

Быстрое начало работы (Spring Boot)

  • Создайте новый проект Spring Boot
  • Добавьте зависимость fastmybatis-spring-boot-starter в файл pom.xml
<dependency>
    <groupId>io.gitee.durcframework</groupId>
    <artifactId>fastmybatis-spring-boot-starter</artifactId>
    <version>последняя версия</version>
</dependency>

Spring Boot 3 + Java 17 зависит от следующего:

<dependency>
    <groupId>io.gitee.durcframework</groupId>
    <artifactId>fastmybatis-spring-boot3-starter</artifactId>
    <version>последняя версия</version>
</dependency>

Последняя версия: maven

  • Примеры CRUD операций

Предположим, что в базе данных есть таблица t_user, тогда создайте соответствующий сущностной класс TUser.java и Mapper класс TUserMapper.java.

/**
 * Примеры CRUD операций
 */
@RestController
public class CrudController {

    @Autowired
    private UserService userService;

    /**
     * Постраничное получение данных
     * http://localhost:8080/user/page?id=10
     * http://localhost:8080/user/page?pageIndex=1&pageSize=5
     *
     * @param param
     * @return
     */
    @GetMapping("/user/page")
    public Result<PageInfo<TUser>> page(UserParam param) {
        Query query = param.toQuery();
        PageInfo<TUser> pageInfo = userService.page(query);
        return Result.ok(pageInfo);
    }
``````markdown
/**
 * Добавление записи. Для удобства демонстрации используется GET метод,
 * но фактически следует использовать POST.
 * http://localhost:8080/user/save?username=jim
 *
 * @param user
 * @return
 */
@GetMapping("/user/save")
public Result<Integer> save(TUser user) {
    userService.save(user);
    // Возвращаем значение первичного ключа после добавления
    return Result.ok(user.getId());
}

/**
 * Обновление записи. Для удобства демонстрации используется GET метод,
 * но фактически следует использовать POST.
 * http://localhost:8080/user/update?id=10&username=jim
 *
 * @param user данные формы
 * @return
 */
@GetMapping("/user/update")
public Result<?> update(TUser user) {
    userService.update(user);
    return Result.ok();
}

/**
 * Удаление записи. Для удобства демонстрации используется GET метод,
 * но фактически следует использовать DELETE.
 * http://localhost:8080/user/delete?id=10
 *
 * @param id значение первичного ключа
 * @return
 */
@GetMapping("/user/delete")
public Result<?> delete(Integer id) {
    userService.deleteById(id);
    return Result.ok();
}
  • UserService.java
// Реализация общих интерфейсов
@Service
public class UserService implements LambdaService<TUser> {}

TUserMapper.java

public interface TUserMapper extends BaseMapper<TUser> {

}

Сервис и маппер позволяют легко выполнять различные операции с базой данных без необходимости писать дополнительный код.

Структура маппера

Структура маппера

Лямбда-запросы

List<TUser> list = mapper.query()
    .eq(TUser::getId, 1)
    .ge(TUser::getId, 1)
    .in(TUser::getId, Arrays.asList(1, 2))
    .between(TUser::getId, 1, 2)
    .skill("id=1")
    .list();

// Запрос части полей
// SELECT id, username FROM t_user WHERE id = ?
List<TUser> users1 = userService.query()
        // Запрос только двух полей - id и username
        .select(TUser::getId, TUser::getUsername)
        .eq(TUser::getId, 6)
        .list();
```

Пример запроса с подусловиями:

```java
// WHERE (id = ? OR id BETWEEN ? AND ?) AND (money > ? OR state = ?)
List<TUser> list = Query.query(TUser.class)
    .andLambda(k -> k.eq(TUser::getId, 3).orBetween(TUser::getId, 4, 10))
    .andLambda(k -> k.gt(TUser::getMoney, 1).orEq(TUser::getState, 1))
    .list();
```

### Условное обновление

```java
int i = mapper.query()
    .set(TUser::getUsername, "Ван Ву")
    .setExpression("update_time=now()")
    .eq(TUser::getId, 6)
    .update(); // Выполняет обновление, возвращает количество затронутых строк
System.out.println("Обновлено " + i + " строк");
// Соответствующий SQL: UPDATE `t_user` SET username = ?, update_time=now() WHERE id = ?
```

### JPA запросы

```java
List<Student> users = mapper.findByLastnameAndFirstname("Чжан", "сан");
Assert.assertEquals(1, users.size());
users.forEach(System.out::println);

List<Student> users = mapper.findByAgeNotIn(Arrays.asList(30, 40));
Assert.assertEquals(1, users.size());
users.forEach(System.out::println);

List<Student> users = mapper.findByAgeOrOrderByLastNameDesc(40);
Assert.assertEquals(2, users.size());
users.forEach(System.out::println);
```### Общий пример

[fma-админ](https://gitee.com/durcframework/fm-admin)

Приложение представляет собой чистую систему управления сайтом, которая имеет базовые функции RBAC (проверка прав доступа), проверка прав доходит до уровня кнопок. Фронтенд использует Vue3, Vite5, Element-Plus, TypeScript, Pinia, Tailwindcss, а бэкенд использует SpringBoot3.4 + Java17 + FastMybatis.

Предоставляет инструмент генерации кода, который автоматически создает код для фронтенда и бэкенда, реализуя полный набор функций CRUD.

### Описание проекта - [doc](https://gitee.com/durcframework/fastmybatis/tree/master/doc): Разработочная документация
- [fastmybatis-core](https://gitee.com/durcframework/fastmybatis/tree/master/fastmybatis-core): Исходный код фреймворка
- [fastmybatis-demo](https://gitee.com/durcframework/fastmybatis/tree/master/fastmybatis-demo): Соответствующий пример (рекомендовано запустить: fastmybatis-demo-springboot)
- [fastmybatis-spring-boot-starter](https://gitee.com/durcframework/fastmybatis/tree/master/fastmybatis-spring-boot-starter): Starter для Spring Boot

Используйте [code-gen](https://gitee.com/durcframework/code-gen) для генерации кода


# Связанные документы

- [Разработочная документация](https://durcframework.gitee.io/fastmybatis/)
- [Сравнение FastMybatis с MyBatis Generator](https://gitee.com/durcframework/fastmybatis/wikis/pages?sort_id=437962&doc_id=117805)
1
https://api.gitlife.ru/oschina-mirror/durcframework-fastmybatis.git
git@api.gitlife.ru:oschina-mirror/durcframework-fastmybatis.git
oschina-mirror
durcframework-fastmybatis
durcframework-fastmybatis
master