MyBatis 封装Map,返回不同实体的集合对象
博文发布出发点:
1.现在有一个需求,就是从100个表中获得任意表中的数据,按照正常的思维模式和处理方式,
我们首先会创建100个实体类(累死!),然后通过resultType一一对应实体类,这种方式简直...
2.我们不通过创建实体类,来获得一个表中的所有数据,或者部分数据的键值对形式的值,我们该怎么做?
那么我们下面将会用一种相对高效的方式来解决问题!
最初的想法,汇聚成了如下的代码
List<Object> findStatisData(); <mapper namespace="cn.arebirth.mapper.IncomeMapper">
<select id="findStatisData" resultType="java.lang.Object">
select * from data
</select>
</mapper>
但是这样写拿到的数据只有一列,这时为什么??sql语句都没有问题?
原因是,当我们的resultType写成一个实体类的时候,MyBatis首先会找这个实体类里面的字段,然后根据字段进行映射,
但是我们的Object对象它里面有字段吗???
当然是没有的,所以只能获得一个值。
-------------------------------------------------------------------
像这种想要返回实体类的东西我们还得借助Map<String,Object>,为什么呢?
String就相当于实体类里面的具体属性字段,而Object就是存储值的
所以我们的写法应该是这样的
/*
Warning:
这里边如果是要获取多个值的话就必须写成List<Map<String,Object>>
如果要写成Map<String,Object>,它只会获取一条数据,如果你查询的是多条数据的话,还会报异常!!
*/
List<Map<String,Object>> findStatisData(); <mapper namespace="cn.arebirth.mapper.IncomeMapper">
<select id="findStatisData" resultType="java.util.Map">
select * from data
</select>
</mapper>
这样的话我们就可以获得所有的字段名加值的lList集合嵌套Map的值了。
最终我们可以通过如下的方式,打印出所有的key(留给比较懵逼的同学看)
package cn.arebirth.test; import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set; import org.apache.ibatis.session.SqlSession;
import org.junit.Test; import cn.arebirth.mapper.IncomeMapper;
import cn.arebirth.util.MyBatisUtil; public class TestIncome { @Test
public void test() {
SqlSession session = MyBatisUtil.getSession();
IncomeMapper mapper = session.getMapper(IncomeMapper.class); List<Map<String,Object>> data = mapper.findStatisData();
for (int i = 0; i < data.size(); i++) {
HashMap<Object, Object> map = (HashMap)data.get(i);
Set<Object> keySet = map.keySet();
System.out.println(keySet.toString());
}
} }
MyBatis 封装Map,返回不同实体的集合对象的更多相关文章
- MyBatis3_[tp-26-27]_映射文件_select_返回List_记录封装Map:返回单个元素的Map或者整体Map集合
笔记要点出错分析与总结工程组织 1.定义接口 public interface EmployeeMapper { //多条记录封装到一个map中: Map<Integer,Employee> ...
- spring boot加mybatis使用Map返回时,当值为空时属性也会没有(转)
使用spring boot加mybatis时,设置Map返回,当值为空时属性也会没有,就会报错 在application.properties中加入下面配置,将会解决这个问题. #当查询数据为空时 ...
- 使用MyBatis时接收值和返回值选择Map类型或者实体类型
MyBatis作为现近JavaEE企业级项目开发中常用的持久层框架之一,以其简洁高效的ORM映射和高度的SQL的自由性被广大开发人员认可.Mybatis在接收系统传来的参数和返回的参数时主要可以有Ma ...
- 【mybatis】mybatis查询 结果 用map接收,无实体接收 + 关联子表 一并返回主子表的结果
如果后台程序没有实体对应mysql的数据表. 而mybatis想要查询mysql这个数据表的数据,返回给应用程序. 应用程序该如何接收? =============================== ...
- Entity Framework 6 Recipes 2nd Edition(10-1)译->非Code Frist方式返回一个实体集合
存储过程 存储过程一直存在于任何一种关系型数据库中,如微软的SQL Server.存储过程是包含在数据库中的一些代码,通常为数据执行一些操作,它能为数据密集型计算提高性能,也能执行一些为业务逻辑. 当 ...
- JSon_零基础_003_将Map集合对象转换为JSon格式的对象字符串,返回给界面
将Map集合对象转换为JSon格式的对象字符串,返回给界面 需导入的jar包: 编写servlet: package com.west.webcourse.servlet; import java.i ...
- Java工具类 通过ResultSet对象返回对应的实体List集合
自从学了JDBC用多了像一下这种代码: List<xxx> list = new Array<xxx>(); if(rs.next()){ xxx x = new xxx(); ...
- (转)Mybatis insert后返回主键给实体对象(Mysql数据库)
<insert id="insert" parameterType="com.zqgame.game.website.models.Team"> & ...
- mybatis设置Map空值返回
mybatis时,设置Map返回,当值为空时属性也会没有 在application.properties中加入下面配置,将会解决这个问题. #当查询数据为空时字段返回为null,不加这个查询数据为空时 ...
随机推荐
- ubuntu环境下测试cache大小并校验
Cache存储器:电脑中为高速缓冲存储器,是位于CPU和主存储器DRAM(Dynamic Random Access Memory)之间,规模较小,但速度很高的存储器,通常由SRAM(Static R ...
- 03-k8s认证
目录 k8s认证 客户端 ---> API Server 外部访问 pod 客户端 RBCA k8s 用户类型 dashboard 的认证登录 k8s认证 主要使用 RBAC授权检查机制 认证: ...
- Samba:打造企业级授权文件共享服务器
写在前面的话 先来说说故事背景:公司内部文件服务器的解决方案其实很多,对于中小型互联网公司,大多的在这一块的选型还是 FTP,或者 VSFTP,但是个人实在是对那个东西喜欢不起来,于是就选择了配置相对 ...
- ArchSummit分享 | 高德地图App架构演化与实践
讲师介绍 郝仁杰,高德地图无线开发专家.在7月13日落幕的2019年ArchSummit峰会上就高德地图近几年的App架构演化和实践进行了分享. 背景概述 高德是国内领先的数字地图内容.导航和位置服务 ...
- 【iOS】tableView:viewForHeaderInSection: 方法未调用
今天遇到这个问题,即重写的方法 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)sec ...
- ansible-yum
#yum 需要在vim /etc/ansible/hosts里面给执行的主机配置 远程调用python的路径不知道为什么默认值认识python2.6.6 vim /etc/ansible/hosts ...
- python 实现爬取网站下所有URL
python3 实现爬取网站下所有URL 获取首页元素信息: 首页的URL链接获取: 遍历第一次返回的结果: 递归循环遍历: 全部代码如下: 小结: python3.6 requests && ...
- Docker Toolbox安装
公司最近搭建docker环境,其中会遇到一些问题,在这里记录一下. 先来了解一下docker 一.基本概念 1.Docker中基本概念镜像(Image) 提到镜像,有对操作系统有一定认知的都知道,镜像 ...
- go 学习之路(二)
一.文件名 关键字 标识符 所有go源码都以.go结尾 标识符以字母或下划线开头,大小写敏感 a.boy b.Boy c.a+b d.0boy e._boy f.=_boy g._ 以上变量c.d.f ...
- java高并发系列 - 第21天:java中的CAS操作,java并发的基石
这是java高并发系列第21篇文章. 本文主要内容 从网站计数器实现中一步步引出CAS操作 介绍java中的CAS及CAS可能存在的问题 悲观锁和乐观锁的一些介绍及数据库乐观锁的一个常见示例 使用ja ...