Boot+Cloud项目学习:macrozheng.com
在 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 增强框架(来自于阿里云·云效产品团队)
功能对比
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
这或许是一个对你有用的开源项目,mall项目是一套基于 SpringBoot3 + Vue 的电商系统(Github标星60K),后端支持多模块和 2024最新微服务架构 ,采用Docker和K8S部署。包括前台商城项目和后台管理系统,能支持完整的订单流程!涵盖商品、订单、购物车、权限、优惠券、会员、支付等功能!
-
Boot项目:https://gitee.com/macrozheng/mall -
Cloud项目:https://gitee.com/macrozheng/mall-swarm -
教程网站:https://www.macrozheng.com
项目演示:
性能对比
这里直接贴测试结果:
-
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 增强框架,或者对现有框架的性能、功能限制感到不満,可以尝试一下 MyBatis-Flex。
-
官网文档: https://mybatis-flex.com/ -
GitHub: https://github.com/mybatis-flex/mybatis-flex
Github上标星60K的电商实战项目mall,全套 视频教程 已更新完毕!全套教程约40小时,共113期,通过这套教程你可以拥有一个涵盖主流Java技术栈的完整项目经验,同时提高自己独立开发一个项目的能力,下面是项目的整体架构图,感兴趣的小伙伴可以点击链接 mall视频教程 加入学习。
整套 视频教程 的内容还是非常完善的,涵盖了mall项目最佳学习路线、整体框架搭建、业务与技术实现全方位解析、线上Docker环境部署、微服务项目学习等内容,你也可以点击链接 mall视频教程 了解更多内容。

