一篇朴实无华的MyBatis-Plus小白看完原地进阶的文章CRUD1简单单表查询
Posted 进阶的小名
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一篇朴实无华的MyBatis-Plus小白看完原地进阶的文章CRUD1简单单表查询相关的知识,希望对你有一定的参考价值。
文章目录
现在越来越多的公司选用MyBatis-Plus
,但是呢,以前小名总是习惯使用sql语句写查询说白了就是当MyBatis用,并没有真正体会到MP
真正的强大之处。现在在工作中小名慢慢体会到了MP
条件构造器的强大之处,所以想着把工作中常用的一些东西分享给大家~🎉🎉🎉大佬请绕行😅
欢迎来到小名的新专栏:通过MyBatis-Plus【CRUD】系列文章的第一篇,本文主要内容是单表查询,下一篇小名计划是写多表查询
1. 什么?mybatis-plus的多表查询,你还在写sql语句?!【CRUD2】多表联查的三种方式
2. 【CRUD】番外篇
3. 此专栏下其他文章
数据表
practice_user:
公用:
PracticeUserService.java
/**
* 通过sql模糊查询
* @return
*/
List<PracticeUser> selectUserBySql(PracticeUser practiceUser);
/**
* 通过QueryWapper()模糊查询
* @return
*/
List<PracticeUser> selectUserByQueryWapper(PracticeUser practiceUser);
/**
* 通过stream()过滤查询
* @return
*/
List<PracticeUser> selectUserByStream(PracticeUser practiceUser);
一、SQL
1. PracticeUserMapper.xml
<select id="selectUserBySql" resultType="eamon.daily.practice.user.entity.pojo.PracticeUser">
SELECT
*
FROM `practice_user`
where sex = #{sex}
<if test="name!=null and name!=''">
and `name` like concat('%',#{name},'%')
</if>
</select>
2. PracticeUserMapper.java
/**
* 通过sql模糊查询
* @return
*/
List<PracticeUser> selectUserBySql(PracticeUser practiceUser);
3. PracticeUserServiceImpl.java
@Override
public List<PracticeUser> selectUserBySql(PracticeUser practiceUser) {
return practiceUserMapper.selectUserBySql(practiceUser);
}
4.结果
MP
依赖了
MP
尽人皆知的条件构造器
二、QueryWapper()
1. PracticeUserServiceImpl.java
@Override
public List<PracticeUser> selectUserByQueryWapper(PracticeUser practiceUser) {
QueryWrapper<PracticeUser> wrapper = new QueryWrapper<>();
wrapper.eq("sex", practiceUser.getSex());
wrapper.like(StringUtils.isNotBlank(practiceUser.getName()), "name", practiceUser.getName());
return iPracticeUserService.getBaseMapper().selectList(wrapper);
}
2. 结果
三、链式调用 lambda 式条件构造器并通过stream()模糊查询
1. PracticeUserServiceImpl.java
//全表查询
List<PracticeUser> AllList = iPracticeUserService.lambdaQuery()
.eq(StringUtils.isNotBlank(practiceUser.getSex()) , PracticeUser::getSex,practiceUser.getSex())
.list();
//模糊查询
List<PracticeUser> collect = AllList.stream()
.filter(o -> null!=practiceUser.getName() && o.getName().contains(practiceUser.getName()))
.collect(Collectors.toList());
return collect;
2.1. 结果一
当然你完全可以将
//全表查询
List<PracticeUser> AllList = iPracticeUserService.lambdaQuery().eq(PracticeUser::getSex,practiceUser.getSex()).list();
替换为:
LambdaQueryWrapper<PracticeUser> lambda = new LambdaQueryWrapper<>();
lambda.eq(PracticeUser::getSex,practiceUser.getSex());
List<PracticeUser> AllList = iPracticeUserService.getBaseMapper().selectList(lambda);
第二种虽然看起来代码不如第一种代码简洁,但是它可以完成一些骚操作:
我们可以看出来第一种在编译时就已经报错了,第二种却没有。
所以我们可以利用这个点,做一些骚操作,例如:我们可以把公共的查询条件抽出来放到代码最上面,下面再根据不同代码逻辑,将查询条件加入到条件构造器“lambda”中
LambdaQueryWrapper<PracticeUser> lambda = new LambdaQueryWrapper<>();
lambda.eq(PracticeUser::getSex,practiceUser.getSex());
if(情景一){
if(条件){
lambda.eq(xx::xx,xxxx);
}
}else if(情景二){
if(条件一){
lambda.eq(xx::xx,xxxx);
}
if(条件二){
lambda.eq(xx::xx,xxxx);
}
}
这里查询条件就可以根据不同的情景构造不同的查询条件
这里只是做了抛砖引玉,大家可以想想可以用到项目中的那些地方。
其实第一种也可以判空:
2.2. 结果二
如果觉得小名的文章帮助到了您,请关注小名的新专栏 MyBatis-Plus【CRUD】,支持一下小名😄,给小名的文章点赞👍、评论✍、收藏🤞谢谢大家啦~♥♥♥
以上是关于一篇朴实无华的MyBatis-Plus小白看完原地进阶的文章CRUD1简单单表查询的主要内容,如果未能解决你的问题,请参考以下文章
MyBatis-Plus - 一篇带你解决自定义 SQL 注入器失效必杀技
2022版超详细Python+Pycharm安装保姆级教程,Python环境配置和使用指南,看完这一篇就够了