Mybatis-Plus使用小记

MP 使用小记

所谓 MP 是指:Mybatis-Plus

前言

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

官方文档:Mybatis-Plus

给现有分页指定字段排序

第一种方法

  • 其中,reqDTO 是方法参数。
  • 主要内容是:给 page 插入排序属性。
java 复制代码
    // 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 中 IService<T>lambdaQuery() 方法。

java 复制代码
        
			 // 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

java 复制代码
		// 第一种写法
	  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 去重功能

java 复制代码
    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,可以实现字段自动填充。

java 复制代码
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;

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

清空查询条件

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

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

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

java 复制代码
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;
}
相关推荐
侠客行03176 小时前
Mybatis连接池实现及池化模式
java·mybatis·源码阅读
蛇皮划水怪6 小时前
深入浅出LangChain4J
java·langchain·llm
老毛肚8 小时前
MyBatis体系结构与工作原理 上篇
java·mybatis
风流倜傥唐伯虎8 小时前
Spring Boot Jar包生产级启停脚本
java·运维·spring boot
Yvonne爱编码8 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
Re.不晚8 小时前
JAVA进阶之路——无奖问答挑战1
java·开发语言
你这个代码我看不懂8 小时前
@ConditionalOnProperty不直接使用松绑定规则
java·开发语言
fuquxiaoguang9 小时前
深入浅出:使用MDC构建SpringBoot全链路请求追踪系统
java·spring boot·后端·调用链分析
琹箐9 小时前
最大堆和最小堆 实现思路
java·开发语言·算法
__WanG9 小时前
JavaTuples 库分析
java