您好,登錄后才能下訂單哦!
這篇“MyBatisPlus查詢投影與查詢條件怎么指定”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“MyBatisPlus查詢投影與查詢條件怎么指定”文章吧。
目前我們在查詢數據的時候,什么都沒有做默認就是查詢表中所有字段的內容,我們所說的查詢投影即不查詢所有字段,只查詢出指定內容的數據。
具體如何來實現?
@SpringBootTest class Mybatisplus02DqlApplicationTests { @Autowired private UserDao userDao; @Test void testGetAll(){ LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>(); lqw.select(User::getId,User::getName,User::getAge); List<User> userList = userDao.selectList(lqw); System.out.println(userList); } }
select(…)方法用來設置查詢的字段列,可以設置多個,最終的sql語句為:
SELECT id,name,age FROM user
如果使用的不是lambda,就需要手動指定字段
@SpringBootTest class Mybatisplus02DqlApplicationTests { @Autowired private UserDao userDao; @Test void testGetAll(){ QueryWrapper<User> lqw = new QueryWrapper<User>(); lqw.select("id","name","age","tel"); List<User> userList = userDao.selectList(lqw); System.out.println(userList); } }
最終的sql語句為:SELECT id,name,age,tel FROM user
需求:聚合函數查詢,完成count、max、min、avg、sum的使用
count:總記錄數
max:最大值
min:最小值
avg:平均值
sum:求和
@SpringBootTest class Mybatisplus02DqlApplicationTests { @Autowired private UserDao userDao; @Test void testGetAll(){ QueryWrapper<User> lqw = new QueryWrapper<User>(); //lqw.select("count(*) as count"); //SELECT count(*) as count FROM user //lqw.select("max(age) as maxAge"); //SELECT max(age) as maxAge FROM user //lqw.select("min(age) as minAge"); //SELECT min(age) as minAge FROM user //lqw.select("sum(age) as sumAge"); //SELECT sum(age) as sumAge FROM user lqw.select("avg(age) as avgAge"); //SELECT avg(age) as avgAge FROM user List<Map<String, Object>> userList = userDao.selectMaps(lqw); System.out.println(userList); } }
為了在做結果封裝的時候能夠更簡單,我們將上面的聚合函數都起了個名稱,方面后期來獲取這些數據
需求:分組查詢,完成 group by的查詢使用
@SpringBootTest class Mybatisplus02DqlApplicationTests { @Autowired private UserDao userDao; @Test void testGetAll(){ QueryWrapper<User> lqw = new QueryWrapper<User>(); lqw.select("count(*) as count,tel"); lqw.groupBy("tel"); List<Map<String, Object>> list = userDao.selectMaps(lqw); System.out.println(list); } }
groupBy為分組,最終的sql語句為
SELECT count(*) as count,tel FROM user GROUP BY tel
注意:
聚合與分組查詢,無法使用lambda表達式來完成
MP只是對MyBatis的增強,如果MP實現不了,我們可以直接在DAO接口中使用MyBatis的方式實現
前面我們只使用了lt()和gt(),除了這兩個方法外,MP還封裝了很多條件對應的方法,這一節我們重點把MP提供的查詢條件方法進行學習下。
MP的查詢條件有很多:
范圍匹配(> 、 = 、between)
模糊匹配(like)
空判定(null)
包含性匹配(in)
分組(group)
排序(order)
……
需求:根據用戶名和密碼查詢用戶信息
@SpringBootTest class Mybatisplus02DqlApplicationTests { @Autowired private UserDao userDao; @Test void testGetAll(){ LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>(); lqw.eq(User::getName, "Jerry").eq(User::getPassword, "jerry"); User loginUser = userDao.selectOne(lqw); System.out.println(loginUser); } }
eq(): 相當于 =
,對應的sql語句為
SELECT id,name,password,age,tel FROM user WHERE (name = ? AND password = ?)
selectList:查詢結果為多個或者單個
selectOne:查詢結果為單個
需求:對年齡進行范圍查詢,使用lt()、le()、gt()、ge()、between()進行范圍查詢
@SpringBootTest class Mybatisplus02DqlApplicationTests { @Autowired private UserDao userDao; @Test void testGetAll(){ LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>(); lqw.between(User::getAge, 10, 30); //SELECT id,name,password,age,tel FROM user WHERE (age BETWEEN ? AND ?) List<User> userList = userDao.selectList(lqw); System.out.println(userList); } }
gt():大于(>)
ge():大于等于(>=)
lt():小于(<)
lte():小于等于(<=)
between():between ? and ?
需求:查詢表中name屬性的值以J
開頭的用戶信息,使用like進行模糊查詢
@SpringBootTest class Mybatisplus02DqlApplicationTests { @Autowired private UserDao userDao; @Test void testGetAll(){ LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>(); lqw.likeLeft(User::getName, "J"); //SELECT id,name,password,age,tel FROM user WHERE (name LIKE ?) List<User> userList = userDao.selectList(lqw); System.out.println(userList); } }
like():前后加百分號,如 %J%
likeLeft():前面加百分號,如 %J
likeRight():后面加百分號,如 J%
需求:查詢所有數據,然后按照id降序
@SpringBootTest class Mybatisplus02DqlApplicationTests { @Autowired private UserDao userDao; @Test void testGetAll(){ LambdaQueryWrapper<User> lwq = new LambdaQueryWrapper<>(); /** * condition :條件,返回boolean, 當condition為true,進行排序,如果為false,則不排序 * isAsc:是否為升序,true為升序,false為降序 * columns:需要操作的列 */ lwq.orderBy(true,false, User::getId); userDao.selectList(lw } }
除了上面演示的這種實現方式,還有很多其他的排序方法可以被調用,如圖:
orderBy排序
condition:條件,true則添加排序,false則不添加排序
isAsc:是否為升序,true升序,false降序
columns:排序字段,可以有多個
orderByAsc/Desc(單個column):按照指定字段進行升序/降序
orderByAsc/Desc(多個column):按照多個字段進行升序/降序
orderByAsc/Desc
condition:條件,true添加排序,false不添加排序
多個columns:按照多個字段進行排序
以上就是關于“MyBatisPlus查詢投影與查詢條件怎么指定”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。