springboot之mybatis-flex
一、mybatis-flex也是一个mybatis的增强框架它非常轻量、同时拥有极高的性能与灵活性。我们可以轻松的使用 Mybaits-Flex 链接任何数据库。
二、和MyBatis-Plus
与 Fluent-Mybatis
对比。
功能或特点 | MyBatis-Flex | MyBatis-Plus | Fluent-Mybatis |
---|---|---|---|
对 entity 的基本增删改查 | ✅ | ✅ | ✅ |
分页查询 | ✅ | ✅ | ✅ |
分页查询之总量缓存 | ✅ | ✅ | ❌ |
分页查询无 SQL 解析设计(更轻量,及更高性能) | ✅ | ❌ | ✅ |
多表查询: from 多张表 | ✅ | ❌ | ❌ |
多表查询: left join、inner join 等等 | ✅ | ❌ | ✅ |
多表查询: union,union all | ✅ | ❌ | ✅ |
单主键配置 | ✅ | ✅ | ✅ |
多种 id 生成策略 | ✅ | ✅ | ✅ |
支持多主键、复合主键 | ✅ | ❌ | ❌ |
字段的 typeHandler 配置 | ✅ | ✅ | ✅ |
除了 Mybatis,无其他第三方依赖(更轻量) | ✅ | ❌ | ❌ |
QueryWrapper 是否支持在微服务项目下进行 RPC 传输 | ✅ | ❌ | 未知 |
逻辑删除 | ✅ | ✅ | ✅ |
乐观锁 | ✅ | ✅ | ✅ |
SQL 审计 | ✅ | ❌ | ❌ |
数据填充 | ✅ | ✔️ (收费) | ✅ |
数据脱敏 | ✅ | ✔️ (收费) | ❌ |
字段权限 | ✅ | ✔️ (收费) | ❌ |
字段加密 | ✅ | ✔️ (收费) | ❌ |
字典回写 | ✅ | ✔️ (收费) | ❌ |
Db + Row | ✅ | ❌ | ❌ |
Entity 监听 | ✅ | ❌ | ❌ |
多数据源支持 | ✅ | 借助其他框架或收费,不支持非Spring项目 | ❌ |
多租户 | ✅ | ✅ | ❌ |
3、使用教程地址:https://mybatis-flex.com/zh/intro/getting-started.html
4、这里对springboot相关的说明不是太多,这里补充一些
1)springboot映入Maven
<dependency> <groupId>com.mybatis-flex</groupId> <artifactId>mybatis-flex-spring-boot-starter</artifactId> </dependency>
2)引入驱动和线程池
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
3)多数据源配置,参数和druid相关配置一致。
mybatis-flex: datasource: default: type: druid driverClassName: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/flex?useSSL=false&useUnicode=true&characterEncoding=utf8 username: root password: root other: type: druid driverClassName: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/flex2?useSSL=false&useUnicode=true&characterEncoding=utf8 username: root password: root mapper-locations: classpath:/mapper/*.xml
4)多数据源使用
5)数据查询
a、加入配置mybatis-flex.properties
# 开启table配置 processor.mappersGenerateEnable=true
b、通过idea工具的build功能可以使用查询相关,类似lombok.默认生成在target/generated-sources下
c、查询引用
说明:这里的USER是通过编译后的东西生成的,报错情况下,手动build一下就可以了。
d、分页查询,默认是内置了方法的
e、mapper.xml的使用和mybatis一样,这里不错说明。
<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.xbd.flex.mapper.UserMapper"> <select id="listUser" resultType="com.xbd.flex.entity.User"> select * from user; </select> </mapper>
6)控制台日志配置
@Configuration public class XbdConfigurationCustomizer implements ConfigurationCustomizer { public void customize(FlexConfiguration flexConfiguration) { flexConfiguration.setLogImpl(StdOutImpl.class); } }
7)代码生成,通过表生成java类
public class Codegen { public static void main(String[] args) { //配置数据源 DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/flex?characterEncoding=utf-8"); dataSource.setUsername("root"); dataSource.setPassword("root"); //创建配置内容 GlobalConfig globalConfig = new GlobalConfig(); //设置只生成哪些表 globalConfig.addGenerateTable("test"); //设置 entity 的包名 globalConfig.setEntityPackage("com.xbd.flex.entity"); //父类 globalConfig.setEntitySupperClass(BaseEntity.class); //去除接口 globalConfig.setEntityInterfaces(new Class[0]); //设置 entity 是否使用 Lombok globalConfig.setEntityWithLombok(true); //是否生成 mapper 类,默认为 false globalConfig.setMapperGenerateEnable(true); //设置 mapper 类的包名 globalConfig.setMapperPackage("com.xbd.flex.mapper"); //通过 datasource 和 globalConfig 创建代码生成器 Generator generator = new Generator(dataSource, globalConfig); //生成代码 generator.generate(); } }
5、这里说明一下,这个框架默认觉得还有很多地方不是很完善。
1)*.xml的分页方案,这里是没有的。还是得通过pagehelper等工具进行。(可能是我没有发现)
2)代码生成工具,在有父类时,没有办法进行字段过滤,查询源码,没有找到相关配置。
3)baseMapper的查询限制的比较死,类似JPA的方式,但是没有JPA灵活。
4)官网的说明不够细吧。