Mybatis-Plus的竞争对手来了,试试 MyBatis-Flex

关注我的公众号:【编程朝花夕拾】,可获取首发内容。

01 引言

如果你厌倦了原生的Mybatis的写法,你可能会选择比较火的ORM框架Mybatis-PlusMybaits-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 无疑是一个值得深入研究和应用的技术方案。

相关推荐
小灰灰搞电子8 小时前
Rust Attribute(属性标记)完整整理
开发语言·后端·rust
leikooo8 小时前
ARTS 0913: 双栈互补实现队列、CIDR 聚合化解路由膨胀与 AI 作弊串通绝非偶然 Bug
java·链表·个人开发
tedcloud1238 小时前
God‘s Eye View 怎么搭建?在云服务器上部署一个实时 3D 地球可视化平台
linux·服务器·开发语言·后端·rust
星间都市山脉8 小时前
Android16 SystemService.onBootPhase 调用时机
android·java·linux·windows·ubuntu
深入云栈8 小时前
Netty 4.2.x 源码深度解析 (十三):Epoll 传输 —— Linux 高性能 IO 的 Netty 实现
java·后端
ynchyong8 小时前
Linux nohup 后台服务合并标准错误输出到一个文件
java·linux·运维
用户3126874877208 小时前
Lombok 的 @Data 到底怎么工作的?Java 注解处理器实战全链路拆解
java
Lyra_Infra8 小时前
从一段错误 JSON 说起:Policy、Role 与 IAM
后端·json·aigc
Charlie_Byte8 小时前
在用户目录安装多版本 JDK,并用环境变量切换
后端
小羊没烦恼!9 小时前
Memory 记忆设计讨论:为什么 Agent Memory 不能只靠向量数据库?
java·开发语言·windows·算法·c#