MyBatis-Flex 整个框架只依赖 MyBatis,再无其他任何第三方依赖。
MyBatis-Flex 支持 CRUD、分页查询、多表查询、批量操作,但不丢失 MyBatis 原有的任何功能。
MyBatis-Flex 采用独特的技术架构、相比许多同类框架,MyBatis-Flex 的在增删改查等方面的性能均超越其 5~10 倍或以上。
MyBatis-Flex 支持多主键、多表查询、逻辑删除、乐观锁、数据脱敏、数据加密、多数据源、分库分表、字段权限、 字段加密、多租户、事务管理、SQL 审计... 等等等等。 这一切,免费且灵动。
在 MyBatis-Flex v1.6.6 中,已添加对 jdk21 的支持,到目前为止, MyBatis-Flex 已支持 jdk8 ~ jdk21 所有版本。
当前的版本(v1.6.7),主要是新增了【读写分离】模块,不用再借助其他任何第三方框架来实现,MyBatis-Flex 的读写分离功能是基于 【多数据源】 功能来实现的。
读写分离的功能,要求当前环境必须是多个数据库(也可理解为多个数据源),其原理是: 让主数据库(master)处理事务性操作,比如:增、删、改(INSERT、DELETE、UPDATE),而从数据库(slave)处理查询(SELECT)操作。
在 MyBatis 框架中,我们知道: 所有关于数据库的的操作都是通过 Mapper 来进行的,Mapper 里的一个方法,往往是和一个执行 SQL 一一对应。
因此,在 MyBatis-Flex 中,提供了一种基于 Mapper 方法的读写分离策略。
在 MyBatis-Flex 框架中,我们需要通过实现 DataSourceShardingStrategy 接口来自定义自己的数据源读写分离策略(分片策略)例如:
DataSourceShardingStrategy
public class MyStrategy implements DataSourceShardingStrategy { public String doSharding(String currentDataSourceKey , Object mapper, Method mapperMethod, Object[] methodArgs){ //返回新的数据源 key return "newDataSourceKey"; } }
doSharding 的参数分别为:
自定义好 数据源分片策略后,在项目启动时,需要通过 DataSourceManager 配置自己的自定义分片策略:
DataSourceManager
DataSourceManager.setDataSourceShardingStrategy(new MyStrategy());
假设数据源配置如下:
mybatis-flex: datasource: master: type: druid url: jdbc:mysql://127.0.0.1:3306/master-db username: root password: 123456 slave1: type: com.your.datasource.type2 url: jdbc:mysql://127.0.0.1:3306/slave1 username: root password: 123456 slave2: type: com.your.datasource.type2 url: jdbc:mysql://127.0.0.1:3306/slave2 username: root password: 123456 other: type: com.your.datasource.type2 url: jdbc:mysql://127.0.0.1:3306/other username: root password: 123456
以上配置中,一共有 4 个数据源,分别为 master、slave1、slave2、other。 我们的需求是:在 增删改 时,走 master 数据源,而在查询时,随机自动使用 slave1、slave2 数据源进行负载均衡。
master
slave1
slave2
other
那么,我们的分片策略代码如下:
public class MyStrategy implements DataSourceShardingStrategy { public String doSharding(String currentDataSourceKey , Object mapper, Method mapperMethod, Object[] methodArgs){ // 不管 other 数据源的情况 if ("other".equals(currentDataSourceKey)){ return currentDataSourceKey; } // 如果 mapper 的方法属于 增删改,使用 master 数据源 if (StringUtil.startWithAny(mapperMethod.getName(), "insert", "delete", "update")){ return "master"; } //其他场景,使用 slave1 或者 slave2 进行负载均衡 return "slave*"; } }
MyBatis-Flex 的读写分离组件,只进行数据查询和数据操作时的读写分离,并不涉及主从数据库之间的数据同步,主从数据库同步需要用户自己在数据库服务器,通过第三方组件去实现。
更多的代码贡献者,请参考:https://mybatis-flex.com/zh/intro/what-is-mybatisflex.html#%E8%B4%A1%E7%8C%AE%E8%80%85
课程 1:《MyBatis-Flex 视频教程》
课程简介:该课程由 王帅 老师录制主讲, 王帅 老师也是除了作者以外,对 MyBatis-Flex 代码贡献最大的 committer。 其无论对 MyBatis 还是 MyBatis-Flex,都有非常深入的理解。
课程地址:
https://www.bilibili.com/video/BV11h411A7cU
课程 2:《MyBatis-Flex 轻松掌握,从零基础到高级应用的完整教程!持续更新中~》
课程简介:该课程由周游老师录制,周游老师有多年的开发经验以及丰富的教学经验,能够把 MyBatis-Flex 的许多原理知识讲解的通俗易懂、深入浅出。
https://www.bilibili.com/video/BV1kF411r7ky
评论删除后,数据将无法恢复
MyBatis-Flex v1.6.7 发布,新增【读写分离】组件
MyBatis-Flex: 一个优雅的 MyBatis 增强框架
特征
1、很轻量
2、只增强
3、高性能
4、更灵动
在 MyBatis-Flex v1.6.6 中,已添加对 jdk21 的支持,到目前为止, MyBatis-Flex 已支持 jdk8 ~ jdk21 所有版本。
当前的版本(v1.6.7),主要是新增了【读写分离】模块,不用再借助其他任何第三方框架来实现,MyBatis-Flex 的读写分离功能是基于 【多数据源】 功能来实现的。
读写分离的功能,要求当前环境必须是多个数据库(也可理解为多个数据源),其原理是: 让主数据库(master)处理事务性操作,比如:增、删、改(INSERT、DELETE、UPDATE),而从数据库(slave)处理查询(SELECT)操作。
实现原理
在 MyBatis 框架中,我们知道: 所有关于数据库的的操作都是通过 Mapper 来进行的,Mapper 里的一个方法,往往是和一个执行 SQL 一一对应。
因此,在 MyBatis-Flex 中,提供了一种基于 Mapper 方法的读写分离策略。
数据源分片策略
在 MyBatis-Flex 框架中,我们需要通过实现
DataSourceShardingStrategy
接口来自定义自己的数据源读写分离策略(分片策略)例如:doSharding 的参数分别为:
自定义好 数据源分片策略后,在项目启动时,需要通过
DataSourceManager
配置自己的自定义分片策略:示例代码
假设数据源配置如下:
以上配置中,一共有 4 个数据源,分别为
master
、slave1
、slave2
、other
。 我们的需求是:在 增删改 时,走 master 数据源,而在查询时,随机自动使用slave1
、slave2
数据源进行负载均衡。那么,我们的分片策略代码如下:
注意事项
MyBatis-Flex v1.6.7 更新细节如下:
更多的代码贡献者,请参考:https://mybatis-flex.com/zh/intro/what-is-mybatisflex.html#%E8%B4%A1%E7%8C%AE%E8%80%85
进一步了解 MyBatis-Flex 框架,请参考一下链接:
bilibili 视频教程(免费):
课程 1:《MyBatis-Flex 视频教程》
课程地址:
https://www.bilibili.com/video/BV11h411A7cU
课程 2:《MyBatis-Flex 轻松掌握,从零基础到高级应用的完整教程!持续更新中~》
课程地址:
https://www.bilibili.com/video/BV1kF411r7ky