本文共 3408 字,大约阅读时间需要 11 分钟。
在MyBatis-Plus中,条件查询与分页操作是常用的功能,以下是对这些操作的详细说明和实践示例。
1. 基本条件查询
要在用户信息表中筛选出年龄等于20的用户,可以使用QueryWrapper
构建条件。
QueryWrapper queryWrapper = new QueryWrapper<>();queryWrapper.eq("age", 20);ListuserInfoList = userInfoMapper.selectList(queryWrapper);
2. Lambda表达式
当字段名较多或易于混淆时,可以使用Lambda表达式来构建条件。
QueryWrapper queryWrapper = new QueryWrapper<>();queryWrapper.lambda() .eq(UserInfo::getAge, 20);ListuserInfoList = userInfoMapper.selectList(queryWrapper);
3. LambdaQueryWrapper
LambdaQueryWrapper
与QueryWrapper
的Lambda写法一致,适用于动态条件。
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(UserInfo::getAge, 20);ListuserInfoList = userInfoMapper.selectList(queryWrapper);
1. 基本分页
使用Page
对象进行分页查询。
Pagepage = new Page<>(currentPage, pageSize);IPage iPage = userInfoMapper.selectPage(page, queryWrapper);
2. 分页查询(联表)
当需要联表分页时,创建UserInfoVO
类并配置XML映射。
public class UserInfoVO extends UserInfo { private String sexText;}
在UserInfoMapper
中定义分页方法。
IPageiPage = userInfoMapper.list(page, queryWrapper);
在UserInfoServiceImpl
中调用分页方法。
Pagepage = new Page<>(page, limit);IPage iPage = userInfoMapper.list(page, queryWrapper);List userInfoList = iPage.getRecords();
3. 分页查询(默认条件)
如果不需要额外条件,queryWrapper
可设为null
。
Pagepage = new Page<>(page, limit);IPage iPage = userInfoMapper.selectPage(page, null);List userInfoList = iPage.getRecords();
1. 基本组合
构建包含AND和OR条件的查询。
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(UserInfo::getId, "1") .and(i -> i.eq(UserInfo::getName, "jack")) .or(i -> i.eq(UserInfo::getPhone, "13888888888"));ListuserInfoList = userInfoMapper.selectList(queryWrapper);
2. 复杂组合
构建更复杂的条件组合。
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(UserInfo::getId, "1") .and(i -> i.and(j -> j.eq(UserInfo::getName, "jack").eq(UserInfo::getCategory, 1))) .or(j -> j.eq(UserInfo::getPhone, "13888888888").eq(UserInfo::getCategory, 2));ListuserInfoList = userInfoMapper.selectList(queryWrapper);
在用户信息表中添加逻辑删除字段del_flag
,通过注解配置。
@ApiModelProperty(value = "删除状态(0--未删除1--已删除)")@TableField("del_flag")@TableLogicprivate Integer delFlag;
配置MyBatis-Plus全局配置,启用逻辑删除。
在查询时,逻辑删除条件会自动添加。
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(UserInfo::getAge, 20);ListuserInfoList = userInfoMapper.selectList(queryWrapper);
为了提高查询效率,可以指定只需查询的字段。
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();queryWrapper.select(UserInfo::getId, UserInfo::getName, UserInfo::getPhone) .eq(UserInfo::getAge, 20);ListuserInfoList = userInfoMapper.selectList(queryWrapper);
使用getOne
方法查询单条数据,需注意唯一性。
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(UserInfo::getOpenId, openId);UserInfo userInfo = userInfoService.getOne(queryWrapper);
当多个记录存在时,可传false
避免异常。
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(UserInfo::getOpenId, openId);UserInfo userInfo = userInfoService.getOne(queryWrapper, false);
以上方法可以帮助开发者高效地进行条件查询和分页操作。在实际项目中,根据具体需求选择合适的方法,确保代码的可读性和可维护性。通过合理使用QueryWrapper
、分页组件以及注解配置,可以显著提升代码效率和用户体验。
转载地址:http://cyffk.baihongyu.com/