Mybatis-Plus select不去查全部字段和去重問題
1、mybatis-plus select查詢語句默認是查全部字段
有兩種方法可以指定要查詢的字段
CREATE TABLE `user` ( `id` bigint(20) NOT NULL COMMENT '主鍵', `name` varchar(30) DEFAULT NULL COMMENT '姓名', `age` int(11) DEFAULT NULL COMMENT '年齡', `email` varchar(50) DEFAULT NULL COMMENT '郵箱', `manager_id` bigint(20) DEFAULT NULL COMMENT '直屬上級id', `create_time` datetime DEFAULT NULL COMMENT '創(chuàng)建時間', PRIMARY KEY (`id`), KEY `manager_fk` (`manager_id`), CONSTRAINT `manager_fk` FOREIGN KEY (`manager_id`) REFERENCES `user` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1、user表只需要查詢出name和age兩個字段的數(shù)據(jù),可以使用queryWrapper的select()方法指定要查詢的字段
@Test
public void selectByWrapper10() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.select("name", "age").like("name", "雨");
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
日志輸出sql:
DEBUG==> Preparing: SELECT name,age FROM user WHERE name LIKE ?
DEBUG==> Parameters: %雨%(String)
TRACE<== Columns: name, age
TRACE<== Row: 張雨琪, 31
TRACE<== Row: 劉紅雨, 31
DEBUG<== Total: 2
2、user表要查詢出除manager_id和create_time外其它所有字段的數(shù)據(jù),同樣也是使用queryWrapper的select()方法
@Test
public void selectByWrapper11() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.select(User.class, info -> !info.getColumn().equals("manager_id")
&& !info.getColumn().equals("create_time"));
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
日志輸出sql:
DEBUG==> Preparing: SELECT id,name,age,email FROM user
DEBUG==> Parameters:
TRACE<== Columns: id, name, age, email
TRACE<== Row: 1087982257332887553, 大boss, 40, boss@baomidou.com
TRACE<== Row: 1088248166370832385, 王天風, 25, wtf@baomidou.com
TRACE<== Row: 1088250446457389058, 李藝偉, 28, lyw@baomidou.com
TRACE<== Row: 1094590409767661570, 張雨琪, 31, zjq@baomidou.com
TRACE<== Row: 1094592041087729666, 劉紅雨, 31, lhm@baomidou.com
DEBUG<== Total: 5
2、Mybatis plus實現(xiàn)Distinct去重功能
可以使用mybatis自帶的語法,去重的話也可以進行分組查詢,或者讓java處理的set方法
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.select("DISTINCT no,type").orderByAsc("oldlu");
return mapper.selectList(queryWrapper);
查詢出后的結(jié)果輸出類型,可以參考如下:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.select("DISTINCT no,type").orderByAsc("oldlu");
return mapper.selectList(queryWrapper);
3、Mybatis plus實現(xiàn)in操作
如果是List類型的String,例如:List這種類型的,就直接放值就可以了,本文講的是當你查詢到的是一個list集合如何遍歷取值,否則要寫sql和接口就顯得很麻煩。
步驟如下:
//查詢到list集合
List<User> userList = userService.selectById(id);
//結(jié)果集
List<String> resultList = new ArrayList<>();
//遍歷集合取值
userList .forEach(item->{
resultList.add(item.getYouNeedId());
});
//條件構(gòu)造器in上手使用
QueryWrapper<User> qw = new QueryWrapper<>();
qw.in("you_need_id", resultList);
//這里有個分頁的查詢,你也可以不用分頁,用mybatisplus里面封裝的其他方法
IPage<User> userIPage = userMapper.selectPage(page, qw);
//返回查詢結(jié)果,getRecords也是mybatisplus里面封裝的方法
return contractRecordIPage.getRecords();
4、mybatis 轉(zhuǎn)義對照表
這種問題在xml處理sql的程序中經(jīng)常需要我們來進行特殊處理。
?其實很簡單,我們只需作如下替換即可避免上述的錯誤:
| < | <= | > | >= | & | ’ | " |
|---|---|---|---|---|---|---|
| < | <= | > | >= | & | ' | " |
不多說話,代碼表示。
<!-- 分頁查詢-->
<select id="getKaoShiPageList" resultMap="kaoShiBean" parameterType="com.example.demo.kaoshi.beans.kaoShiBean">
select * from tb_pxks_kaoshi
<where>
<if test="zy !=null and zy!= ''">
and zy='${zy}'
</if>
<if test="ksrqFrom !=null and ksrqFrom!= ''">
and ksrq >='${ksrqFrom}'
</if>
<if test="ksrqTo !=null and ksrqTo!= ''">
and ksrq <='${ksrqTo}'
</if>
</where>
order by ksrq desc總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用Spring?Retry實現(xiàn)業(yè)務異常重試
在系統(tǒng)中經(jīng)常遇到業(yè)務重試的邏輯,比如三方接口調(diào)用,timeout重試三遍,異常處理重試的兜底邏輯等,本文給大家介紹一下如何使用Spring?Retry優(yōu)雅的實現(xiàn)業(yè)務異常重試,需要的朋友可以參考下2024-01-01
SPRINGBOOT讀取PROPERTIES配置文件數(shù)據(jù)過程詳解
這篇文章主要介紹了SPRINGBOOT讀取PROPERTIES配置文件數(shù)據(jù)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-12-12
Java的Spring框架中bean的繼承與內(nèi)部bean的注入
這篇文章主要介紹了Java的Spring框架中bean的繼承與內(nèi)部bean的注入,Spring框架是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下2015-12-12
又又叕出BUG啦!理智分析Java NIO的ByteBuffer到底有多難用
網(wǎng)絡數(shù)據(jù)的基本單位永遠是byte,Java NIO提供ByteBuffer作為字節(jié)的容器,但該類過于復雜,有點難用.本篇文章就帶大家簡單了解一下 ,需要的朋友可以參考下2021-06-06
SpringBoot項目啟動后立馬自動關(guān)閉的解決方案
這篇文章主要介紹了SpringBoot項目啟動后立馬自動關(guān)閉的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03

