MyBatis 的多表关联查询原来可以这么优雅,MyBatis-Flex v1.4.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 等更多的函数方法 #I7A7ZA:QueryWrapper没有year与month/day等函数
  • 新增:添加 package-info.java 方便开发者理解包内容,感谢 @王帅
  • 新增: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 的问题, #I7CWTE:如果数据库不支持枚举会导致 null.equals
  • 修复:selectListByQueryAs 使用实体类对象导致查询不出来数据,感谢 @王帅
  • 修复:实体类不支持父类为泛型主键的问题,感谢 @王帅 #I7CZGP:主键定义在父类,且是泛型时,出错
  • 修复:代码生成器当配置空的 coment 导致 setTableCommentFormat 出错的问题,感谢 @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 框架,请参考一下链接:

和其他框架对比请参考:

 

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

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

 

优秀的个人博客,低调大师

微信关注我们

原文链接:https://www.oschina.net/news/245858/mybatis-flex-1-4-0-released

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。