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() ❌ 不支持
代码简洁度 一般
相关推荐
API快乐传递者35 分钟前
1688 跨境电商 API 接口实战指南:从寻源到代采的全链路技术方案
java·前端·数据库
孔明click3335 分钟前
不想写代码,但想要集成一个登录页面?Sa-Token-Quick-Login 帮你实现!
java·sa-token·开源·springboot·登录·权限·权限认证
曹牧1 小时前
C#与Java后台交互
java·windows·microsoft·c#
张晓祥-长草颜团子1 小时前
【重庆两江新区歌词】
java
东小西1 小时前
【SAA实战】第 2 篇:模型与消息——ReactAgent 怎么挑模型、怎么传消息
java·后端·spring
码匠许师傅1 小时前
【C++ 面试真题】35. 聊聊 C++ 的万能引用(T&&)和完美转发(std::forward)
java·c++·面试
十年Java程序媛1 小时前
注解已经加上,但是事务没有回滚?拆解 AOP 代理底层原因 + 代码示例
java
μθημα1 小时前
K8s Pod 管理实战:虚拟机环境下的具体命令与步骤
java·docker·kubernetes
数据狐(Datafox)1 小时前
1688.item_search工程实战:1688商品列表API分页采集与B2B货源数据分析落地
java·前端·数据分析
省长1 小时前
不想写代码,但想要集成一个登录页面?Sa-Token-Quick-Login 帮你实现!
java·后端·开源