MyBatis 的多表关联查询原来可以这么优雅,MyBatis-Flex v1.4.0 发布

科技资讯 投稿 5800 0 评论

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

总而言之,Mybatis-Flex 能够极大地提高我们的开发效率和开发体验,让我们有更多的时间专注于自己的事情。

v1.4.0 主要是进行了许多优化和 Bug 修复,同时对多表查询进行了许多增强,以下是多对对通过 Left Join 查询的示例:。

假设用户和角色的 Entity 定义如下:

@Table("sys_user") public class User { @Id private Integer userId; private String userName; } @Table("sys_role") public class Role { @Id private Integer roleId; private String roleKey; private String roleName; }

UserVO 定义如下:

public class UserVO { private String userId; private String userName; private List<Role> roleList; }

使用 MyBatis-Flex 进行 Left Join 查询,例如:

QueryWrapper queryWrapper = QueryWrapper.create() .select(USER.USER_ID, USER.USER_NAME, ROLE.ALL_COLUMNS) .from(USER.as("u")) .leftJoin(USER_ROLE).as("ur").on(USER_ROLE.USER_ID.eq(USER.USER_ID)) .leftJoin(ROLE).as("r").on(USER_ROLE.ROLE_ID.eq(ROLE.ROLE_ID)); List<UserVO> userVOS = userMapper.selectListByQueryAs(queryWrapper, UserVO.class); userVOS.forEach(System.err::println);

其执行的查询 SQL 如下:

SELECT `u`.`user_id`, `u`.`user_name`, `r`.* FROM `sys_user` AS `u` LEFT JOIN `sys_user_role` AS `ur` ON `ur`.`user_id` = `u`.`user_id` LEFT JOIN `sys_role` AS `r` ON `ur`.`role_id` = `r`.`role_id`;

查询结果如下:

UserVO{userId='1', userName='admin', roleList=[Role{roleId=1, roleKey='admin', roleName='超级管理员'}]} UserVO{userId='2', userName='ry', roleList=[Role{roleId=2, roleKey='common', roleName='普通角色'}]} UserVO{userId='3', userName='test', roleList=[Role{roleId=1, roleKey='admin', roleName='超级管理员'}, Role{roleId=2, roleKey='common', roleName='普通角色'}]}

当然,MyBatis-Flex 还提供了其他更为强大的查询,具体可以参考:https://mybatis-flex.com/zh/base/field-query.html

 

MyBatis-Flex v1.4.0 更新如下:

    新增:添加 FlexDataSource.removeDatasource() 方法,#I7CQU9:动态数据源移除
  • 新增:代码生成器添加 Schema 配置的支持,感谢 @Font_C
  • 新增:SQL 构建添加 year/month/day 等更多的函数方法版本号@王帅
  • 新增:Db.txWithResult 方法,用于执行有返回结果的事务
  • 新增:LogicDeleteManager,用于处理跳过逻辑删除的场景
  • 新增:BaseMapper 新增 insertWithPk 方法,用于插入带有主键的 Entity 数据
  • 新增:left join 等添加对基本类型集合属性的支持,感谢 @王帅
  • 优化:重命名 MaskManager.withoutMask() 方法为 "execWithoutMask"
  • 优化:更新 OracleDialect 的相关关键字
  • 优化:Page.java 允许传入小于 0 TotalRow 数据
  • 优化:重构 FlexResultSetHandler,使代码更加轻量易懂
  • 优化:重构 TableInfo.buildResultMap,使之在 left join 等场景下减少错误的可能性
  • 优化:likeLeft 和 likeRight 行为替换,使之更加符合查询直觉。!!! 破坏性更新
  • 优化:移除 TableInfo 的 joinTypes 内容
  • 优化:添加 SQL 常量字符串 SqlConsts,对方言等 SQL 进行优化,感谢 @王帅
  • 修复:某些分页场景下出现 "Every derived table must have its own alias" 错误的问题,#I7CUE8:QueryWrapper里面有Group条件进行分页查询时,生成的 count 子查询表没有别名,报”Every derived table must have its own alias“错误
  • 修复:SqlConsts 函数名出错的问题,感谢 @王帅
  • 修复:在某些场景下 EnumWrapper.java 出现 NPE 的问题,版本号@王帅
  • 修复:实体类不支持父类为泛型主键的问题,感谢 @王帅版本号@Font_C
  • 修复:QueryWrapper.clone 并为对 elseValue 进行深度克隆的问题,感谢 @王帅
  • 修复:数据库字段已下划线 _ 开头或者结尾时,生成的 entity 字段配置不正确的问题
  • 修复:当 Entity 有泛型的 BaseEntity 时,表构建出错的问题,感谢 @王帅
  • 修复:当 Entity 在不同的包里,APT 生成在一个包的 bug,感谢 @王帅
  • 修复:通过方言动态添加 queryWrapper 条件,出现 No value specified for param 错误的问题
  • 修复:GroupBy FunctionColumns 出现 sql 构建错误的问题
  • 修复:CacheableServiceImpl 无法获取正确的 TableInfo 的问题
  • 修复:远程数据源配置(比如 Nacos)无法正确拉取的问题,感谢 @王帅
  • 文档:更新关于事务相关的文档
  • 文档:更新关于数据权限的相关文档
  • 文档:更新关于多表查询的相关文档
  • 文档:新增关于 QueryWrapper 函数构建的相关文档
  • 文档:添加游标查询的相关文档
  • 文档:faq 新增更多的常见问题
  • 文档:添加更多代码生成器相关的文档

 

进一步了解 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/field-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/tx.html
  • 10、数据权限:https://mybatis-flex.com/zh/core/data-permission.html
  • 11、字段权限:https://mybatis-flex.com/zh/core/columns-permission.html
  • 12、字段加密:https://mybatis-flex.com/zh/core/columns-encrypt.html
  • 13、字典回写:https://mybatis-flex.com/zh/core/columns-dict.html
  • 14、枚举属性:https://mybatis-flex.com/zh/core/enum-property.html
  • 15、动态表名:https://mybatis-flex.com/zh/core/dynamic-table.html
  • 16、多租户:https://mybatis-flex.com/zh/core/multi-tenancy.html
  • 17、代码生成器:https://mybatis-flex.com/zh/others/codegen.html
  • 18、更好用的功能正在路上:https://mybatis-flex.com

和其他框架对比请参考:

    1、和 MyBatis-Plus 、Fluent-Mybatis 【功能】方面的对比:https://mybatis-flex.com/zh/intro/comparison.html
  • 2、和 MyBatis-Plus 【性能】方面的对比:https://mybatis-flex.com/zh/intro/benchmark.html

 

MyBatis-Flex 开源 3 个月以来,gitee 获得了 600+ star,以及得到了 30+ 位小伙伴的 pr,这要比很多老牌的框架更加活跃和有意思,FLEX 确实要更加简单、优雅,才能获得众多伙伴的青睐。

恳请花几分钟去了解,或许她真极大地提高您的开发效率和开发体验,让您有更多的时间去陪伴自己的家人。 如果确实有用,别忘了给个 star:https://gitee.com/mybatis-flex/mybatis-flex

 

编程笔记 » MyBatis 的多表关联查询原来可以这么优雅,MyBatis-Flex v1.4.0 发布

赞同 (30) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽