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 接口来自定义自己的数据源读写分离策略(分片策略)例如:

java
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 配置自己的自定义分片策略:

java
DataSourceManager.setDataSourceShardingStrategy(new MyStrategy());

示例代码​

假设数据源配置如下:

yaml
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 个数据源,分别为 masterslave1slave2other。 我们的需求是:在 增删改 时,走 master 数据源,而在查询时,随机自动使用 slave1slave2 数据源进行负载均衡。

那么,我们的分片策略代码如下:

java
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 的许多原理知识讲解的通俗易懂、深入浅出。

课程地址:

https://www.bilibili.com/video/BV1kF411r7ky


相關推薦

2022-11-05

2022年云栖大会上,PolarDB-X 发布2.2.0版本,这是一个重要的里程碑版本,重点推出符合分布式数据库金融标准下的企业级和国产化适配,共包括八大核心特性,全面提升 PolarDB-X 分布式数据库在金融、通讯、政务等行业的普适性。

2023-10-28

MyBatis-Flex: 一个优雅的 MyBatis 增强框架 特征 1、很轻量 MyBatis-Flex 整个框架只依赖 MyBatis,再无其他任何第三方依赖。 2、只增强 MyBatis-Flex 支持 CRUD、分页查询、多表查询、批量操作,但不丢失 MyBatis 原有的任何功能

2024-08-07

EQ(10)) t.delete() //[DEBUG][UPDATE][delete from hstest where id=?][10] //新增 hs := dao.NewHstest() hs.SetValue("hello123") hs.SetLevel(12345) hs.SetBody([]byte("hello")) hs.SetRowname("hello1234") hs.SetUpdatetime(time.Now()) hs.SetFloa(123456) hs.SetAge(123) hs.Insert() //[DEBUG][INSERT][inser

2024-09-28

(10)) hs.delete() //[DEBUG][UPDATE][delete from hstest where id=?][10] //新增 hs := dao.NewHstest() hs.SetValue("hello123") hs.SetLevel(12345) hs.SetBody([]byte("hello")) hs.SetRowname("hello1234") hs.SetUpdatetime(time.Now()) hs.Insert() //[DEBUG][INSERT][insertinto hstest(floa,age,value,level,

2023-10-17

的前两天),相约开源PHP办公室,我们一起聊 AI!>>> MyBatis-Flex: 一个优雅的 MyBatis 增强框架 特征 1、很轻量 MyBatis-Flex 整个框架只依赖 MyBatis,再无其他任何第三方依赖。 2、只增强 MyBatis-Flex 支持 CRUD、分页查询、

2024-08-01

简介:Jdao是一种创新的持久层解决方案。主要目的在于 减少编程量,提高生产力,提高性能,支持多数据源整合操作,支持数据读写分离,制定持久层编程规范。 灵活运用Jdao,可以在持久层设计上,减少30%甚至50%以上的编程

2023-06-21

LTS 的版本,有小版本发出,修复一些 bug: 3.22.07.3 我们发布了 3.22.07.3,这是个基于 3.22.07.01 的 bug 修复版本。 某些场景下执行大包语句出现 hang、Lost connection... 两张表通过非分片键关联查询,出现内存泄露 LOAD DATA&nb

2023-07-06

MatrixOne 0.8 版本正式发布啦! 项目文档网站: https://docs.matrixorigin.cn   重点关注: MatrixOne 公测 Beta 版 MatrixOne 的 GA-1.0 版本预计将在第三季度正式发布!本次发布的 0.8 版本是 MatrixOne 在 GA 前的最后一个版本,同时也是

2023-08-13

MyBatis-Flex: 一个优雅的 MyBatis 增强框架 特征 1、很轻量 MyBatis-Flex 整个框架只依赖 MyBatis,再无其他任何第三方依赖。 2、只增强 MyBatis-Flex 支持 CRUD、分页查询、多表查询、批量操作,但不丢失 MyBatis 原有的任何功能

2023-07-14

MyBatis-Flex: 一个优雅的 MyBatis 增强框架 特征 1、很轻量 MyBatis-Flex 整个框架只依赖 MyBatis,再无其他任何第三方依赖。 2、只增强 MyBatis-Flex 支持 CRUD、分页查询、多表查询、批量操作,但不丢失 MyBatis 原有的任何功能

2023-07-27

MyBatis-Flex: 一个优雅的 MyBatis 增强框架 特征 1、很轻量 MyBatis-Flex 整个框架只依赖 MyBatis,再无其他任何第三方依赖。 2、只增强 MyBatis-Flex 支持 CRUD、分页查询、多表查询、批量操作,但不丢失 MyBatis 原有的任何功能

2023-10-10

MyBatis-Flex: 一个优雅的 MyBatis 增强框架 特征 1、很轻量 MyBatis-Flex 整个框架只依赖 MyBatis,再无其他任何第三方依赖。 2、只增强 MyBatis-Flex 支持 CRUD、分页查询、多表查询、批量操作,但不丢失 MyBatis 原有的任何功能

2023-04-19

Mybatis-Flex 是一个优雅的 Mybatis 增强框架,它非常轻量、同时拥有极高的性能与灵活性。我们可以轻松的使用 Mybaits-Flex 链接任何数据库,其内置的 QueryWrapper 帮助我们极大的减少了 SQL 编写的工作的同时,减少出错的可能性。

2023-09-23

技术都能四世同堂,凭什么开发 30 岁就要被干掉? MyBatis-Flex: 一个优雅的 MyBatis 增强框架 特征 1、很轻量 MyBatis-Flex 整个框架只依赖 MyBatis,再无其他任何第三方依赖。 2、只增强 MyBatis-Flex 支持 CRUD、分页查询、