MyBatis-Plus 查詢(xún)返回實(shí)體對(duì)象還是map
在常見(jiàn)場(chǎng)景下:返回?cái)?shù)據(jù)建議使用map,不建議使用實(shí)體對(duì)象
/**
* 1. 名字包含雨并且年齡小于40
* sql:name like '%雨%' and age < 40
* <p>
* 應(yīng)用場(chǎng)景:
* 當(dāng)表字段非常多,但是你只需要查詢(xún)少數(shù)幾列,
* 沒(méi)必要返回的泛型為實(shí)體的list,如果返回的泛型為實(shí)體,絕大多字段都是null,這樣做不優(yōu)雅
* 用返回泛型為map建議使用
*/
@Test
public void selectByWrapperMaps() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name", "雨").lt("age", 40);
//建議使用
List<Map<String, Object>> userList = userMapper.selectMaps(queryWrapper);
//不建議使用
// List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
/*
sql形式:SELECT id,name,age,email,manager_id,create_time FROM user WHERE name LIKE ? AND age < ?
*/
/**
* 按照直屬上級(jí)分組,查詢(xún)每組的平均年齡。最大年齡、最小年齡。
* 并且只取年齡總和小于500的組
* select avg(age) avg_age,min(age) min_age,max(age) max_age from user
* group by manager_id
* having sum(age) < 500 ;
*/
@Test
public void selectByWrapperMaps2() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.select("avg(age) avg_age", "min(age) min_age", "max(age) max_age")
.groupBy("manager_id")
.having("sum(age) < {0}", 500);
List<Map<String, Object>> userList = userMapper.selectMaps(queryWrapper);
userList.forEach(System.out::println);
// sql形式:SELECT avg(age) avg_age,min(age) min_age,max(age) max_age FROM user
// GROUP BY manager_id HAVING sum(age) < ?
}
遇到了這個(gè)問(wèn)題,迷惘,遂問(wèn)大神,大神曰:如果是組合體,就用map;如果是單體實(shí)體,就用實(shí)體。實(shí)體類(lèi)對(duì)應(yīng)單表,多表返回用map。
我想省事全用map,但是那我學(xué)了面向?qū)ο笫怯脕?lái)干嘛的?
別人在調(diào)用你這個(gè)接口的時(shí)候 ,如果返回類(lèi)型是個(gè)map,那他需要點(diǎn)進(jìn)去,看你程序的具體實(shí)現(xiàn)才能知道怎么接收,賦值,那無(wú)疑是為別人添加了巨大麻煩,尤其是當(dāng)你的代碼不夠規(guī)范的時(shí)候。再有,如果你代碼寫(xiě)的很爛,豈不是自己去讓別人吐槽你。如果你返回的是一個(gè)對(duì)象實(shí)體,那他就可以看到你返回的是什么,別人也就懶得再去看你代碼了,也為他省了很多事。
新技術(shù)或者新思想 并不等于 省事 ,很多時(shí)候 有捷徑,但是,我們就是不能去走,為什么?說(shuō)不定走到哪里就會(huì)遇到一個(gè)坑,或者直接是懸崖也不一定。
其他回答:
1.每張表都要對(duì)應(yīng)一個(gè)實(shí)體 這樣才能映射嘛 多表聯(lián)合查詢(xún)的結(jié)果可以返回一個(gè)hashmap處理 視情況而定。
2.如果你是多表聯(lián)合查詢(xún),然后你又覺(jué)得返回方式用map很麻煩的話,你可以自己建立個(gè)實(shí)體類(lèi),這個(gè)實(shí)力類(lèi)中包含有你所要查詢(xún)的多表中的字段,然后在mybatis中用typeAlias指定一下,到時(shí)候,就能像用一般的實(shí)體類(lèi)那樣使用就好。
3.如果類(lèi)型指定為hashMap只是針對(duì)返回一條記錄的情況吧,如果返回多條記錄類(lèi)型就不能指定為hashMap了?多個(gè)結(jié)果集他會(huì)給你放入一個(gè)List,你在javacode中用selectList這樣的代碼返回的是list,當(dāng)然這個(gè)list中可能是實(shí)體類(lèi)也可能是hashmap。
到此這篇關(guān)于MyBatis-Plus 查詢(xún)返回實(shí)體對(duì)象還是map的文章就介紹到這了,更多相關(guān)MyBatis-Plus 查詢(xún)返回內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java程序圖形用戶界面設(shè)計(jì)之容器JFrame
圖形界面(簡(jiǎn)稱(chēng)GUI)是指采用圖形方式顯示的計(jì)算機(jī)操作用戶界面。與早期計(jì)算機(jī)使用的命令行界面相比,圖形界面對(duì)于用戶來(lái)說(shuō)在視覺(jué)上更易于接受,本篇精講Java語(yǔ)言中關(guān)于圖形用戶界面的基本容器JFrame2022-02-02
SpringBoot 啟動(dòng)方法run()源碼解析
這篇文章主要介紹了SpringBoot 啟動(dòng)方法run()源碼賞析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
詳解eclipse項(xiàng)目中的.classpath文件原理
這篇文章介紹了eclipse項(xiàng)目中的.classpath文件的原理,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12
Java8中的LocalDateTime你會(huì)使用了嗎
LocalDateTime?是?Java?8?中日期時(shí)間?API?提供的一個(gè)類(lèi),在日期和時(shí)間的表示上提供了更加豐富和靈活的支持,本文就來(lái)講講LocalDateTime的一些具體使用方法吧2023-05-05
SpringBoot接口如何對(duì)參數(shù)進(jìn)行校驗(yàn)
這篇文章主要介紹了SpringBoot接口如何對(duì)參數(shù)進(jìn)行校驗(yàn),在以SpringBoot開(kāi)發(fā)Restful接口時(shí),?對(duì)于接口的查詢(xún)參數(shù)后臺(tái)也是要進(jìn)行校驗(yàn)的,同時(shí)還需要給出校驗(yàn)的返回信息放到上文我們統(tǒng)一封裝的結(jié)構(gòu)中2022-07-07

