一篇朴实无华的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.结果


上面就是小名最常用的sql方式,感觉有点浪费项目里引的 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. 结果


QueryWapper()这种方式官网首推,百度也是漫天遍地的文章,文采都比小名好多了,所以大家自行百度吧

其实就是懒得搬

三、链式调用 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常用API全套教程,看完没有不懂的

MyBatis-Plus - 一篇带你解决自定义 SQL 注入器失效必杀技

熟练掌握 MyBatis-Plus,一篇就够!

2022版超详细Python+Pycharm安装保姆级教程,Python环境配置和使用指南,看完这一篇就够了

2022版超详细Python+Pycharm安装保姆级教程,Python环境配置和使用指南,看完这一篇就够了

MyBatis-Plus - 一篇带你解决自定义 SQL 注入器失效必杀技