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

标签:MyBatis-Plus,查询返回
0
投稿

猜你喜欢

  • Spring Boot中操作使用Redis实现详解

    2023-11-24 02:39:29
  • Android四大组件之Activity详解

    2022-08-22 00:00:49
  • Android网络数据开关用法简单示例

    2021-07-20 00:06:06
  • Springboot2.x+ShardingSphere实现分库分表的示例代码

    2023-11-26 01:34:07
  • MyBatis中的properties配置(推荐)

    2023-06-04 20:47:58
  • 详解Spring全局异常处理的三种方式

    2023-11-11 15:31:47
  • C++右值引用与move和forward函数的使用详解

    2023-07-05 19:27:33
  • Java 数据结构与算法系列精讲之环形链表

    2023-04-27 22:37:07
  • Java实现斗地主与猜数字游戏详细流程

    2022-02-04 07:02:48
  • Mybatis示例讲解注解开发中的单表操作

    2023-08-20 06:20:58
  • Java线程优先级和守护线程原理解析

    2023-03-27 16:45:30
  • SpringBoot项目jar发布后如何获取jar包所在目录路径

    2023-02-23 08:36:04
  • Java实现身份证号码验证源码示例分享

    2022-12-24 03:58:50
  • Android Binder的原理与使用

    2023-04-06 04:08:49
  • IDEA中设置代码自动提示为Alt+/的具体做法

    2022-07-06 14:58:32
  • 如何利用反射构建元数据查看器

    2021-05-27 00:11:05
  • MyBatis3源码解析之如何获取数据源详解

    2023-12-06 02:23:08
  • Java 全方位讲解面向对象特点与使用

    2023-07-21 18:34:06
  • 如何用Java注解和反射实现依赖注入

    2022-11-04 11:34:10
  • 关于springBoot yml文件的list读取问题总结(亲测)

    2023-11-04 12:37:08
  • asp之家 软件编程 m.aspxhome.com