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() ❌ 不支持
代码简洁度 一般
相关推荐
李少兄3 小时前
MyBatis、MyBatis-Plus 与全自动 ORM 的本质区别
mybatis
长不胖的路人甲4 小时前
CAS讲解
java
干到60岁退休的码农4 小时前
SpringBoot整合Mybatis-plus
spring boot·后端·mybatis
我是唐青枫4 小时前
Java SLF4J 实战指南:从日志门面到 Logback、MDC 和链路追踪
java·开发语言·logback
XS0301064 小时前
JavaEE 核心知识
java·java-ee
weixin_446729164 小时前
java实现发送邮件
java·开发语言
QCoding4 小时前
Java转AI第三课:Spring AI如何把100行HTTP代码缩减到10行?
java·人工智能
振宇i4 小时前
Java集成openfeign远程RPC调用教程
java·rpc·openfeign
wear工程师4 小时前
volatile 这题别只答「可见性」:面试官真正想听的是这条 happens-before
java·jvm