mybatis作为一款应用非常广泛的持久层框架,随之又出现了mybatis的增强框架。mybatis的增强框架就是在mybatis 的基础上又添加了许多的功能,目的就是为简化开发,提供效率而生。mybatis-plus就是一款很流行的增加框架,在 mybatis-plus 上既可以使用自身特有的功能,还可以使用 mybatis 的原生功能。最近又发现了一款新的开源的mybatis增强框架,mybatis-flex,下面将体验过程记录分享出来。
Mybatis-Flex 是一个优雅的 Mybatis 增强框架,它非常轻量、同时拥有极高的性能与灵活性。我们可以轻松的使用 Mybaits-Flex 链接任何数据库,其内置的 QueryWrapper 亮点帮助我们极大的减少了 SQL 编写的工作的同时,减少出错的可能性。
(官网地址:https://mybatis-flex.com/)
总而言之,MyBatis-Flex 能够极大地提高我们的开发效率和开发体验,让我们有更多的时间专注于自己的事情。
2)性能对比:
这里直接贴测试结果:
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+ 倍。
MyBatis-Flex 支持的数据库类型,如下表格所示,我们还可以通过自定义方言的方式,持续添加更多的数据库支持。
CREATE TABLE IF NOT EXISTS `tb_account`
(
`id` INTEGER PRIMARY KEY auto_increment,
`user_name` VARCHAR(100),
`age` INTEGER,
`birthday` DATETIME
);
INSERT INTO tb_account(id, user_name, age, birthday)
VALUES (1, '张三', 18, '2020-01-11'),
(2, '李四', 19, '2021-03-21');
springboot的版本为2.7.x,pom.xml依赖如下:
org.springframework.boot
spring-boot-starter-web
com.mybatis-flex
mybatis-flex-spring-boot-starter
1.5.3
mysql
mysql-connector-java
runtime
com.zaxxer
HikariCP
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
org.projectlombok
lombok
src/main/resources
**/*
*.properties
target/generated-sources
注意:target/generated-sources的配置,否则影响APT 自动生成类的引用。
在 application.yml 中配置数据源:
# DataSource Config
spring:
datasource:
url: jdbc:mysql://localhost:3306/flex_test
username: root
password: 123456
在启动类中
添加 @MapperScan 注解,扫描 Mapper 文件夹:
@SpringBootApplication
@MapperScan("com.*.*.mapper")
public class SpringbootMybatisFlexApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootMybatisFlexApplication.class, args);
}
}
@Data
@Table("tb_account")
public class Account {
@Id(keyType = KeyType.Auto)
private Long id;
private String userName;
private Integer age;
private Date birthday;
}
public interface AccountMapper extends BaseMapper {
}
这部分也可以使用 MyBatis-Flex 的代码生成器来生,功能非常强大的。详情进入:https://mybatis-flex.com/zh/others/codegen.html
测试类如下:
import static com.*.*.model.table.AccountTableDef.ACCOUNT;
@SpringBootTest
class SpringbootMybatisFlexApplicationTests {
@Autowired
private AccountMapper accountMapper;
@Test
void contextLoads() {
QueryWrapper queryWrapper = QueryWrapper.create()
.select()
//.where("age = 18");
.where(ACCOUNT.AGE.eq(18));
Account account = accountMapper.selectOneByQuery(queryWrapper);
System.out.println(account);
}
}
注意,添加静态引入import static com...model.table.AccountTableDef.ACCOUNT;
控制台输出如下:
以上的 示例 中, ACCOUNT 为 MyBatis-Flex 通过 APT 自动生成,只需通过静态导入即可,无需手动编码。
整体来讲,这个框架是Mybatis的增强版,几乎集成了mybatis plus、jooq、fluent mybatis的所有优点,大家可以探索一番,官方网站:https://mybatis-flex.com/。
尤其是QueryWrapper 的使用,若体验遇到问题,还可以参考官方实例:https://gitee.com/mybatis-flex/mybatis-flex-samples/tree/master