首页 > 其他分享 >Mybatis-Flex 与 Mybatis-Plus 的一些对比

Mybatis-Flex 与 Mybatis-Plus 的一些对比

时间:2023-08-05 22:56:38浏览次数:35  
标签:Flex ACCOUNT QueryWrapper Plus Mybatis query ID

为什么要引入 Mybatis 增强插件

从一个业务开发者的角度来看,这种类似的增强框架使用起来很

  • 单表情况下不必再把思路从 Service 切换到 Mapper,从业务思维(业务流程)切换到数据库思维(数据库字段,编写),一定程度上减少了代码的开发量。
  • 易于维护 数据库增改删字段 不必再去 xml 里改,一处Refactor,多处修改,也可以避免一些cv 过程中的低级错误

Mybatis-Flex 与 Mybatis-Plus 的区别

基础查询:

Mybatis-Flex:
查询:

QueryWrapper query = QueryWrapper.create()
        .where(EMPLOYEE.LAST_NAME.like(searchWord)) //条件为null时自动忽略
        .and(EMPLOYEE.GENDER.eq(1))
        .and(EMPLOYEE.AGE.gt(24));
List<Employee> employees = employeeMapper.selectListByQuery(query);

Mybatis-Plus:

LambdaQueryWrapper<Employee> queryWrapper = Wrappers.<Employee>lambdaQuery()
        .like(StringUtils.isNotEmpty(searchWord), Employee::getUserName,"B")
        .eq(Employee::getGender, 1)
        .gt(Employee::getAge, 24);
List<Employee> employees = employeeMapper.selectList(queryWrapper);

更新:
Mybatis-Flex:

Account account = UpdateEntity.of(Account.class);
account.setId(100); //设置主键
account.setUserName("michael");
account.setAge(18);
account.setBirthday(null);

accountMapper.update(account);

Mybatis-Plus:

UpdateWrapper<Account> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", 100);
updateWrapper.set("user_name", "michael");
updateWrapper.set("age", 18);
updateWrapper.set("birthday", null);

accountMapper.update(null, updateWrapper);

查询集合函数:

Mybatis-Flex:

QueryWrapper query = QueryWrapper.create()
    .select(
        ACCOUNT.ID,
        ACCOUNT.USER_NAME,
        max(ACCOUNT.BIRTHDAY),
        avg(ACCOUNT.SEX).as("sex_avg")
    );
List<Employee> employees = employeeMapper.selectListByQuery(query);

Mybatis-Plus:

QueryWrapper<Employee> queryWrapper = Wrappers.query()
    .select(
        "id",
        "user_name",
        "max(birthday)",
        "avg(birthday) as sex_avg"
    );
List<Employee> employees = employeeMapper.selectList(queryWrapper);

联表查询 flex 是支持的 mp 不支持,虽然支持但是复杂联表可读性不高,个人觉得关于联表的 sql 还是自行维护在 xml 里面
附示例:

QueryWrapper query = QueryWrapper.create()
    .select().from(ACCOUNT)
    .leftJoin(ARTICLE).on(ACCOUNT.ID.eq(ARTICLE.ACCOUNT_ID))
    .where(ACCOUNT.AGE.ge(10));

List<Account> accounts = mapper.selectListByQuery(query);
QueryWrapper query = new QueryWrapper()
.select(
      ACCOUNT.ID
    , ACCOUNT.USER_NAME
    , ARTICLE.ID.as("articleId")
    , ARTICLE.TITLE)
.from(ACCOUNT.as("a"), ARTICLE.as("b"))
.where(ACCOUNT.ID.eq(ARTICLE.ACCOUNT_ID));

关于性能提升:

环境:jdk17
Mybatis-Plus:
image
Mybatis-Flex:
image

发现一些问题

mp 的 selectone 方法源码如下
全量获取了表数据 有内存泄露的风险
image

这一点 mf 就处理的好一点

image

标签:Flex,ACCOUNT,QueryWrapper,Plus,Mybatis,query,ID
From: https://www.cnblogs.com/yuylsjs/p/17608501.html

相关文章

  • MyBatis 学习记录
    目录参考资料什么是MyBatis?Java如何操作数据库?JDBCApacheDbutilsSpringJDBCTemplate快速使用1.引入mybatisjar2.建表并生成实体类3.编写映射器4.编写mybatis-config.xml配置文件5.编写测试代码6.代码结构MyBatis核心API1.mybatis-config.xml1.1properties1.2......
  • 在SpringBoot框架中集成MyBatis
    使用MyBatis框架操作数据,在SpringBoot框架中集成MyBatis。使用步骤如下:1、准备好数据库?serverTimezone=GMT2、MyBatis起步依赖:完成MyBatis对象自动配置,对象放在容器中创建模块的时候,需要勾选springweb、MyBatisFramework、MySQLDriver这三个pom.xml文件<?xmlversion="1.0"e......
  • Mybatis-Flex之基础查询
    1、selectOneById/***selectOneById(id):根据主键查询数据。*/@TestpublicvoidtestSelectOneById(){/***SELECT*FROM`tb_account`WHERE`id`=?*/Accountaccount=accountMapper.selectOneById(10L);......
  • 动力节点|MyBatis从入门实战到深入源码
    MyBatis是一种简单易用、灵活性高且高性能的持久化框架,也是Java开发中不可或缺的一部分。动力节点老杜的MyBatis教程,上线后广受好评从零基础小白学习的角度出发,层层递进从简单到深入,从实战到源码一步一案例,一码一实操,嘴对嘴指导MyBatis重点、难点、考点一网打尽不管你是小白还是正......
  • mybatis-plus中的@Select注解里面写sql语句的in
    @Select("<script>"+"select\n"+"email\n"+"fromsys_user\n"+"whereidin\n"+"<foreachitem='item'index='index'collection='ids'open='(&......
  • mybatis-plus中的@Select注解里面写sql语句的in
    @Select("<script>"+    "select\n"+    "email\n"+    "fromsys_user\n"+    "whereidin\n"+    "  <foreachitem='item'index='index'colle......
  • mybatis-plus中的@Select注解里面写sql语句的in
    @Select("<script>"+    "select\n"+    "email\n"+    "fromsys_user\n"+    "whereidin\n"+    "  <foreachitem='item'index='index'colle......
  • springboot 集成druid 集成mybatise
    spring加载druid和mybatisepom依赖<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation=&quo......
  • Spring整合Mybatis
    导入坐标,MyBatis坐标不能少,Spring整合MyBatis还有自己专用的坐标,此外Spring进行数据库操作的jdbc坐标是必须的,剩下还有mysql驱动坐标,本例中使用了Druid数据源,这个倒是可以不要<dependencies><dependency><groupId>com.alibaba</groupId><artifactId>dru......
  • MybatisPlus的association 属性及案例
    <selectid="getMatUnitList"resultMap="matUnitVOMap">SELECTa.CODE,a.min_pack_unit,a.tenant_id,c.item_textunitNameFROMmdm_mataLEFTJOINsys_dict_itemcO......