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,不加这个查询数据为空时 ...
随机推荐
- 第三章 jsp数据交互(二)
Application:当前服务器(可以包含多个会话):当服务器启动后就会创建一个application对象,被所有用户共享page.request.session.application四个作用域对 ...
- IO流3
public class Test1 { public static void main(String[] args) throws Exception { //第二个参数,表示是否向末尾追加,tru ...
- PHP与ECMAScript_7_流程控制
PHP ECMAScript 顺序结构 默认从上到下依次执行 默认从上到下依次执行 分支结构 if / switch if / switch 循环结构 for / while / do-w ...
- 小白学python-day08-文件及其操作、字符串字典类型转换
今天是day08,以下是学习总结: 但行努力,莫问前程. ----------------------------------------------------------------------- ...
- WIN10安装VC6.0无法使用的解决办法
WIN10安装VC6.0无法使用的解决办法 VC6.0确实已经太老了 VC6.0实在是很久以前的开发工具了,现在的win10已经对该软件不兼容,但是为了能使抱着怀旧情节的初学者们能像教科书或老前辈们一 ...
- QQ第三方登录逻辑(微信,微博等同)
实现过程:生成qq扫码登录连接(需要注册,链接里有几个参数需要按照开发文档的格式进行拼接,要后端完成),点击QQ登录按钮,前端Vue发送axios请求,后端收到请求把生成的QQ登录链接发送给vue,v ...
- 深入理解java内存模型--读书笔记
深入理解java内存模型 java内存模型的抽象 java线程之间的通信由java内存模型(JMM)控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见 从抽象的角度来看,JMM决定了线程和主 ...
- dubbo文档笔记
配置覆盖关系 以 timeout 为例,显示了配置的查找顺序,其它 retries, loadbalance, actives 等类似: 方法级优先,接口级次之,全局配置再次之. 如果级别一样,则消费 ...
- luogu2279_[HNOI2003]消防局的设立 贪心
传送门 不需要树形dp 关于深度排序 当前节点到最近的消防局(f[u])>2时要建新的与u的上面(v)的上面(w) 同时w的上面和上面的上面也要更新f值 #include <bits/st ...
- spark 入门教程合集
看到一篇不错的 spark 入门教程的合集,在此记录一下 http://www.cnblogs.com/shishanyuan/p/4699644.html