1、导入依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
2、LambdaQueryWrapper和:: 使用案例
首先有个User表对应的实体类为User.java,其中包含一些基本user字段
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getState, 0);
queryWrapper.eq(User::getName, "宇子");
List<User> list = userService.list(queryWrapper);
在上面的代码中,我们可以看到首先是使用了mybatis plus的条件构造器LambdaQueryWrapper对象。
然后设置User的stat字段的值为0,name字段的值为宇子。
3、::的作用
从中可以得出::在java8中作用就是获取方法;
4、QueryWrapper构造器
最初 最基本的写法如下:
// 查询条件构造器
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("user_id", id);
// 查询操作
List<User> users= userService.list(wrapper);
引入lambda后,避免在代码里写user_id字样的代码
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.lambda().eq(User::getUserId, id);
List<User> users=userService.list(wrapper);
5、LambdaQueryWrapper构造器
再次简化lambda的使用,我们改写成LambdaQueryWrapper构造器,语法如下:
LambdaQueryWrapper<User> wrapper = new QueryWrapper<User>().lambda();
wrapper.eq(User::getUserId, id);
List<User> users= userService.selectList(wrapper);
再次优化下:
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getUserId, id);
List<User> users= userService.selectList(wrapper);
6、LambdaQueryWrapper支持模糊查询
public R<IPage<UpgradeVO>> list(Upgrade upgrade, Query query) {
LambdaQueryWrapper<Upgrade> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Func.isNotEmpty(upgrade.getAppVersion()), Upgrade::getAppVersion, upgrade.getAppVersion())
.eq(Func.isNotEmpty(upgrade.getDeviceMode()), Upgrade::getDeviceMode, upgrade.getDeviceMode())
.like(Func.isNotEmpty(upgrade.getVersionName()), Upgrade::getVersionName, upgrade.getVersionName());
IPage<Upgrade> pages = upgradeService.page(Condition.getPage(query), queryWrapper);
return R.data(UpgradeWrapper.build().pageVO(pages));
}
可以直接在表达式中判断值是否存在,空值判断,Wrappers使用方法,可以支持模糊查询(like),这种写法可以避免sql的编写
public CastingDetail notSoldCastingDetail(Long seriesCastingId, Long castingId) {
return castingDetailService.getOne(Wrappers.<CastingDetail>query().lambda()
.eq(seriesCastingId != null && seriesCastingId > 0, CastingDetail::getSeriesCastingId, seriesCastingId)
.isNull(seriesCastingId == null || seriesCastingId < 0, CastingDetail::getSeriesCastingId)
.eq(CastingDetail::getCastingId, castingId)
.eq(CastingDetail::getStatus, 0)
.eq(seriesCastingId != null && seriesCastingId > 0, CastingDetail::getBlockchainStatus, 1)
.eq(seriesCastingId == null || seriesCastingId < 0, CastingDetail::getBlockchainStatus, 0)
.last(" limit 1"));
}