mybatis-plus 与Lambda表达式常用方法
常用的lambda表达式主要为 LambdaQueryWrapper与LambdaUpdateWrapper
废话不多说直接上代码:
1. 常用基本方法
//根据user的orgCode进行查询
List<SalUser> salPosSalYyyymms = salUserService.list
(new LambdaQueryWrapper<SalUser>()
.eq(SalUser::getOrgCode,orgCode));
//根据user的主键查询,注意service使用的是getOne而不是list
List<SalUser> salPosSalYyyymms = salUserService.getOne
(new LambdaQueryWrapper<SalUser>()
.eq(SalUser::getUserId,userId));
//根据user的主键更改orgCode
List<SalUser> salPosSalYyyymms = salUserService.update
(new LambdaUpdateWrapper<SalUser>()
.eq(SalUser::getUserId,userId).set(SalUser::getOrgCode,orgCode));
//多重判断条件查询,如果用户名不为空,则根据用户名以及orgCode两个调件进行查询
LambdaQueryWrapper<SalUser> queryWrapper = new LambdaQueryWrapper<SalUser>();
if(userName.isEmpty()){
queryWrapper.eq(SalUser::getUseName,userName)
}
queryWrapper.eq(SalUser::getOrgCode,orgCode);
List<SalUser> salPosSalYyyymms = salUserService.list(queryWrapper);
2. mybatis-plus 分页
创建MybatisPlusConfig
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyBatisPlusConfig {
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
// 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false
// paginationInterceptor.setOverflow(false);
// 设置最大单页限制数量,默认 500 条,-1 不受限制
// paginationInterceptor.setLimit(2);
// 开启 count 的 join 优化,只针对部分 left join
paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
return paginationInterceptor;
}
}
查询方法
//page一定要在第一位,其次是条件
IPage<SalUser> page = new Page<>(pageNum,pageSize);
IPage<SalUser> pageUser = salUserService.page(page, new LambdaQueryWrapper<SalUser>()
.eq(SalUser::getOrgCode,orgCode))
3. 多表查询添加sql语句使用Lambda
使用的是@Select()方式
sql语句需要加入${ew.customSqlSegment} 固定格式
User:
//entity实体类需要继承Model,@Data是lombok代码简化
@Data
public class User extends Model<User> {
privite String orgName;
privite String orgId;
privite String orgCode;
privite String userId;
privite String userCode;
privite String userName;
}
Mapper:
//${ew.customSqlSegment} 前不添加where
/**
* ${ew.customSqlSegment} 前不添加where
* page写在第一位
* 如果报错未指定字段,则需要嵌套select
* select * from (select so.org_name,so.org_id,sa.* FROM sal_org so LEFT JOIN sal_user sa ON so.org_code = sa.org_code )s ${ew.customSqlSegment}
*/
@Select("SELECT so.org_name,so.org_id,sa.* FROM sal_org so LEFT JOIN sal_user sa "
+ "ON so.org_code = sa.org_code ${ew.customSqlSegment}")
IPage<User > selectPlu(IPage<User > salUser,
@Param(Constants.WRAPPER) LambdaQueryWrapper<User> wrapper);
Service
//以salUser类为主分页
IPage<User> page = new Page<>(pageNum,pageSize);
IPage<User> pageUser = salUserMapper.selectPlu(page,
new LambdaQueryWrapper<SalUser>()
.eq(SalUser::getOrgCode,orgCode));
最后LambdaQueryWrapper常用的方法
方法图片来源: https://www.cnblogs.com/javagg/p/12654305.html