条件构造器
QueryWrapper (普通方式)
JavaQueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "张三")
.between("age", 20, 30)
.like("email", "test");
List<User> users = userMapper.selectList(queryWrapper);
LambdaQueryWrapper (Lambda 表达式方式,推荐)
JavaLambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(User::getName, "张三")
.between(User::getAge, 20, 30)
.like(User::getEmail, "test");
List<User> users = userMapper.selectList(lambdaQueryWrapper);
更新操作
// 条件更新
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("name", "张三")
.set("age", 30)
.set("email", "new@email.com");
userMapper.update(null, updateWrapper);
// Lambda 方式
LambdaUpdateWrapper<User> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.eq(User::getName, "张三")
.set(User::getAge, 30)
.set(User::getEmail, "new@email.com");
userMapper.update(null, lambdaUpdateWrapper);
分页查询
// 配置分页插件
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
}
// 使用分页
Page<User> page = new Page<>(1, 10); // 当前页,每页大小
Page<User> userPage = userMapper.selectPage(page, queryWrapper);
List<User> records = userPage.getRecords();
long total = userPage.getTotal();
逻辑删除配置
mybatis-plus:
global-config:
db-config:
logic-delete-field: deleted # 逻辑删除字段名
logic-delete-value: 1 # 逻辑已删除值
logic-not-delete-value: 0 # 逻辑未删除值
常见条件方法
类似的将对应的参数传入构造器,把构造器在传入方法中让他进行查询。
使用的是链式调用所以后面加很多.().()
1. 等值查询 (eq)
.eq(User::getName, "张三")
相当于 SQL: name = '张三'
2.不等查询 (ne)
.ne(User::getName, "张三")
相当于 SQL: name != '张三'
3. 大于 (gt)
.gt(User::getAge, 18)
相当于 SQL: age > 18
4. 大于等于 (ge)
.ge(User::getAge, 18)
相当于 SQL: age >= 18
5. 小于 (lt)
.lt(User::getAge, 60)
7. 区间查询 (between)
.between(User::getAge, 20, 30)
相当于 SQL: age BETWEEN 20 AND 30
8. 不在区间 (notBetween)
.notBetween(User::getAge, 20, 30)
相当于 SQL: age NOT BETWEEN 20 AND 30
9. 模糊查询 (like)
.like(User::getEmail, "test")
相当于 SQL: email LIKE '%test%'
10. 左模糊 (likeLeft)
.likeLeft(User::getEmail, "test")
相当于 SQL: email LIKE '%test'
11. 右模糊 (likeRight)
.likeRight(User::getEmail, "test")
相当于 SQL: email LIKE 'test%'
12. 不模糊匹配 (notLike)
.notLike(User::getEmail, "test")
相当于 SQL: email NOT LIKE '%test%'
13. 包含 (in)
.in(User::getAge, Arrays.asList(18, 20, 22))
相当于 SQL: age IN (18, 20, 22)
14. 不包含 (notIn)
.notIn(User::getAge, Arrays.asList(18, 20, 22))
相当于 SQL: age NOT IN (18, 20, 22)
15. 为空 (isNull)
.isNull(User::getEmail)
相当于 SQL: email IS NULL
16. 不为空 (isNotNull)
.isNotNull(User::getEmail)
相当于 SQL: email IS NOT NULL
17. 分组 (groupBy)
.groupBy(User::getDeptId)
相当于 SQL: GROUP BY dept_id
18. 排序 (orderBy)
Java.orderByAsc(User::getAge) // 升序
.orderByDesc(User::getSalary) // 降序
相当于 SQL: ORDER BY age ASC, salary DESC
19. 或条件 (or)
.or().eq(User::getName, "张三").eq(User::getName, "李四")
相当于 SQL: OR (name = '张三' AND name = '李四')
20. 嵌套条件 (nested)
.nested(wq -> wq.eq(User::getName, "张三").or().eq(User::getName, "李四"))
相当于 SQL: (name = '张三' OR name = '李四')
更新操作特有方法
1. 设置值 (set)
.set(User::getAge, 30)
.set(User::getEmail, "new@example.com")
相当于 SQL: SET age = 30, email = 'new@example.com'
2. 自增 (setSql)
.setSql("age = age + 1")
相当于 SQL: SET age = age + 1
3. 自减 (setSql)
.setSql("stock = stock - 1")
相当于 SQL: SET stock = stock - 1