SQL返回Map集合或者对象的操作
需求:
在下面的sql中我们需要返回一个sum函数和一个count函数,因为两个返回的值都不是表中的字段,所以这里需要考虑的是我的sql返回值类型应该是什么?
在日常的开发中,遇到这种问题我们首先会想到两种返回值类型,一种是将total和num设置为key,封装到map中。
另一种是封装一个对象,将total和num设置为这个对象的两个成员变量,下面描述一下使用这两种方法在分层开发中各个层中的用法。
方法一:使用对象作为返回值类型
1.首先封装一个对象
可以看到这个对象中的num和total两个成员变量就是我们sql语句中的两个返回值(total是sum函数的别名,num是count函数的别名)
2.controller层
在controller层中,就是这行代码最终使用了上面的sql语句与数据库进行交互,他的返回值类型是RedPackCountBo,也就是我们封装的对象。
3.service层
service层的返回值也是这个对象,不做赘述
4.serviceImpl层
5.mapper.java层
6.mapper.xml层(重点)
使用这种方法我们就能将total和Num以对象的形式返回到controller层,在需要使用这两个值的地方我们直接使用对象取值的方式获取就可以了。
在这里再说一个点:
如果需要传递一个以上的参数到sql语句中的时候,可以使用@param()注解或者封装到map集合中以map的形式传递到sql。我在这里一共传递了三个参数,使用了map的形式将参数进行封装,所以sql语句中的parameterType是java.util.Map
方法二:使用Map作为返回值类型
1.controller层
2.service层
3.serviceImpl层
4.mapper.java层
5.mapper.xml层
通过这种方法也可以实现需求,但是我个人觉得封住一个对象(也就是方法一)用的更爽,因为封装map可能会因为你最终需求的数据类型不同来进行一系列的数据类型转换,可能会出现java.lang.classCastException(类型转换异常)
我在使用map作为返回值类型的时候,从数据库中返回的count函数值(也就是num)的数据类型是Long型,sum函数(也就是total)返回值类型是BigDecimal类型(使用Object的getClass()方法可以查看数据类型),然后自己又做了类型转换。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
让JPA的Query查询接口返回Map对象的方法
在JPA 2.0 中我们可以使用entityManager.createNativeQuery()来执行原生的SQL语句. 但当我们查询结果没有对应实体类时,query.getResultList()返回的是一个List<Object[]>.也就是说每行的数据被作为一个对象数组返回. 常见的用法是这样的: public void testNativeQuery(){ Query query = entityManager.createNativeQuery("select id, n
-
Mybatis返回单个实体或者返回List的实现
Mybatis 的强大之处之一体现在映射语句上,让我们可以使用简单的配置,就可以实现对参数和返回结果的映射. 实体 package com.test.User public class User{ private String userId; private String userName; private String userPassword; private Date createTime; ... setter getter.... } DAO public interface User
-
MyBatis查询返回Map示例代码
前言 有时候我们做查询, 只需要返回两个string类型的字段,方便我们后续的处理.比如根据商品的code查询对应的分类的名字,需要返回一个map, key为商品code, value为商品分类对应的名称.以方便我们后续对结果集的处理.如果你直接用mybatis返回一个map, 你可能会发现,结果根据不是自己需要的.这时候我们需要自己实现一个ResultHandler来实现我们想要的结果,废话不多说,直接上代码 方法如下 第一步,在mapper.xml文件当中,定义一个ResultMap <re
-
MyBatis-Plus 查询返回实体对象还是map
在常见场景下:返回数据建议使用map,不建议使用实体对象 /** * 1. 名字包含雨并且年龄小于40 * sql:name like '%雨%' and age < 40 * <p> * 应用场景: * 当表字段非常多,但是你只需要查询少数几列, * 没必要返回的泛型为实体的list,如果返回的泛型为实体,绝大多字段都是null,这样做不优雅 * 用返回泛型为map建议使用 */ @Test public void selectByWrapperMaps() { QueryWrappe
-
SQL返回Map集合或者对象的操作
需求: 在下面的sql中我们需要返回一个sum函数和一个count函数,因为两个返回的值都不是表中的字段,所以这里需要考虑的是我的sql返回值类型应该是什么? 在日常的开发中,遇到这种问题我们首先会想到两种返回值类型,一种是将total和num设置为key,封装到map中. 另一种是封装一个对象,将total和num设置为这个对象的两个成员变量,下面描述一下使用这两种方法在分层开发中各个层中的用法. 方法一:使用对象作为返回值类型 1.首先封装一个对象 可以看到这个对象中的num和total两个
-
Mybatis返回map集合时,列的顺序与select不一致问题
目录 返回map集合,列的顺序与select不一致 mybatis中返回map集合问题 1.mapper.xml中写一个查询返回map的sql 2.mapper.java 对应接收 3.错误写法 4.正确写法 返回map集合,列的顺序与select不一致 <select id="queryPercentByAsset" resultType="java.util.HashMap"> 将Hashmap换成LinkedHashMap即可 <select
-
mybatis-plus返回map自动转驼峰配置操作
mybatis-plus返回map自动转驼峰配置object-wrapper-factory不生效问题解决:配置map-underscore-to-camel-case: true不生效问题解决 很多时候我们工作中查询很多字段的时候一般是返回一个VO来接收,这个时候我们只要在yml中配置了 map-underscore-to-camel-case: true 就会自动将查询数据库的字段带下划线的属性转成对应实体类VO中驼峰命名的属性. 但是会经常有这种场景:例如我们只查询2个字段要返回给前端,这
-
浅谈Map集合中get不存在的key值,会抛出异常吗?
我就废话不多说了,大家还是直接看代码吧~ public static void main(String[] args) { Map<String, String> a = new HashMap<String, String>(); String string = a.get("a111"); System.out.println(string); } 在Map集合中,get一个不存在的值,不会抛出异常,获得的返回值为null. 补充知识:map中get不存在的
-
Java基础Map集合详析
目录 一.概述 二.创建Map集合的对象方式 四.Map的获取方法 五.Map集合的遍历方式 方式一: 方式二: 一.概述 Interface Map k:键的类型:V:值的类型 将键映射到值的对象:不能包含重复的键:每个键可以映射到最多一个值 二.创建Map集合的对象方式 1.使用多态的方式 2.具体实现类HashMap public static void main(String[] args) { //创建Map集合对象 Map<String,String> m=
-
Java中Map集合的常用方法详解
目录 1.V put(K key, V value) 2.void putAll(Map<? extends K,? extends V> m) 3.void clear() 4.boolean containsKey(Object key) 5.boolean containsValue(Object value) 6.Set<Map.Entry<K,V>> entrySet() 7.boolean equals(Object o) 8.V get(Object ke
-
Mybatis查找返回Map,List集合类型的数据方式
Mybatis查找返回Map,List集合类型的数据 一.查找返回Bean对象的List集合 基本与返回Bean对象没什么区别,resultType依然为Bean对象的全类名,只是接口中的方法类型要进行修改 public List<Employee> getEmpListByEmail(String email); 二.查询返回Bean对象的Map集合 同样,resultType依然为Bean对象的全类名,只是接口中的方法类型要进行修改,添加注解. @MapKey("Bean对象属性
-
Java中Map集合中的Entry对象用法
Entry: 键值对 对象. 在Map类设计是,提供了一个嵌套接口(static修饰的接口):Entry.Entry将键值对的对应关系封装成了对象,即键值对对象,这样我们在遍历Map集合时,就可以从每一个键值对(Entry)对象中获取对应的键与对应的值. Entry为什么是静态的? Entry是Map接口中提供的一个静态内部嵌套接口,修饰为静态可以通过类名调用. Map集合遍历键值对的方式: Set<Map.Entry<K,V>> entrySet(); //返回此映射中包含的映射
-
mybatis 返回Map类型key改为小写的操作
默认情况下,当resultType="java.util.Map"时,返回的key值都是大写的. 现在想key改成自己想要的,只需为查询出来的字段增加个别名即可. 如: <select id="getStudentList" resultType="java.util.Map"> select t.name as "sName",t.sex as "sSex" from student <
随机推荐
- php批量删除操作(数据访问)
- 改版时保留原链接,创建新的URL的方法
- java中使用DES加密解密实例
- C语言指针的长度和类型深入分析
- 理解Javascript_08_函数对象
- c# 空合并运算符“??”的使用详解
- js 学习笔记(三)
- asp下的一个检测链接是否正常的函数
- 利用原生JS与jQuery实现数字线性变化的动画
- 羽毛球拍手胶怎么缠(图文详解附视频)
- SQL语句中含有乘号报错的处理办法
- 第七篇Bootstrap表单布局实例代码详解(三种表单布局)
- jquery实现表单获取短信验证码代码
- JS实现带提示的星级评分效果完整实例
- JavaScript Undefined,Null类型和NaN值区别
- 为Android应用增加渠道信息 自动化不同渠道的打包过程的使用详解
- Android开发者需要知道的8个项目管理技巧
- C# 委托(delegate) 的小例子
- PHP7多线程搭建教程
- sigsetjmp的用法总结