本节主要介绍如何通过快速开启一个MyBatis-Flex应用。

MyBatis-Flex 简介

MyBatis-Flex 是一个优雅的 MyBatis 增强框架,它非常轻量、同时拥有极高的性能与灵活性。可以轻松的使用 Mybaits-Flex 链接任何数据库,其内置的 QueryWrapper 帮助开发人员极大的减少了 SQL 编写的工作的同时,减少出错的可能性。

总而言之,MyBatis-Flex 能够极大地提高开发人员的开发效率和开发体验,让开发人员有更多的时间专注于自己的事情。

MyBatis-Flex 特征如下。

1. 很轻量

MyBatis-Flex 整个框架只依赖 MyBatis,再无其他任何第三方依赖。

2. 只增强

MyBatis-Flex 支持 CRUD、分页查询、多表查询、批量操作,但不丢失 MyBatis 原有的任何功能。

3. 高性能

MyBatis-Flex 采用独特的技术架构、相比许多同类框架,MyBatis-Flex 的在增删改查等方面的性能均超越其 5-10 倍或以上。

4. 更灵动

MyBatis-Flex 支持多主键、多表查询、逻辑删除、乐观锁、数据脱敏、数据加密、多数据源、分库分表、字段权限、字段加密、多租户、事务管理、SQL 审计等特性。 这一切,免费且灵动。

创建 Spring Boot 项目

当前使用的是 SpringBoot v3.x 版本,需要添加 mybatis-flex-spring-boot3-starter 依赖。同时,为了便于测试,也引入了 HikariCP 数据源管理及 H2 数据库如下。代码所示:

<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>3.4.3</version>
  <relativePath/>
</parent>

<properties>
		<java.version>17</java.version>
		<mybatis-flex.version>1.10.8</mybatis-flex.version>
	</properties>
<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
  </dependency>

  <dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
  </dependency>

  <dependency>
    <groupId>com.mybatis-flex</groupId>
    <artifactId>mybatis-flex-spring-boot3-starter</artifactId>
    <version>${mybatis-flex.version}</version>
  </dependency>
  <dependency>
    <groupId>com.mybatis-flex</groupId>
    <artifactId>mybatis-flex-processor</artifactId>
    <version>${mybatis-flex.version}</version>
    <scope>provided</scope>
  </dependency>
  <dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
  </dependency>
</dependencies>

应用配置application.yml内容如下:

spring:
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:test;DB_CLOSE_DELAY=-1
    username: sa
    password:
  sql:
    init:
      schema-locations: classpath:schema.sql
      data-locations: classpath:data.sql

MybatisFlexH2Application.java代码如下:

package com.waylau.mybatisflex.mybatisflexh2;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.waylau.mybatisflex.mybatisflexh2.mapper")
public class MybatisFlexH2Application {

	public static void main(String[] args) {
		SpringApplication.run(MybatisFlexH2Application.class, args);
	}

}

@MapperScan用于配置扫描Mapper所在的目录。

初始化数据库

Spring Boot 针对 JDBC DataSource 可以使用 DML 脚本自动创建库表,并使用DDL脚本初始化其数据。默认情况下,从classpath*:schema.sql加载模式脚本,从classpath*:data.sql加载数据脚本。我们在resources目录下的创建schema.sql和data.sql文件,内容如下。

1. schema.sql

create table t_role (id int, role_name varchar);

2. data.sql

INSERT INTO t_role (id, role_name) VALUES (1, '骑士');
INSERT INTO t_role (id, role_name) VALUES (2, '法师');
INSERT INTO t_role (id, role_name) VALUES (3, '机械师');

编写 MyBatis-Flex 代码

1. 定义实体

package com.waylau.mybatisflex.mybatisflexh2.model;

import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;

@Table("t_role")
public class Role {

    @Id(keyType = KeyType.Auto)
    private Long id;

    private String roleName;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getRoleName() {
        return roleName;
    }

    public void setRoleName(String roleName) {
        this.roleName = roleName;
    }

}

2. 定义Mapper

package com.waylau.mybatisflex.mybatisflexh2.mapper;


import com.mybatisflex.core.BaseMapper;
import com.waylau.mybatisflex.mybatisflexh2.model.Role;

public interface RoleMapper extends BaseMapper<Role> {
}

编写测试代码

MybatisFlexH2ApplicationTests.java 为测试类,测试代码如下:

package com.waylau.mybatisflex.mybatisflexh2;

import com.mybatisflex.core.query.QueryWrapper;
import com.waylau.mybatisflex.mybatisflexh2.mapper.RoleMapper;
import com.waylau.mybatisflex.mybatisflexh2.model.Role;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

import static com.waylau.mybatisflex.mybatisflexh2.model.table.RoleTableDef.ROLE;

@SpringBootTest
class MybatisFlexH2ApplicationTests {

    private static Logger log = LoggerFactory.getLogger(MybatisFlexH2ApplicationTests.class);

    @Autowired
    private RoleMapper roleMapper;

    @Test
    void contextLoads() {
        // 查询角色中带“师”的角色列表 
        QueryWrapper queryWrapper = QueryWrapper.create()
                .select()
                .where(ROLE.ROLE_NAME.like("师"));

        List<Role> roleList = roleMapper.selectListByQuery(queryWrapper);

        roleList.forEach(role -> log.info("role id {}, {}", role.getId(), role.getRoleName()));
    }
}

运行应用,控制台输入日志内容如下:

2025-03-05T09:12:54.511+08:00  INFO 18220 --- [           main] c.w.m.m.MybatisFlexH2ApplicationTests    : role id 2, 法师
2025-03-05T09:12:54.511+08:00  INFO 18220 --- [           main] c.w.m.m.MybatisFlexH2ApplicationTests    : role id 3, 机械师

参考引用

更多示例源码、Mybatis-Flex学习资料可见