关注我的公众号:【编程朝花夕拾】,可获取首发内容。
01 引言
如果你厌倦了原生的Mybatis
的写法,你可能会选择比较火的ORM
框架Mybatis-Plus
。Mybaits-Plus
虽然好用,但是部分功能是收费的,如数据脱敏、字段权限、字段加密以及字典回写等功能。如果类似的功能你仍想要白嫖,那么MyBatis-Flex
将是不错的选择,所有的功能全部免费。
02 简介

MyBatis-Flex
是一个基于 MyBatis
的增强框架,它保留了 MyBatis
的所有优点,同时引入了更多现代化特性,旨在提供更优雅、更高效的开发体验。与传统的 MyBatis
增强工具不同,MyBatis-Flex
从头开始设计,专注于提供轻量级、高性能且功能丰富的 ORM
解决方案。
小编从该项目刚开源不久就关注到了,当时的star
不足1000。后续就关注的少了,最近发现其star
数已经2.4k
了。
GitHub
地址:github.com/mybatis-fle...
Gitee地址:
gitee.com/mybatis-fle...
文档地址: mybatis-flex.com/
03 最佳实践
其搭建的方式基本和Myabtis-Plus
一致。
3.1 Maven依赖
小编的使用的是springboot2.x
xml
<dependency>
<groupId>com.mybatis-flex</groupId>
<artifactId>mybatis-flex-spring-boot-starter</artifactId>
<version>1.11.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>
需要注意的是我们自行引入数据库连接池,也可以替换成其他的。
3.2 配置文件
properties
#spring.datasource.type=com.alibaba.druid.pool.DruidDataSourc
#spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.url=jdbc:mysql://1127.0.0.1:3306/test
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root
如果引入的数据库连接池是HikariCP
,可以不用配置spring.datasource.type
属性,因为默认就是HikariCP
数据库连接池。如果引入其他的数据库连接池,则需要手动指定,如Druid
。
3.3 映射实体
java
@Data
@Table("users")
public class Users {
@Id(keyType = KeyType.Auto)
private Integer id;
private String username;
private String password;
private String passwordSalt;
private Boolean delFlag;
}
- 使用
@Table("tb_account")
设置实体类与表名的映射关系 - 使用
@Id(keyType = KeyType.Auto)
标识主键为自增
这里的注解几乎和Myabtis-plus
一致。
3.4 Mapper接口
java
public interface UsersMapper extends BaseMapper<Users> {
}
3.5 启动类识别
启动类需要识别Mapper接口,需要使用注解@MapperScan

3.6 测试查询01
java
@Autowired
private UsersMapper usersMapper;
@Test
void contextLoads() {
Users users = usersMapper.selectOneById(1);
System.out.println(users);
}
这里使用了框架自带的查询功能,效果如图:

3.7 测试自定义查询
java
@Test
void test01() {
QueryWrapper wrapper = QueryWrapper.create()
.and(USERS.USERNAME.eq("12345"));
Users users = usersMapper.selectOneByQuery(wrapper);
System.out.println(users);
}
3.8 测试新增
java
@Test
void test02() {
Users users = new Users();
users.setUsername("ws");
users.setPassword("123456");
usersMapper.insert(users);
}
3.9 测试更新
java
@Test
void test03() {
UpdateChain.of(Users.class)
.set(USERS.PASSWORD_SALT, "0000")
.where(Users::getUsername).eq("ws")
.update();
}
3.10 测试删除
java
@Test
void test04() {
QueryWrapper queryWrapper = QueryWrapper.create()
.and(USERS.USERNAME.eq("ws"));
usersMapper.deleteByQuery(queryWrapper);
}
04 与同类框架对比
相比于传统的 MyBatis-Plus,MyBatis-Flex 在以下方面表现更佳:
4.1 轻量级
除了 MyBatis
,没有任何第三方依赖、没有任何拦截器,其原理是通过 SqlProvider
的方式实现的。同时,在执行的过程中,没有任何的 Sql
解析(Parse
)。 这带来了几个好处:
- 极高的性能;
- 极易对代码进行跟踪和调试;
- 更高的把控性。
4.2 灵活性
支持 Entity
的增删改查、以及分页查询的同时,MyBatis-Flex
提供了 Db + Row
工具,可以无需实体类对数据库进行增删改查以及分页查询。 与此同时MyBatis-Flex
内置的 QueryWrapper
可以轻易的帮助我们实现 多表查询 、链接查询 、子查询 等等常见的 SQL 场景。
4.3 强大
支持任意关系型数据库,还可以通过方言持续扩展,同时支持 多(复合)主键 、逻辑删除 、乐观锁配置 、数据脱敏 、数据审计 、 数据填充 等等功能。
05 小结
MyBatis-Flex
作为一个新兴的 MyBatis
增强框架,在保留 MyBatis
灵活性的同时,通过现代化的 API
设计和丰富的功能特性,显著提升了开发效率和运行性能。无论是新项目技术选型还是现有 MyBatis
项目的升级改造,MyBatis-Flex
都值得尝试。
其活跃的社区生态、详细的文档支持以及持续的版本迭代,使得 MyBatis-Flex
成为 Java ORM
领域一个极具竞争力的选择。对于追求代码质量、开发效率和系统性能的团队来说,MyBatis-Flex
无疑是一个值得深入研究和应用的技术方案。