MyBatis-Plus 查询返回实体对象还是map

2025-05-29 0 81

在常见场景下:返回数据建议使用map,不建议使用实体对象

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22
/**

* 1. 名字包含雨并且年龄小于40

* sql:name like '%雨%' and age < 40

* <p>

* 应用场景:

* 当表字段非常多,但是你只需要查询少数几列,

* 没必要返回的泛型为实体的list,如果返回的泛型为实体,绝大多字段都是null,这样做不优雅

* 用返回泛型为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 < ?

*/

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20
/**

* 按照直属上级分组,查询每组的平均年龄。最大年龄、最小年龄。

* 并且只取年龄总和小于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) < ?

}

遇到了这个问题,迷惘,遂问大神,大神曰:如果是组合体,就用map;如果是单体实体,就用实体。实体类对应单表,多表返回用map。

我想省事全用map,但是那我学了面向对象是用来干嘛的?

别人在调用你这个接口的时候 ,如果返回类型是个map,那他需要点进去,看你程序的具体实现才能知道怎么接收,赋值,那无疑是为别人添加了巨大麻烦,尤其是当你的代码不够规范的时候。再有,如果你代码写的很烂,岂不是自己去让别人吐槽你。如果你返回的是一个对象实体,那他就可以看到你返回的是什么,别人也就懒得再去看你代码了,也为他省了很多事。

新技术或者新思想 并不等于 省事 ,很多时候 有捷径,但是,我们就是不能去走,为什么?说不定走到哪里就会遇到一个坑,或者直接是悬崖也不一定。

其他回答:

1.每张表都要对应一个实体 这样才能映射嘛 多表联合查询的结果可以返回一个hashmap处理 视情况而定。

2.如果你是多表联合查询,然后你又觉得返回方式用map很麻烦的话,你可以自己建立个实体类,这个实力类中包含有你所要查询的多表中的字段,然后在mybatis中用typeAlias指定一下,到时候,就能像用一般的实体类那样使用就好。

3.如果类型指定为hashMap只是针对返回一条记录的情况吧,如果返回多条记录类型就不能指定为hashMap了?多个结果集他会给你放入一个List,你在javacode中用selectList这样的代码返回的是list,当然这个list中可能是实体类也可能是hashmap。

到此这篇关于MyBatis-Plus 查询返回实体对象还是map的文章就介绍到这了,更多相关MyBatis-Plus 查询返回内容请搜索快网idc以前的文章或继续浏览下面的相关文章希望大家以后多多支持快网idc!

原文链接:https://blog.csdn.net/weixin_40816738/article/details/93381620

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 MyBatis-Plus 查询返回实体对象还是map https://www.kuaiidc.com/118114.html

相关文章

发表评论
暂无评论