Mybatis-Flex v1.3.0 发布,新的方式使用一对多和多对一

来源: 投稿
作者: 开源海哥
2023-05-26 09:55:00

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

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

MyBatis-Flex v1.3.0 主要是新增了一对多、多对一等查询方法,同时在 QueryWrapper 的表达上,增加了许多常用的函数、case when 等 SQL 构建。

 

以下是文章的多对多示例,一篇文章可能归属于多个分类,一个类可以有多篇文章,需要用到中间表 article_category_mapping

Article 实体类:

public class Article {
    private Long id;
    private String title;
    private String content;

    //文章的归属分类,可能是 1 个或者多个
    private List<Category> categories;

    //getter setter
}

查询代码:

QueryWrapper queryWrapper = QueryWrapper.create()
        .select().form(ARTICLE)
        .where(ARTICLE.id.ge(100));

List<Article> articles = mapper.selectListByQuery(queryWrapper
    , fieldQueryBuilder -> fieldQueryBuilder
        .field(Article::getCategories) // 或者 .field("categories")
        .type(Category.class) //非集合,自动读取 type,可以不指定 type
        .queryWrapper(article -> QueryWrapper.create()
            .select().from(CATEGORY)
            .where(CATEGORY.id.in(
                    select("category_id").from("article_category_mapping")
                    .where("article_id = ?", article.getId())
            )
        )
    );

更多关于类似场景请查看文档:https://mybatis-flex.com/zh/base/field-query.html

 

另外,v1.3.0 新增的 Case When 的 SQL 构建语法如下:

QueryWrapper wrapper = QueryWrapper.create()
        .select(ACCOUNT.ID
            ,case_().when(ACCOUNT.ID.ge(2)).then("x2")
            .when(ACCOUNT.ID.ge(1)).then("x1")
            .else_("x100")
            .end().as("xName")

其生成 SQL 如下:

SELECT `id`, 
        (CASE WHEN `id` >=  2  THEN 'x2' 
            WHEN `id` >=  1  THEN 'x1' 
            ELSE 'x100' 
            END) AS `xName` 
 FROM `tb_account`

执行结果如下:

|id     |xName     |
|1      |x1        |
|2      |x2        |

关于这部分更多的文档请参考:https://mybatis-flex.com/zh/base/querywrapper.html#select-case-when

 

Mybatis-Flex v1.3.0  主要更新如下:

  • 新增:新增 一对多、多对一 查询功能
  • 新增:为 SqlServer 添加独立的 LimitOffset 处理器
  • 新增:QueryWrapper 新增 "for update" 的 SQL 构建支持
  • 新增:QueryWrapper 新增 select convert(...) 的 SQL 构建支持
  • 新增:QueryWrapper 新增 select case when ... then 的 SQL 构建支持
  • 优化:APT 默认生成独立文件,之前所有 APT 生成在同一个文件修改为可配置
  • 修复:Table.camelToUnderline 注解在 APT 上配置不生效的问题
  • 修复:多租户设置 TenantId 时,在某些极端情况下出现异常的问题
  • 文档:新增 一对多、多对一 的相关文档
  • 文档:新增 select case when ... then 的 QueryWrapper 示例
  • 文档:添加关于 hint 的相关描述

 

和其他框架对比请参考:

进一步了解 MyBatis-Flex 框架,请访问 Mybatis-Flex 官网:https://mybatis-flex.com

展开阅读全文
精彩评论
https://github.com/edurtio/datacap 兄弟们支持一下呗,来个 star
2023-05-26 15:40
1
举报
5 收藏
分享
4 评论
5 收藏
分享
返回顶部
顶部