Mybatis-Plus使用小记

MP 使用小记

所谓 MP 是指:Mybatis-Plus

前言

本篇文章是对 MP 一些日常开发学习中不常见但实用的使用小技巧总结,内容将持续更新,希望能对小伙伴们有所帮助。推荐点赞 + 收藏哦!

官方文档:Mybatis-Plus

给现有分页指定字段排序

第一种方法

  • 其中,reqDTO 是方法参数。
  • 主要内容是:给 page 插入排序属性。
    // 1、MP
    Page<TestVO> page = new Page<>();
    page.setCurrent(reqDTO.getCurrent());
    page.setSize(reqDTO.getSize());

    List<OrderItem> itemList = new ArrayList<>();
    // 插入排序属性
    OrderItem orderItem = new OrderItem();
    orderItem.setColumn("create_time"); // 按什么字段排序
    orderItem.setAsc(false); // 是否升序
    itemList.add(orderItem);
    page.setOrders(itemList);

第二种方法

利用 MP 中 IServicelambdaQuery() 方法。

        
			 // select * from learning_lesson where user_id = #{userId} order by latest_learn_time desc limit #{offset}, #{size}
        Page<LearningLesson> page = lambdaQuery()
                .eq(LearningLesson::getUserId, userId) // where user_id = #{userId}
                .page(query.toMpPage("latest_learn_time", false));

条件判断

主要有以下几种:

  1. eq 就是 equal 等于
  2. ne 就是 not equal 不等于
  3. gt 就是 greater than 大于
  4. lt 就是 less than 小于
  5. ge 就是 greater than or equal 大于等于
  6. le 就是 less than or equal 小于等于

lambdaQuery 实现 list

		// 第一种写法
	  LambdaQueryWrapper<EnterpriseEntity> wrapper = new LambdaQueryWrapper<>();
    wrapper.eq(EnterpriseEntity::getEnterpriseId, id);
    List<EnterpriseEntity> list = entService.list(wrapper);

    // 第二种写法
    List<EnterpriseEntity> list = entService.lambdaQuery().eq(EnterpriseEntity::getEnterpriseId, id).list();

还可以用 select() 指定查询字段

实现 distinct 去重功能

    List<EnterpriseEntity> list = this.query()
      .select("distinct type")
      .eq("enterprise_id", entId)
      .between("upload_time", DateUtil.beginOfDay(today), DateUtil.endOfDay(today))
      .list();

自动填充

使用 @TableField 注解的 fill 属性,结合自定义的 MetaObjectHandler,可以实现字段自动填充。

@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;

@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;

清空查询条件

MyBatis-Plus 中 QueryWrapper 类提供的方法之一:queryWrapper.clear()

  • 用于清空当前 QueryWrapper 对象中的查询条件,让 QueryWrapper 对象重新变为空白状态。

在实际的开发中,我们可能需要根据不同的条件动态构建查询条件,而 queryWrapper.clear() 提供了一种方便的方式,可以在重新构建查询条件之前清空已有的条件。

public List<User> queryUserList(String name, Integer age) {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    
    // 第一次构建查询条件
    if (StringUtils.isNotBlank(name)) {
        queryWrapper.like("name", name);
    }
    if (age != null) {
        queryWrapper.eq("age", age);
    }

    List<User> userList = userMapper.selectList(queryWrapper);

    // 清空查询条件
    queryWrapper.clear();

    // 第二次构建新的查询条件
    queryWrapper.eq("status", 1);
    List<User> userListWithStatus1 = userMapper.selectList(queryWrapper);

    // 返回结果,注意:此时的 queryWrapper 已经没有之前的条件了
    return userListWithStatus1;
}

你可能感兴趣的:(#,开发技巧篇,java,Mybatis-Plus)