MyBatis-Flex v1.6.7 发布,新增【读写分离】组件
MyBatis-Flex: 一个优雅的 MyBatis 增强框架
特征
1、很轻量
MyBatis-Flex 整个框架只依赖 MyBatis,再无其他任何第三方依赖。
2、只增强
MyBatis-Flex 支持 CRUD、分页查询、多表查询、批量操作,但不丢失 MyBatis 原有的任何功能。
3、高性能
MyBatis-Flex 采用独特的技术架构、相比许多同类框架,MyBatis-Flex 的在增删改查等方面的性能均超越其 5~10 倍或以上。
4、更灵动
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
接口来自定义自己的数据源读写分离策略(分片策略)例如:
public class MyStrategy implements DataSourceShardingStrategy { public String doSharding(String currentDataSourceKey , Object mapper, Method mapperMethod, Object[] methodArgs){ //返回新的数据源 key return "newDataSourceKey"; } }
doSharding 的参数分别为:
- currentDataSourceKey:当前使用的数据源 key
- mapper:当前的 mapper 对象
- mapperMethod: 当前的 mapper 方法
- methodArgs:当前的 mapper 方法的参数内容
自定义好 数据源分片策略后,在项目启动时,需要通过 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
数据源进行负载均衡。
那么,我们的分片策略代码如下:
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 的读写分离组件,只进行数据查询和数据操作时的读写分离,并不涉及主从数据库之间的数据同步,主从数据库同步需要用户自己在数据库服务器,通过第三方组件去实现。
MyBatis-Flex v1.6.7 更新细节如下:
- 新增:多数据源添加 DataSourceShardingStrategy 接口,用于读写分离
- 新增:Fastjson2TypeHandler 添加对接口或者抽象类的支持,感谢 @tangxin
- 优化:DataSourceKey 移除不必要的属性定义
- 优化:代码生成器升级 enjoy 模块,以适配 JDK21
- 优化:Table 注解移除 @Inherited ,以解决 VO 等继承 model 的实体类中,生成多余的、或冲突的 tableDef
- 修复:APT 在类名和字段名相同的情况下,构建的 TableDef 出错的问题
- 修复:FlexConfiguration 在某些情况下替换 resultMap 时出错的问题
- 修复:AbstractRelation 在某些极端情况下出现 NPE 的问题
- 修复:查询条件 OperatorQueryCondition 参数值未检查 effective 的问题,感谢 @wanggaoquan
- 修复:查询条件 OperatorSelectCondition 参数值未检查 effective 的问题,感谢 @wanggaoquan
- 修复:QueryWrapper 在某些情况下构建的 SQL 会出现两次 as 的问题,感谢 @cnscoo
- 文档:优化 kotlin 文档的 git 链接顺序与完善文档内容,感谢 @卡莫sama
- 文档:多租户添加相关的代码示例
- 文档:添加读写分离的相关文档
更多的代码贡献者,请参考:https://mybatis-flex.com/zh/intro/what-is-mybatisflex.html#%E8%B4%A1%E7%8C%AE%E8%80%85
进一步了解 MyBatis-Flex 框架,请参考一下链接:
- 1、快速开始:https://mybatis-flex.com/zh/intro/getting-started.html
- 2、多表关联查询:https://mybatis-flex.com/zh/base/query.html
- 3、一对多、多对一:https://mybatis-flex.com/zh/base/relations-query.html
- 4、灵活的 QueryWrapper:https://mybatis-flex.com/zh/base/querywrapper.html
- 5、逻辑删除:https://mybatis-flex.com/zh/core/logic-delete.html
- 6、乐观锁:https://mybatis-flex.com/zh/core/version.html
- 7、数据填充:https://mybatis-flex.com/zh/core/fill.html
- 6、数据脱敏:https://mybatis-flex.com/zh/core/mask.html
- 7、SQL 审计:https://mybatis-flex.com/zh/core/audit.html
- 8、多数据源:https://mybatis-flex.com/zh/core/multi-datasource.htm
- 9、数据源加密:https://mybatis-flex.com/zh/core/datasource-encryption.html
- 10、动态表名:https://mybatis-flex.com/zh/core/dynamic-table.html
- 11、事务管理:https://mybatis-flex.com/zh/core/tx.html
- 12、数据权限:https://mybatis-flex.com/zh/core/data-permission.html
- 13、字段权限:https://mybatis-flex.com/zh/core/columns-permission.html
- 14、字段加密:https://mybatis-flex.com/zh/core/columns-encrypt.html
- 15、字典回写:https://mybatis-flex.com/zh/core/columns-dict.html
- 16、枚举属性:https://mybatis-flex.com/zh/core/enum-property.html
- 17、多租户:https://mybatis-flex.com/zh/core/multi-tenancy.html
- 18、代码生成器:https://mybatis-flex.com/zh/others/codegen.html
- 19、QQ 交流群:https://mybatis-flex.com/zh/intro/qq-group.html
- 20、更好用的功能正在路上:https://mybatis-flex.com
bilibili 视频教程(免费):
课程 1:《MyBatis-Flex 视频教程》
课程简介:该课程由 王帅 老师录制主讲, 王帅 老师也是除了作者以外,对 MyBatis-Flex 代码贡献最大的 committer。 其无论对 MyBatis 还是 MyBatis-Flex,都有非常深入的理解。
课程地址:
https://www.bilibili.com/video/BV11h411A7cU
课程 2:《MyBatis-Flex 轻松掌握,从零基础到高级应用的完整教程!持续更新中~》
课程简介:该课程由周游老师录制,周游老师有多年的开发经验以及丰富的教学经验,能够把 MyBatis-Flex 的许多原理知识讲解的通俗易懂、深入浅出。
课程地址:

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
RuoYi-Vue-Plus 发布 4.8.1 稳定性增强 修复部分 bug
更新日志 依赖升级 update springboot 2.7.15 => 2.7.16 update springboot-admin 2.7.10 => 2.7.11 update satoken 1.35.0.RC => 1.36.0 update lombok 1.18.26 =. 1.18.30 update mybatis-plus 3.5.3.1 => 3.5.3.2 update easyexcel 3.3.1 => 3.3.2 update hutool 5.8.18 => 5.8.20 功能更新 update 优化 重置密码注释参数中文解释错误 update 优化 getTokenActivityTimeout => getTokenActiveTimeout update 优化字典标签支持传分隔符分隔的字符串和数组,优化渲染效果 update 优化 控制台debuger位置错误问题 update 优化 TopNav 菜单样式 update 优化 全局异常处理器 业务异常不输出具体堆栈信息 减少无用日志存储 update 优...
- 下一篇
开源即时通讯应用 Tailchat v1.9.1 已发布,插件化分布式 noIM 应用
介绍 Tailchat是一款插件化易拓展的开源 IM 应用。可拓展架构赋予Tailchat无限可能性。 前端微内核架构 + 后端微服务架构 使得Tailchat能够驾驭任何定制化 / 私有化的场景 面向企业与私域用户打造,高度自由的群组管理与定制化的面板展示可以让私域主能够更好的展示自己的作品,管理用户,打造自己的品牌与圈子。 官方网站:https://tailchat.msgbyte.com/ v1.9.1 更新内容 特性更新 增加面板展示权限 为了更好的控制展示内容,在本次更新中新增了面板展示权限,你可以在群组级别或者面板级别的权限控制中控制用户展示方式 你可以通过权限的组合来控制面板的显示与隐藏属性。 需要注意的是,群组级别的权限与面板级别的权限合并方式是合并而不是覆盖,这意味着如果开启了群组的权限,那么不论面板权限是否开启权限该用户都是有相关权限的 在本次更新后默认的群组权限将会丢失,这是因为增加了新的权限而过去的群组是没有授予该权限的,具体的修复方式可以阅读这篇博客了解更多:群组面板可见性权限问题 其他更新 增加剪切板处理工具 默认增加url处理工具 admin: 增加...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS关闭SELinux安全模块
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Linux系统CentOS6、CentOS7手动修改IP地址