
文章目錄
- 一、SQL
- 1. PracticeUserMapper.xml
- 2. PracticeUserMapper.java
- 3. PracticeUserServiceImpl.java
- 4.結果
- 二、QueryWapper()
- 1. PracticeUserServiceImpl.java
- 2. 結果
- 三、鏈式呼叫 lambda 式條件構造器并通過stream()模糊查詢
- 1. PracticeUserServiceImpl.java
- 2.1. 結果一
- 2.2. 結果二
現在越來越多的公司選用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】,支持一下小名😄,給小名的文章點贊👍、評論?、收藏🤞謝謝大家啦~???
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/295637.html
標籤:java
