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;
}
相关推荐
二哈赛车手7 小时前
新人笔记---ApiFox的一些常见使用出错
java·笔记·spring
栗子~~7 小时前
JAVA - 二层缓存设计(本地缓冲+redis缓冲+广播所有本地缓冲失效) demo
java·redis·缓存
YDS8298 小时前
DeepSeek RAG&MCP + Agent智能体项目 —— RAG知识库的搭建和接口实现
java·ai·springboot·agent·rag·deepseek
未若君雅裁9 小时前
MyBatis 一级缓存、二级缓存与清理机制
java·缓存·mybatis
AI人工智能+电脑小能手9 小时前
【大白话说Java面试题 第65题】【JVM篇】第25题:谈谈对 OOM 的认识
java·开发语言·jvm
阿维的博客日记10 小时前
Nacos 为什么能让配置动态生效?(涉及 @RefreshScope 注解)
java·spring
雨辰AI10 小时前
SpringBoot3 + 人大金仓读写分离 + 分库分表 + 集群高可用 全栈实战
java·数据库·mysql·政务
辰海Coding11 小时前
MiniSpring框架学习-完成的 IoC 容器
java·spring boot·学习·架构
小小编程路11 小时前
C++ 多线程与并发
java·jvm·c++
AI视觉网奇11 小时前
linux 检索库 判断库是否支持
java·linux·服务器