大家好,最近马上又要带大家做一个新项目了,为了让大家学习到更多技术,我也在不断学习,这次的新项目不仅会涉及很多 AI 技术,还会包括很多新技术和开发模式。比如这次不再使用 MyBatis Plus 来操作数据库,而是用一个更新的技术 MyBatis-Flex。

在 Java 持久层框架的世界里,MyBatis 以其灵活性和对 SQL 的强大控制力,赢得了广大开发者的青睐。然而,在实际开发中,我们常常需要编写大量重复的 CRUD 代码,这促使了一系列 MyBatis 增强框架的诞生。今天,我们要介绍的主角是 MyBatis-Flex,一个设计优雅、轻量且拥有卓越性能的 MyBatis 增强框架。
MyBatis-Flex 旨在极大地提升开发效率和编码体验,让开发者能将更多精力投入到核心业务逻辑中。它通过内置的 QueryWrapper 实现了类型安全的查询构建,显著减少了手写 SQL 的工作量和出错的可能性。同时,它保持了对原生 MyBatis 功能的完全兼容,做到了“只增强,不限制”。
Mybatis-Flex 的有什么特点?
-
轻量: 除了 MyBatis,没有任何第三方依赖轻依赖、没有任何拦截器,其原理是通过 SqlProvider 的方式实现的轻实现。同时,在执行的过程中,没有任何的 Sql 解析(Parse)轻运行。 -
灵活: 支持多主键、多表查询、逻辑删除、乐观锁、数据脱敏、数据加密、多数据源、分库分表、字段权限、 字段加密、多租户、事务管理、SQL 审计… 等等等等。 这一切,免费且灵动。 -
高性能: 采用独特的技术架构、相比许多同类框架,MyBatis-Flex 的在增删改查等方面的性能均超越其 5~10 倍或以上。 -
只增强: 支持 CRUD、分页查询、多表查询、批量操作,但不丢失 MyBatis 原有的任何功能。
Mybatis-Flex 和同类框架对比
MyBatis-Flex 主要是和 MyBatis-Plus
与 Fluent-MyBatis
对比,内容来源其官网、git 或者网络文章,若有错误欢迎纠正。
-
MyBatis-Plus:老牌的 MyBatis 增强框架,开源于 2016 年。 -
Fluent-MyBatis:阿里云开发的 MyBatis 增强框架(来自于阿里云·云效产品团队)
功能对比
|
|
|
|
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
性能对比
这里直接贴测试结果,还挺惊艳的:
-
MyBatis-Flex 的查询单条数据的速度,大概是 MyBatis-Plus 的 5 ~ 10+ 倍。 -
MyBatis-Flex 的查询 10 条数据的速度,大概是 MyBatis-Plus 的 5~10 倍左右。 -
Mybatis-Flex 的分页查询速度,大概是 Mybatis-Plus 的 5~10 倍左右。 -
Mybatis-Flex 的数据更新速度,大概是 Mybatis-Plus 的 5~10+ 倍。
具体性能对比测试,移步:
https://mybatis-flex.com/zh/intro/benchmark.html
Mybatis-Flex 支持的数据库类型
MyBatis-Flex 支持的数据库类型,如下表格所示(只列举了一部分,几乎所有数据库都支持),我们还可以通过自定义方言的方式,持续添加更多的数据库支持。
|
|
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
快速开始
第 1 步:创建数据库表
CREATE TABLEIFNOTEXISTS`tb_account`
(
`id` INTEGER PRIMARY KEY auto_increment,
`user_name`VARCHAR(100),
`age` INTEGER,
`birthday` DATETIME
);
INSERTINTO tb_account(id, user_name, age, birthday)
VALUES (1, '张三', 18, '2020-01-11'),
(2, '李四', 19, '2021-03-21');
第 2 步:创建 Spring Boot 项目,并添加 Maven 依赖
TIP:可以使用 Spring Initializer 快速初始化一个 Spring Boot 工程。
需要添加的 Maven 主要依赖示例:
<dependencies>
<dependency>
<groupId>com.mybatis-flex</groupId>
<artifactId>mybatis-flex-spring-boot-starter</artifactId>
<version>1.5.3</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>
<!-- for test only -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
第 3 步:对 Spring Boot 项目进行配置
在 application.yml
中配置数据源:
# DataSource Config
spring:
datasource:
url: jdbc:mysql://localhost:3306/flex_test
username: root
password: 12345678
在 Spring Boot 启动类中添加 @MapperScan
注解,扫描 Mapper 文件夹:
@SpringBootApplication
@MapperScan("com.mybatisflex.test.mapper")
public class MybatisFlexTestApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisFlexTestApplication.class, args);
}
}
第 4 步:编写实体类和 Mapper 接口
这里使用了 Lombok 来简化代码。
@Data
@Table("tb_account")
public class Account {
@Id(keyType = KeyType.Auto)
private Long id;
private String userName;
private Integer age;
private Date birthday;
}
-
使用 @Table("tb_account")
设置实体类与表名的映射关系 -
使用 @Id(keyType = KeyType.Auto)
标识主键为自增
Mapper 接口继承 BaseMapper 接口:
public interface AccountMapper extends BaseMapper<Account> {
}
这部分也可以使用 MyBatis-Flex 的代码生成器来生,功能非常强大的。详情进入:
https://mybatis-flex.com/zh/others/codegen.html
第 5 步:开始使用
添加测试类,进行功能测试:
import static com.mybatisflex.test.entity.table.AccountTableDef.ACCOUNT;
@SpringBootTest
class MybatisFlexTestApplicationTests {
@Autowired
private AccountMapper accountMapper;
@Test
void contextLoads() {
QueryWrapper queryWrapper = QueryWrapper.create()
.select()
.where(ACCOUNT.AGE.eq(18));
Account account = accountMapper.selectOneByQuery(queryWrapper);
System.out.println(account);
}
}
控制台输出:
Account(id=1, userName=张三, age=18, birthday=Sat Jan 11 00:00:00 CST 2020)
以上的 示例 中, ACCOUNT
为 MyBatis-Flex 通过 APT 自动生成,只需通过静态导入即可,无需手动编码。
总结
MyBatis-Flex 以其极致轻量、功能强大、无与伦比的高性能以及纯粹增强不限制的设计理念,为 MyBatis 生态注入了新的活力。它不仅提供了开发人员日常所需的大部分便捷功能,还免费开放了如多数据源、数据脱敏、字段加密等诸多企业级特性。感兴趣的同学也可以尝试一下 MyBatis-Flex(不过老项目中谨慎使用哦)。
-
官网文档: https://mybatis-flex.com/ -
GitHub: https://github.com/mybatis-flex/mybatis-flex - 更多 AI 知识库:https://www.yuque.com/lhyyh/ai