MyBatis-Plus 查詢返回實(shí)體對(duì)象還是map
在常見場景下:返回?cái)?shù)據(jù)建議使用map,不建議使用實(shí)體對(duì)象
/**
* 1. 名字包含雨并且年齡小于40
* sql:name like '%雨%' and age < 40
* <p>
* 應(yīng)用場景:
* 當(dāng)表字段非常多,但是你只需要查詢少數(shù)幾列,
* 沒必要返回的泛型為實(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í)分組,查詢每組的平均年齡。最大年齡、最小年齡。
* 并且只取年齡總和小于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è)問題,迷惘,遂問大神,大神曰:如果是組合體,就用map;如果是單體實(shí)體,就用實(shí)體。實(shí)體類對(duì)應(yīng)單表,多表返回用map。
我想省事全用map,但是那我學(xué)了面向?qū)ο笫怯脕砀陕锏模?/p>
別人在調(diào)用你這個(gè)接口的時(shí)候 ,如果返回類型是個(gè)map,那他需要點(diǎn)進(jìn)去,看你程序的具體實(shí)現(xiàn)才能知道怎么接收,賦值,那無疑是為別人添加了巨大麻煩,尤其是當(dāng)你的代碼不夠規(guī)范的時(shí)候。再有,如果你代碼寫的很爛,豈不是自己去讓別人吐槽你。如果你返回的是一個(gè)對(duì)象實(shí)體,那他就可以看到你返回的是什么,別人也就懶得再去看你代碼了,也為他省了很多事。
新技術(shù)或者新思想 并不等于 省事 ,很多時(shí)候 有捷徑,但是,我們就是不能去走,為什么?說不定走到哪里就會(huì)遇到一個(gè)坑,或者直接是懸崖也不一定。
其他回答:
1.每張表都要對(duì)應(yīng)一個(gè)實(shí)體 這樣才能映射嘛 多表聯(lián)合查詢的結(jié)果可以返回一個(gè)hashmap處理 視情況而定。
2.如果你是多表聯(lián)合查詢,然后你又覺得返回方式用map很麻煩的話,你可以自己建立個(gè)實(shí)體類,這個(gè)實(shí)力類中包含有你所要查詢的多表中的字段,然后在mybatis中用typeAlias指定一下,到時(shí)候,就能像用一般的實(shí)體類那樣使用就好。
3.如果類型指定為hashMap只是針對(duì)返回一條記錄的情況吧,如果返回多條記錄類型就不能指定為hashMap了?多個(gè)結(jié)果集他會(huì)給你放入一個(gè)List,你在javacode中用selectList這樣的代碼返回的是list,當(dāng)然這個(gè)list中可能是實(shí)體類也可能是hashmap。
到此這篇關(guān)于MyBatis-Plus 查詢返回實(shí)體對(duì)象還是map的文章就介紹到這了,更多相關(guān)MyBatis-Plus 查詢返回內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在springboot項(xiàng)目中同時(shí)接收文件和多個(gè)參數(shù)的方法總結(jié)
在開發(fā)接口中,遇到了需要同時(shí)接收文件和多個(gè)參數(shù)的情況,可以有多種方式實(shí)現(xiàn)文件和參數(shù)的同時(shí)接收,文中給大家介紹了兩種實(shí)現(xiàn)方法,感興趣的同學(xué)跟著小編一起來看看吧2023-08-08
SpringBoot3整合SpringDoc實(shí)現(xiàn)在線接口文檔的詳細(xì)過程
這篇文章主要介紹了SpringBoot3整合SpringDoc實(shí)現(xiàn)在線接口文檔的詳細(xì)過程,本文通過示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-06-06
SpringBoot整合thymeleaf 報(bào)錯(cuò)的解決方案
這篇文章主要介紹了SpringBoot整合thymeleaf 報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
Javax Validation自定義注解進(jìn)行身份證號(hào)校驗(yàn)
這篇文章主要為大家詳細(xì)介紹了如何通過Javax Validation自定義注解進(jìn)行身份證號(hào)校驗(yàn),文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考一下2024-10-10
Java中如何動(dòng)態(tài)創(chuàng)建接口的實(shí)現(xiàn)方法
這篇文章主要介紹了Java中如何動(dòng)態(tài)創(chuàng)建接口的實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下2017-09-09
分享一個(gè)你不知道的Java異常實(shí)現(xiàn)的缺陷
Java中一個(gè)大家熟知的知識(shí)點(diǎn)就是異常捕獲,try...catch...finally組合,但是很多人不知道這里面有一個(gè)關(guān)于Java的缺陷,或者說是異常實(shí)現(xiàn)的一點(diǎn)不足之處。本文就通過一個(gè)很簡單的實(shí)驗(yàn)給大家演示下效果玩玩兒,希望大家能覺得有趣2022-12-12

