沉梦听雨的编程指南 沉梦听雨的编程指南
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)

沉梦听雨

时间是最好的浸渍剂,而沉淀是最好的提纯器🚀
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)
  • Spring

  • SpringBoot

  • Mybatis

    • Mybatis基础知识小结
    • Mybatis映射文件解析
    • 获取中文字符串首字母
    • 计算分页数的几种方法
    • MP使用小记
      • 给现有分页指定字段排序
        • 第一种方法
        • 第二种方法
      • 条件判断
      • lambdaQuery 实现 list
      • 实现 distinct 去重功能
      • 自动填充
      • 清空查询条件
      • Wrappers 用法
  • Shiro

  • 常用框架
  • Mybatis
沉梦听雨
2023-11-09
目录

MP使用小记

# MP 使用小记

所谓 MP 是指:Mybatis-Plus

官方文档:简介 | MyBatis-Plus (opens new window)

# 给现有分页指定字段排序

# 第一种方法

  • 其中,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);

1
2
3
4
5
6
7
8
9
10
11
12
13

# 第二种方法

利用 MP 中 orderByDesc() 方法。

		// select * from learning_lesson where user_id = #{userId} order by latest_learn_time desc limit #{offset}, #{size}
        Page<LearningLesson> page1 = this.lambdaQuery()
                .eq(LearningLesson::getUserId, userId) // where user_id = #{userId}
                .orderByDesc(LearningLesson::getLatestLearnTime)
                .page(new Page<>(pageNumber, pageSize));

1
2
3
4
5
6

# 条件判断

主要有以下几种:

  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();
1
2
3
4
5
6
7

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

# 实现 distinct 去重功能

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

# 自动填充

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

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

@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
1
2
3
4
5

# 清空查询条件

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;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# Wrappers 用法

        EnterpriseDO enterpriseDO = EnterpriseMapper.selectOne(
                Wrappers.<EnterpriseDO>lambdaQuery()
                        .select(EnterpriseDO::getId)
                        .and(wrapper -> wrapper
                                .eq(EnterpriseDO::getRegisterCode, dto.getRegisterCode())
                                .or()
                                .eq(EnterpriseDO::getEntName, dto.getEntName()))
                        .ne(EnterpriseDO::getId, dto.getId())
        );
1
2
3
4
5
6
7
8
9
上次更新: 2024/10/22 17:52:31
计算分页数的几种方法
Shiro学习小结

← 计算分页数的几种方法 Shiro学习小结→

Theme by Vdoing | Copyright © 2023-2025 沉梦听雨 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式