您现在的位置是:首页 > 文章详情

MyBatis-Flex v1.5.3 发布,进一步优化链式操作

日期:2023-07-26点击:334

MyBatis-Flex: 一个优雅的 MyBatis 增强框架

特征

1、很轻量

MyBatis-Flex 整个框架只依赖 MyBatis,再无其他任何第三方依赖。

2、只增强

MyBatis-Flex 支持 CRUD、分页查询、多表查询、批量操作,但不丢失 MyBatis 原有的任何功能。

3、高性能

MyBatis-Flex 采用独特的技术架构、相比同类框架(比如 MyBatis-Plus),MyBatis-Flex 的在增删改查等方面的性能均超越其 5~10 倍或以上。

4、更灵动

MyBatis-Flex 支持多主键、多表查询、逻辑删除、乐观锁、数据脱敏、数据加密、多数据源、分库分表、字段权限、 字段加密、多租户、事务管理、SQL 审计... 等等等等。 这一切,免费且灵动。

在 v1.5.3 中,主要是优化了链式查询和链式更新的功能,如下是 MyBatis-Flex 一个简单的示例:

@SpringBootTest
class ArticleServiceTest {

    @Autowired
    ArticleService articleService;

    @Test
    void testChain() {
        List<Article> articles = articleService.queryChain()
            .select(ARTICLE.ALL_COLUMNS)
            .from(ARTICLE)
            .where(ARTICLE.ID.ge(100))
            .list()
            .forEach(System.out::println);
    }
}

如果我们查询的是 vo、dto 之类的数据呢?

ArticleVo.java 定义如下:

public class ArticleVo {

    private Long id;
    private Long accountId;
    private String title;
    private String content;

    //评论量最多的内容
    private Long maxComments;

    //getter setter
}

查询代码如下:

ArticleVo articleVo = QueryChain.of(articleMapper)
    .select(
        ARTICLE.ALL_COLUMNS,
        max(ARTICLE.comments).as(ArticleVo::maxCommments)
     )
    .from(ARTICLE)
    .where(ARTICLE.ID.ge(100))
    .limit(1)
    .oneAs(ArticleVo.class);

数据更新?

@Test
public void testUpdateChain2() {

    //更新数据
    UpdateChain.of(Account.class)
        .set(Account::getAge, ACCOUNT.AGE.add(1))
        .where(Account::getId).ge(100)
        .and(Account::getAge).eq(18)
        .update();

    //查询所有数据并打印
    QueryChain.of(accountMapper)
        .where(Account::getId).ge(100)
        .and(Account::getAge).eq(18)
        .list()
        .forEach(System.out::println);
}

更多关于链式查询的内容,请异步官方文档:https://mybatis-flex.com/zh/base/chain.html

另外,这个版本还新增了对 ActiveRecord 的支持(可选),如下是 ActivieRecord 的一些示例:

保存数据:

Account.create()
    .setUserName("张三")
    .setAge(18)
    .setBirthday(new Date())
    .save();

更新数据:

Account.create()
    .setAge(100)
    .where(Account::getId).eq(1L)
    .update();

查询 1 条数据:

Account.create()
    .where(Account::getId).eq(1L)
    .one();

更多关于 ActivieRecord 请参考:https://mybatis-flex.com/zh/base/active-record.html

 

MyBatis-Flex v1.5.3 更新如下:

  • 新增:添加 UpdateChain 方便用于对数据进行更新
  • 新增:添加对 ActiveRecord 设计模式的支持,感谢 @王帅
  • 新增:代码生成器 ColumnConfig 增加 propertyType. 可以用于自定通用属性的类型。感谢 @Jerry
  • 新增:添加 selectOneWithRelationsById(根据主表主键来查询 1 条数据) 方法,感谢 @barql
  • 新增:QueryWrapper.groupBy 支持 Lambda 表达式的功能,感谢 @王帅
  • 新增:QueryWrapper 添加 not like 构建的支持
  • 优化:重命名 QueryWrapperChain 为 QueryChain,保存和 UpdateChain 统一
  • 修复:@Relation 关联查询注解,在指定 selectColumns 出错的问题,感谢 @zhy_black
  • 修复:代码生成器配置 camelToUnderline 属性时 entity 生成后编译错误的问题,感谢 @张春根
  • 文档:优化 APT 的文档描述有错别字的问题,感谢 @淡定
  • 文档:添加关于 ActiveRecord 的相关文档,感谢 @王帅
  • 文档:修改代码生成器对 EnjoyTemplate 的描述错误的问题
  • 文档:添加更多关于链式查询的相关文档
  • 文档:重构文档链接,链式操作的相关文档
  • 文档:修改代码生成器对 EnjoyTemplate 的描述错误的问题

 

进一步了解 MyBatis-Flex 框架,请参考一下链接:

 

和其他框架对比请参考:

 

MyBatis-Flex-Helper 开发插件:

这是一款高度自定义的 Mybatis-Flex IDEA 代码生成插件:

 

bilibili 视频教程:

原文链接:https://www.oschina.net/news/250971/mybatis-flex-1-5-3-released
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章