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

在常见场景下:返回数据建议使用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。

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

(0)

相关推荐

  • 完美解决MybatisPlus插件分页查询不起作用总是查询全部数据问题

    问题描述: 在使用mybatisplus插件进行分页查询时分页参数不起作用,总是查出来全部数据. 原因分析: 查看打印的sql日志发现sql后面并没有limit条件,怀疑是缺少配置. 解决方案: 查阅资料通过添加配置类MybatisPlusConfig解决问题: @Configuration public class MybatisPlusConfig { @Bean public PaginationInterceptor paginationInterceptor(){ return new

  • MyBatis Plus 实现多表分页查询功能的示例代码

    在Mybatis Plus 中,虽然IService 接口帮我们定义了很多常用的方法,但这些都是 T 对象有用,如果涉及到 多表的查询,还是需要自定义Vo 对象和自己编写sql 语句,Mybatis Plus提供了一个Page 对象,查询是需要设置其中的 size 字段 和 current 字段的值 一.分页配置 可以直接使用selectPage这样的分页,但返回的数据确实是分页后的数据,但在控制台打印的SQL语句其实并没有真正的物理分页,而是通过缓存来获得全部数据中再进行的分页,这样对于大数据

  • MybatisPlus自定义Sql实现多表查询的示例

    前言 前段时间看同事的代码,发现他用Layui+MybatisPlus做分页查询做得很规整,认真看了下代码发现这种方式不仅适用于与Layui做分页查询,在任何时候需要多表联查的时候都可以用到.  以下以Layui分页查询作为参考,在实际应用中可以灵活使用. 分页查询VO对象 @Data @AllArgsConstructor @NoArgsConstructor public class LayuiData { private Integer code=0; private Long count

  • Mybatis plus中使用in查询出错如何解决

    不想看我bb的直接点上面的 ''解决方法'' 我的情况是这样的,在使用mybatis plus提供的QueryWrapper方法里的in查询时,我的参数为类似"1,2,3,4"这样的字符串 //要查的参数 String masterIds = "81554,5654,55948,48945"; QueryWrapper<FpjyPauperInfo> pauperqw = new QueryWrapper<>(); pauperqw.in(&

  • MyBatis-Plus多表联合查询并且分页(3表联合)

    这3张表的关系是模型表Model  ===> 训练表Training ===>应用表Application(大概的逻辑是:选择应用,然后训练,然后成为模型) 首先我们先建立实体Model(我使用的data注解不需要get set  @TableField(exist = false) 注解下的属性 是相关联表的属性) package cn.com.befery.dataai.po; import java.util.Date; import org.springframework.boot.j

  • MyBatis-plus 模糊查询的使用

    在使用MyBatis-plus的时候,一些基础的增删改查可以不用再自己写sql了: public interface UserDao extends BaseMapper<FykUser>{ } 就这样,就可以实现user表的增删改查了. 模糊查询 使用userDao.selectList(queryWrapper)方法,就可以查询出一个用户列表. 如果需要模糊查询,代码如下: //条件封装 QueryWrapper<FykUser> queryWrapper = new Quer

  • MyBatis-Plus 如何实现连表查询的示例代码

    在项目开发中,难免会遇到连表查询的操作. 项目中用的是 MyBatis-Plus,是新使用的框架.官方文档看这里. 我写过一篇通过单元测试来验证 MyBatis-Plus 的 CRUD 操作.点这里跳转 今天遇到连表查询的问题,特此记录一下. 遇到需要连表操作,想起 MyBatis 的操作连表查询,要是 MyBatis-Plus 也像 MyBatis 一样,就脑壳痛了.(MyBatis-Plus 是 MyBatis 的增强版) 脑壳痛归脑壳痛,先动手干. 首先 因为官方的内置接口方法都是针对单表

  • mybatis-plus QueryWrapper自定义查询条件的实现

    mybatis-plus框架功能很强大,把很多功能都集成了,比如自动生成代码结构,mybatis crud封装,分页,动态数据源等等,附上官网链接https://mp.baomidou.com/,github上有代码例子,国内小伙伴推荐码云https://gitee.com/baomidou/mybatis-plus.  但是,其中还是有些小坑,文档也没有涉及的很全面,碰到问题,百度或者发issue,能力强的还是直接看源码好,一切答案都在源码中. 版本推荐用3.1.0,3.1.1及以上版本有bu

  • mybatis-plus分页查询的实现示例

    按照官方文档进行的配置:快速开始|mybatis-plus 引入依赖: <!-- 引入mybatisPlus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.2.0</version> </dependency> <!--

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

    在常见场景下:返回数据建议使用map,不建议使用实体对象 /** * 1. 名字包含雨并且年龄小于40 * sql:name like '%雨%' and age < 40 * <p> * 应用场景: * 当表字段非常多,但是你只需要查询少数几列, * 没必要返回的泛型为实体的list,如果返回的泛型为实体,绝大多字段都是null,这样做不优雅 * 用返回泛型为map建议使用 */ @Test public void selectByWrapperMaps() { QueryWrappe

  • 使用jdbcTemplate查询返回自定义对象集合代码示例

    1.在UserInfo.java中添加一个Map转换为UserInfo的方法 public static UserInfo toObject(Map map) { UserInfo userInfo = new UserInfo(); userInfo.setId((Integer) map.get(id)); userInfo.setUname((String) map.get(uname)); userInfo.setUnumber((Integer) map.get(unumber));

  • Mybatis关联查询结果集对象嵌套的具体使用

    在查询时经常出现一对多”的关系,所有会出现嵌套对象的情况,Mybatis在resultMap提供了collection标签,本文适合有一定Mybatis基础的读者查阅 数据模型WeixinActivity2018User.java public class WeixinActivity2018User  implements Serializable{     /** serialVersionUID*/     private static final long serialVersionUI

  • Mybatis多参数及实体对象传递实例讲解

    在使用Mybatis的时候,经常会有各种各样的参数传递,不同类型,不同个数的参数. 先上个例子: public List<LifetouchRelease> findOfficeList(@Param("lifetouchRelease") LifetouchRelease lifetouchRelease, @Param("advertisementId") String advertisementId, @Param("officeName

  • java实体对象与Map之间的转换工具类代码实例

    这篇文章主要介绍了java实体对象与Map之间的转换工具类代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Map接口中键和值一一映射. 可以通过键来获取值. 给定一个键和一个值,你可以将该值存储在一个Map对象. 之后,你可以通过键来访问对应的值. 当访问的值不存在的时候,方法就会抛出一个NoSuchElementException异常. 当对象的类型和Map里元素类型不兼容的时候,就会抛出一个 ClassCastException异常

  • Jquery Ajax学习实例4 向WebService发出请求,返回实体对象的异步调用

    一.WebService.asmx: 处理业务数据,在GetPerson方法中产生Person实体类数据,供JqueryRequest.aspx调用,代码如下: 复制代码 代码如下: [WebMethod] public Person GetPerson(string name, int age, string address) { Person p = new Person() { Name = name, Age = age, Address = address }; return p; }

  • mybatis主从表关联查询,返回对象带有集合属性解析

    目录 主从表关联查询,返回对象带有集合属性 VersionResult为接收返回数据对象 UpdateRecordEntity为从表数据 mapper.xml写法,这个是关键 sql查询语句 执行sql返回的数据 页面调取接口 mybatis关联查询(对象嵌套对象) 一种是用关联另一个resultMap的形式 一种联合查询(一对一)的实现 主从表关联查询,返回对象带有集合属性 昨天有同事让我帮着看一个问题,mybatis主从表联合查询,返回的对象封装集合属性.我先将出现的问题记录一下,然后再讲处

  • mybatis查询返回Map<String,Object>类型的讲解

    目录 查询返回Map<String,Object>类型 mybatis返回结果为Map问题 查询返回Map<String,Object>类型 mybatis 查询返回Map<String,Object> 类型,平时没太注意怎么用,今天又遇到了总结记录一下,方便以后处理此类问题. Mapper.java中的方法: @MapKey("userId") Map<String,UserInfo> personalInfoByUserIds(Lis

  • Mybatis查询返回Map<String,Object>类型实例详解

    这篇我们来说一下Mybatis的查询结果返回Map类型. 首先我们在企业开发中是很少使用到Map返回类型的,很多都是直接返回一个对象实体.尤其是苞米豆出了MP框架之后,XML都是很少写的. 那么在什么情况下需要使用Map来作为返回的结果类型呢? 案例:有一个模块A和模块B,A模块的POM依赖引入了B模块,A模块可以直接使用B模块的实体,但是B模块使用不到A模块的实体,如果在B模块POM中引入A模块的依赖,那么在运行时会出现依赖循环错误,这时候就需要自己写SQL来返回Map类型了,因为返回不了另一

  • MyBatis查询返回Map示例代码

    前言 有时候我们做查询, 只需要返回两个string类型的字段,方便我们后续的处理.比如根据商品的code查询对应的分类的名字,需要返回一个map, key为商品code, value为商品分类对应的名称.以方便我们后续对结果集的处理.如果你直接用mybatis返回一个map, 你可能会发现,结果根据不是自己需要的.这时候我们需要自己实现一个ResultHandler来实现我们想要的结果,废话不多说,直接上代码 方法如下 第一步,在mapper.xml文件当中,定义一个ResultMap <re

随机推荐