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 无疑是一个值得深入研究和应用的技术方案。

相关推荐
光军oi4 小时前
JAVA全栈JVM篇————初识JVM
java·开发语言·jvm
我命由我123454 小时前
PDFBox - PDFBox 加载 PDF 异常清单(数据为 null、数据为空、数据异常、文件为 null、文件不存在、文件异常)
java·服务器·后端·java-ee·pdf·intellij-idea·intellij idea
渣哥4 小时前
当容器里有多个 Bean,@Qualifier 如何精准定位?
javascript·后端·面试
7哥♡ۣۖᝰꫛꫀꪝۣℋ4 小时前
Spring Boot
java·spring boot·后端
Moniane4 小时前
C++深度解析:从核心特性到现代编程实践
java·开发语言·jvm
攻城狮CSU4 小时前
C# 数据加载专题 之泛型序列化
java·servlet·c#
浩泽学编程4 小时前
【源码深度 第1篇】LinkedList:双向链表的设计与实现
java·数据结构·后端·链表·jdk
哲此一生9844 小时前
创建一个SpringBoot项目(连接数据库)
java·spring boot·后端
文心快码BaiduComate4 小时前
Comate Zulu实测:不会编程也能做软件?AI程序员现状令人震惊
java·程序员·前端框架