MyBatis-Plus 查询返回实体对象还是map
作者:gblfy 发布时间:2023-11-28 03:20:19
在常见场景下:返回数据建议使用map,不建议使用实体对象
/**
* 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 < ?
*/
/**
* 按照直属上级分组,查询每组的平均年龄。最大年龄、最小年龄。
* 并且只取年龄总和小于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。
来源:https://blog.csdn.net/weixin_40816738/article/details/93381620
猜你喜欢
- 目录课设要求相关知识点1.服务端能够看到所有在线用户2.服务端能够强制用户下线3.客户端能够看到所有在线用户4.客户端要求能够向某个用户发送
- 一、题目描述题目实现:网络资源的断点续传功能。二、解题思路获取要下载的资源网址显示网络资源的大小上次读取到的字节位置以及未读取的字节数输入下
- Android多媒体 MediaPlayer我们可以通过这个API来播放音频和视频该类是Androd多媒体框架中的一个重要组件,通过该类,我
- 问题org.apache.ibatis.binding.BindingException: Invalid bound statement
- 不同的事件源可以产生不同类别的事件。例如,按钮可以发送一个ActionEvent对象,而窗口可以发送WindowEvent对象。AWT时间处
- API:即Application programming Interface,应用编程接口。Java中封装了许许多多的API供用户使用,Sc
- 一、LockSupport类的属性private static final sun.misc.Unsafe UNSAFE; &
- 队列的特性很简答,就是先进先出,一般利用数组来实现。实现队列自然要实现几个函数:入队,出队,判断队满,判断队空,获得队头,队尾。实现队列的关
- 本文实例为大家分享了java制作简单验证码的具体代码,供大家参考,具体内容如下在这里我们需要用到java的画笔工具,所以我们需要导入以下包i
- 本文为大家分享了Android中Drawable方法的详细使用方法,供大家参考,具体内容如下1. BitmapDrawable相关方法:新建
- 如何解决某个节点故障的问题?如何解决数据一致性的问题?如何解决数据倾斜的问题?CAP理论先从定义开始:C(Consistence):一致性所
- 今天遇到文件上传的问题,使用Ajax方式进行提交,服务器一直报错The current request is not a multipart
- 由于要做一个新项目,所以打算做一个简单的图片验证码。先说说思路吧:在服务端,从一个文件夹里面找出8张图片,再把8张图片合并成一张大图,在8个
- 在使用SuperSocket来写服务器的过程中,这是一个非常快速的开发方式,也非常好用。不过学习的曲线有点高,在使用的过程中经常会遇到各种各
- 词云简介“词云”由美国西北大学新闻学副教授、新媒体专业主任里奇·戈登(Rich Gordon)于2006年最先使用,是通过形成“关键词云层”
- mybatis-plus 查询传入参数Map,返回List<Map>原因有时实体类属性不够用,又不想写自定义VO了,所以用map
- 1,添加依赖在project的build.gradle文件中添加dependencies { classpath 'co
- 克隆,想必大家都有耳闻,世界上第一只克隆羊多莉就是利用细胞核移植技术将哺乳动物的成年体细胞培育出新个体,甚为神奇。其实在Java中也存在克隆
- 本文实例讲述了C#实现对数组进行随机排序类。分享给大家供大家参考。具体如下:这个一个扩充C#随机数发生器的类,可以随机生成指定范围的数字,可
- 本文实例讲述了Android AutoCompleteTextView控件基本用法。分享给大家供大家参考,具体如下:当输入部分内容之后会有相