spring?boot?使用Mybatis-plus查詢(xún)方法解析
前言
使用的數(shù)據(jù)庫(kù)和相關(guān)代碼見(jiàn)springboot整合mybatis plus與druid詳情。
使用test來(lái)進(jìn)行使用:
普通查詢(xún)
@Autowired private StudentDao studentDao; @Test void selectById() { studentDao.selectById(1000); }
批量查詢(xún)
@SpringBootTest class Spring1ApplicationTests { @Autowired private StudentDao studentDao; @Test void selectByIds() { List<Integer> ids = Arrays.asList(1000,1002); List<student> st = studentDao.selectBatchIds(ids); } }
條件查詢(xún)
主要使用了QueryWrapper方法:
- queryWrapper.lt()——小于
- queryWrapper.le()——小于等于
- queryWrapper.gt()——大于
- queryWrapper.ge()——大于等于
- queryWrapper.eq()——等于
- queryWrapper.ne()——不等于
- queryWrapper.betweeen(“age”,10,20)——age在值10到20之間
- queryWrapper.notBetweeen(“age”,10,20)——age不在值10到20之間
- queryWrapper.like(“屬性”,“值”)——模糊查詢(xún)匹配值‘%值%’
- queryWrapper.notLike(“屬性”,“值”)——模糊查詢(xún)不匹配值‘%值%’
- queryWrapper.likeLeft(“屬性”,“值”)——模糊查詢(xún)匹配最后一位值‘%值’
- queryWrapper.likeRight(“屬性”,“值”)——模糊查詢(xún)匹配第一位值‘值%’
- queryWrapper.isNull()——值為空或null
- queryWrapper.isNotNull()——值不為空或null
- queryWrapper.in(“屬性”,條件,條件 )——符合多個(gè)條件的值
- queryWrapper.notIn(“屬性”,條件,條件 )——不符合多個(gè)條件的值
- queryWrapper.or()——或者
- queryWrapper.and()——和
- queryWrapper.orderByAsc(“屬性”)——根據(jù)屬性升序排序
- queryWrapper.orderByDesc(“屬性”)——根據(jù)屬性降序排序
- queryWrapper.inSql(“sql語(yǔ)句”)——符合sql語(yǔ)句的值
- queryWrapper.notSql(“sql語(yǔ)句”)——不符合SQL語(yǔ)句的值
- queryWrapper.esists(“SQL語(yǔ)句”)——查詢(xún)符合SQL語(yǔ)句的值
- queryWrapper.notEsists(“SQL語(yǔ)句”)——查詢(xún)不符合SQL語(yǔ)句的值
查詢(xún)通過(guò)姓名:
@Autowired private StudentDao studentDao; @Test void selectByName() { QueryWrapper<student> queryWrapper = new QueryWrapper<>(); queryWrapper.like("name","Li Ming"); List<student> userInfoList = studentDao.selectList(queryWrapper); }
查詢(xún)方法詳細(xì)代碼:
@Test public void contextLoads() { } @Autowired private UserInfoMapper userInfoMapper; /** * 普通查詢(xún) */ @Test public void selectById() { UserInfo userInfo = userInfoMapper.selectById(123); System.out.println(userInfo); } /** * 批量查詢(xún) */ @Test public void selectByIds() { List<Long> ids = Arrays.asList(123L,124L,125L); List<UserInfo> userInfo = userInfoMapper.selectBatchIds(ids); System.out.println(userInfo); } /** * 名字包含娟并且年齡小于30 */ @Test public void selectByWrapper() { QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>(); queryWrapper.like("username","娟").lt("age",30); List<UserInfo> userInfoList = userInfoMapper.selectList(queryWrapper); userInfoList.forEach(System.out::println); } /** * 名字包含娟并且年齡大于等于20且小于等于40并且email不為空 */ @Test public void selectByWrapper2() { QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>(); queryWrapper.like("username","娟").between("age",20,30).isNotNull("email"); List<UserInfo> userInfoList = userInfoMapper.selectList(queryWrapper); userInfoList.forEach(System.out::println); } /** * 名字姓肖或者年量大于等于20,按照年齡降序排列,年齡相同按照id生序排列 */ @Test public void selectByWrapper3() { QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>(); queryWrapper.likeRight("username","肖") .or().ge("age",20).orderByDesc("age").orderByAsc("id"); List<UserInfo> userInfoList = userInfoMapper.selectList(queryWrapper); userInfoList.forEach(System.out::println); } /** * 創(chuàng)建日期為2019年10月2日并且直屬上級(jí)名字為王姓 */ @Test public void selectByWrapper4() { QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>(); queryWrapper.apply("date_format(create_time,'%Y-%m-%d')={0}","2019-10-02") .inSql("parent_id","select id from user where username like '王%'"); List<UserInfo> userInfoList = userInfoMapper.selectList(queryWrapper); userInfoList.forEach(System.out::println); } //上面的日期查詢(xún)使用的是占位符的形式進(jìn)行查詢(xún),目的就是為了防止SQL注入的風(fēng)險(xiǎn) /** * 名字為王姓并且(年齡小于40或郵箱不為空) */ @Test public void selectByWrapper5() { QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>(); queryWrapper.likeRight("username","王") .and(wq->wq.lt("age",40)) .or().isNotNull("email"); List<UserInfo> userInfoList = userInfoMapper.selectList(queryWrapper); userInfoList.forEach(System.out::println); } /** * 名字為王姓并且(年齡小于40并且大與20或郵箱不為空) */ @Test public void selectByWrapper6() { QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>(); queryWrapper.likeRight("username","王") .and(wq->wq.lt("age",40).gt("age",20)) .or().isNotNull("email"); List<UserInfo> userInfoList = userInfoMapper.selectList(queryWrapper); userInfoList.forEach(System.out::println); } /** * (年齡小于40并且大與20或郵箱不為空)并且名字為王姓 */ @Test public void selectByWrapper7() { QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>(); queryWrapper.nested(wq->wq.lt("age",40).gt("age",20)) .or().isNotNull("email") .likeRight("username","王"); List<UserInfo> userInfoList = userInfoMapper.selectList(queryWrapper); userInfoList.forEach(System.out::println); } /** * 年齡23,30,40 */ @Test public void selectByWrapper8() { QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>(); queryWrapper.in("age",Arrays.asList(20,30,40)); List<UserInfo> userInfoList = userInfoMapper.selectList(queryWrapper); userInfoList.forEach(System.out::println); } /** * 只返回滿(mǎn)足條件的其中一條語(yǔ)句即可 */ @Test public void selectByWrapper9() { QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>(); queryWrapper.in("age",Arrays.asList(20,30,40)).last("limit 1"); List<UserInfo> userInfoList = userInfoMapper.selectList(queryWrapper); userInfoList.forEach(System.out::println); } /** * 名字中包含雨并且年齡小于40(只取id,username) */ @Test public void selectByWrapper10() { QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>(); queryWrapper.select("id","username").like("username","雨").lt("age",40); List<UserInfo> userInfoList = userInfoMapper.selectList(queryWrapper); userInfoList.forEach(System.out::println); } /** * 名字中包含雨并且年齡小于40(不取create_time,parent_id兩個(gè)字段,即不列出全部字段) */ @Test public void selectByWrapper11() { QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>(); queryWrapper.like("username","雨").lt("age",40) .select(UserInfo.class,info->!info.getColumn().equals("create_time")&& !info.getColumn().equals("parent_id")); List<UserInfo> userInfoList = userInfoMapper.selectList(queryWrapper); userInfoList.forEach(System.out::println); } /** * 姓名和郵箱不為空 */ public void testCondition() { String username = "王"; String email = ""; condition(username,email); } private void condition(String username,String email){ QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>(); queryWrapper.like(StringUtils.isNullOrEmpty(username),"name",username) .like(StringUtils.isNullOrEmpty(email),"email",email); List<UserInfo> userInfoList = userInfoMapper.selectList(queryWrapper); userInfoList.forEach(System.out::println); } /** * 實(shí)體作為條件構(gòu)造器方法的參數(shù) */ @Test public void selectByWrapperEntity() { UserInfo whereUser = new UserInfo(); whereUser.setUsername("xiaojuan"); whereUser.setAge(22); QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>(whereUser); List<UserInfo> userInfoList = userInfoMapper.selectList(queryWrapper); userInfoList.forEach(System.out::println); } /** * AllEq用法 */ @Test public void selectByWrapperAllEq() { QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>(); Map<String, Object> params = new HashMap<String, Object>(); params.put("nuserame","xiaojuan"); params.put("age",null); queryWrapper.allEq(params); List<UserInfo> userInfoList = userInfoMapper.selectList(queryWrapper); userInfoList.forEach(System.out::println); } /** * AllEq用法(排除不是條件的字段) */ @Test public void selectByWrapperAllEq2() { QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>(); Map<String, Object> params = new HashMap<String, Object>(); params.put("nuserame","xiaojuan"); params.put("age",null); queryWrapper.allEq((k,v)->!k.equals("name"),params); List<UserInfo> userInfoList = userInfoMapper.selectList(queryWrapper); userInfoList.forEach(System.out::println); } /** * selectMaps */ @Test public void selectByWrapperMaps() { QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>(); queryWrapper.like("name","肖").lt("age",40); List<Map<String,Object>> userInfoList = userInfoMapper.selectMaps(queryWrapper); userInfoList.forEach(System.out::println); } /** * 按照直屬上級(jí)分組,查詢(xún)每組的平均年齡,最大年齡,最小年齡。并且只取年齡總和小于500的組 */ @Test public void selectByWrapperMaps2() { QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>(); queryWrapper.select("avg(age) avg_age","min(min) min_age","max(age) max_age") .groupBy("parent_id").having("sum(age)<{0}",500); List<Map<String,Object>> userInfoList = userInfoMapper.selectMaps(queryWrapper); userInfoList.forEach(System.out::println); } /** * selectObjs */ @Test public void selectByWrapperObjs() { QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>(); queryWrapper.select("id","name").like("name","肖").lt("age",40); List<Object> userInfoList = userInfoMapper.selectObjs(queryWrapper); userInfoList.forEach(System.out::println); } /** * selectCount */ @Test public void selectByWrapperCount() { QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>(); queryWrapper.like("name","肖").lt("age",40); Integer count = userInfoMapper.selectCount(queryWrapper); System.out.println(count); } /** * selectOne */ @Test public void selectByWrapperSelectOne() { QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>(); queryWrapper.like("name","肖").lt("age",40); UserInfo user = userInfoMapper.selectOne(queryWrapper); System.out.println(user); } /** * 使用Lambda */ @Test public void selectLambda() { // LambdaQueryWrapper<UserInfo> lambda = new QueryWrapper<UserInfo>().lambda(); LambdaQueryWrapper<UserInfo> lambda = new LambdaQueryWrapper<UserInfo>(); lambda.like(UserInfo::getUsername,"娟").lt(UserInfo::getAge,40); List<UserInfo> userInfoList = userInfoMapper.selectList(lambda); userInfoList.forEach(System.out::println); } /** * 使用Lambda,名字為王姓(年齡小于40或郵箱不為空) */ @Test public void selectLambd2() { LambdaQueryWrapper<UserInfo> lambda = new LambdaQueryWrapper<UserInfo>(); lambda.like(UserInfo::getUsername,"娟") .and(lqw->lqw.lt(UserInfo::getAge,40).or().isNotNull(UserInfo::getEmail)); List<UserInfo> userInfoList = userInfoMapper.selectList(lambda); userInfoList.forEach(System.out::println); } /** * 使用Lambda鏈?zhǔn)? */ @Test public void selectLambd3() { List<UserInfo> userInfoList = new LambdaQueryChainWrapper<UserInfo>(userInfoMapper) .like(UserInfo::getUsername,"娟").ge(UserInfo::getAge,20).list(); userInfoList.forEach(System.out::println); }
到此這篇關(guān)于spring boot 使用Mybatis-plus查詢(xún)方法解析的文章就介紹到這了,更多相關(guān)spring boot Mybatis-plus內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- springboot整合mybatis-plus基于注解實(shí)現(xiàn)一對(duì)一(一對(duì)多)查詢(xún)功能
- oracle+mybatis-plus+springboot實(shí)現(xiàn)分頁(yè)查詢(xún)的實(shí)例
- springboot+mybatis plus實(shí)現(xiàn)樹(shù)形結(jié)構(gòu)查詢(xún)
- SpringBoot+MyBatisPlus+MySQL8實(shí)現(xiàn)樹(shù)形結(jié)構(gòu)查詢(xún)
- springboot整合mybatis-plus實(shí)現(xiàn)多表分頁(yè)查詢(xún)的示例代碼
- springboot + mybatis-plus實(shí)現(xiàn)多表聯(lián)合查詢(xún)功能(注解方式)
- springboot整合mybatis-plus 實(shí)現(xiàn)分頁(yè)查詢(xún)功能
相關(guān)文章
Java基于Semaphore構(gòu)建阻塞對(duì)象池
這篇文章主要介紹了Java基于Semaphore構(gòu)建阻塞對(duì)象池,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04詳解關(guān)于IntelliJ IDEA中Schedule for Addition 的問(wèn)題
本篇文章主要介紹了詳解關(guān)于 IntelliJ IDEA 中 Schedule for Addition 的問(wèn)題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12一篇文章教帶你了解Java Spring之自動(dòng)裝配
今天小編就為大家分享一篇關(guān)于Spring中的自動(dòng)裝配,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2021-09-09Java基礎(chǔ)夯實(shí)之線(xiàn)程問(wèn)題全面解析
操作系統(tǒng)支持多個(gè)應(yīng)用程序并發(fā)執(zhí)行,每個(gè)應(yīng)用程序至少對(duì)應(yīng)一個(gè)進(jìn)程?。進(jìn)程是資源分配的最小單位,而線(xiàn)程是CPU調(diào)度的最小單位。本文將帶大家全面解析線(xiàn)程相關(guān)問(wèn)題,感興趣的可以了解一下2022-11-11java實(shí)現(xiàn)文本框和文本區(qū)的輸入輸出
這篇文章主要介紹了java實(shí)現(xiàn)文本框和文本區(qū)的輸入輸出的方法和具體示例,有需要的小伙伴可以參考下。2015-06-06JavaSwing實(shí)現(xiàn)小型學(xué)生管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了JavaSwing實(shí)現(xiàn)小型學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02java反射拼接方法名動(dòng)態(tài)執(zhí)行方法實(shí)例
下面小編就為大家?guī)?lái)一篇java反射拼接方法名動(dòng)態(tài)執(zhí)行方法實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-08-08關(guān)于spring循環(huán)依賴(lài)問(wèn)題及解決方案
這篇文章主要介紹了關(guān)于spring循環(huán)依賴(lài)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06關(guān)于@GetMapping和@GetMapping(value=““)的區(qū)別
這篇文章主要介紹了關(guān)于@GetMapping和@GetMapping(value=““)的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05