mybatis-plus 常用方法

selectList

java 复制代码
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import java.util.List;

// 假设有一个 User 实体类
List<User> users = userMapper.selectList(
    new LambdaQueryWrapper<User>()
        .eq(User::getId, 1001)           // WHERE id = 1001
        .gt(User::getAge, 18)            // AND age > 18
        .like(User::getName, "张")        // AND name LIKE '%张%'
        .orderByDesc(User::getCreateTime) // ORDER BY create_time DESC
);

复杂条件示例

java 复制代码
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>()
    .eq(User::getStatus, 1)
    .and(w -> w.gt(User::getAge, 18).or().isNotNull(User::getEmail))
    .orderByDesc(User::getCreateTime)
    .last("LIMIT 10");  // 拼接原生 SQL 片段

List<User> users = userMapper.selectList(wrapper);

条件动态拼接(非常实用)

java 复制代码
String name = "张";
Integer minAge = null;

LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>()
    .eq(User::getStatus, 1)
    .like(name != null, User::getName, name)      // 条件为 true 时才拼接
    .gt(minAge != null, User::getAge, minAge);    // minAge 为 null,这行不会生效

List<User> users = userMapper.selectList(wrapper);

LambdaQueryWrapper

方法 说明 示例
eq(字段, 值) 等于 = .eq(User::getId, 1)
ne(字段, 值) 不等于 != .ne(User::getStatus, 0)
gt(字段, 值) 大于 > .gt(User::getAge, 18)
ge(字段, 值) 大于等于 >= .ge(User::getAge, 18)
lt(字段, 值) 小于 < .lt(User::getAge, 60)
le(字段, 值) 小于等于 <= .le(User::getAge, 60)
like(字段, 值) 模糊匹配 LIKE '%值%' .like(User::getName, "张")
likeLeft(字段, 值) 左模糊 LIKE '%值' .likeLeft(User::getName, "三")
likeRight(字段, 值) 右模糊 LIKE '值%' .likeRight(User::getName, "张")
in(字段, 集合) IN 查询 .in(User::getId, Arrays.asList(1,2,3))
isNull(字段) 为 NULL .isNull(User::getEmail)
isNotNull(字段) 不为 NULL .isNotNull(User::getEmail)
orderByAsc(字段) 升序 .orderByAsc(User::getAge)
orderByDesc(字段) 降序 .orderByDesc(User::getCreateTime)
between(字段, 值1, 值2) 区间查询 .between(User::getAge, 18, 60)
and(条件) 嵌套 AND .and(w -> w.gt(User::getAge, 18).lt(User::getAge, 60))
or() OR .eq(User::getId, 1).or().eq(User::getId, 2)
select(字段...) 指定查询列 .select(User::getId, User::getName)

这些方法都是mapper层的 是mapper. 调用的

等一下,等一下 这个selectList方法意味着什么呢?

我们在mapper层里也自己定义了一些方法, 然后隐射到xml 里, 这些方法就意味着和我们在mapper层 接口里 定义的方法是同级的, 只不过这是mybatis-plus自己定义好,我们可以直接使用的

在学习的时候, 发现 lambdaQuery().one()

lambdaQuery().one()

java 复制代码
 ApplyInfoModel applyInfoModel = applyInfoService.lambdaQuery()
                    .eq(ApplyInfoModel::getProcessInstId, list.get(0).getProcessInstId())
                    .one();

lambdaQuery().one() 和 selectOne() 都是 MyBatis-Plus 中查询单条记录的方法,但它们所属的层级不同、使用方式不同、行为也有差异。

对比项 lambdaQuery().one() selectOne()
所属层级 Service 层(链式查询) Mapper 层
调用者 继承 ServiceImpl 的 Service 继承 BaseMapper 的 Mapper
参数 通过链式 .eq().like() 等拼接条件 传入一个 Wrapper 对象
返回值 实体对象(或 null 实体对象(或 null
场景 lambdaQuery().one() selectOne()
查到 0 条 返回 null 返回 null
查到 1 条 返回该记录 返回该记录
查到 多条 抛出 TooManyResultsException 返回第一条,不抛异常

继承 ServiceImpl 层的service 也具有调用mybatis-plus里方法的能力

继承 ServiceImpl<YourMapper, YourEntity> 后,你的 Service 可以直接使用:

sql 复制代码
getOne(wrapper)        // 查询单条
getOne(wrapper, false) // 查询单条,多条时不抛异常
list(wrapper)          // 条件查询列表
count(wrapper)         // 条件统计
page(page, wrapper)    // 分页查询
sql 复制代码
getOne(wrapper)        // 查询单条
getOne(wrapper, false) // 查询单条,多条时不抛异常
list(wrapper)          // 条件查询列表
count(wrapper)         // 条件统计
page(page, wrapper)    // 分页查询
sql 复制代码
lambdaQuery()          // 返回 LambdaQueryChainWrapper,支持 .eq().like().one() 等链式调用
lambdaUpdate()         // 返回 LambdaUpdateChainWrapper,支持链式更新
query()                // 返回 QueryChainWrapper
update()               // 返回 UpdateChainWrapper
继承 ServiceImpl 不继承(普通 Service)
调用 MP 方法 ✅ 直接调用,无需注入 Mapper ❌ 需要手动 @Autowired Mapper
链式查询 ✅ 支持 lambdaQuery() ❌ 不支持
代码简洁度 一般
相关推荐
cfm_29146 小时前
单例模式详解
java
我叫张土豆6 小时前
本体论、DDD、SDD、TDD:AI 编程时代的四层认知栈
java·人工智能
白远山7 小时前
家政服务家政社区派单实战:调度系统架构设计与实现指南
java·开发语言·小程序·架构·需求分析
海南java第二人7 小时前
从诞生到回收:JVM对象生命周期与垃圾回收全链路解析
java
SL_staff7 小时前
JVS-Logic:从页面配置工具到企业级业务逻辑中枢的技术演进
java·算法·全栈
DevRay7 小时前
Java 21虚拟线程深度实战:告别线程池焦虑,百万并发吞吐量直接翻倍(原理+代码+避坑)
java·开发语言
forestsea7 小时前
从零构建 Java 智能体 RAG 系统:Milvus 向量数据库实战指南
java·数据库·milvus
lifewange7 小时前
VSCode怎么运行java
java·ide·vscode
用户094248568037 小时前
第10章:OpenJDK异常体系、栈轨迹与错误诊断入门
java·jvm
醉颜凉8 小时前
Java 必看:如何彻底避免 HashMap 多线程死循环问题?
java·开发语言