博文发布出发点:

  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,返回不同实体的集合对象的更多相关文章

  1. MyBatis3_[tp-26-27]_映射文件_select_返回List_记录封装Map:返回单个元素的Map或者整体Map集合

    笔记要点出错分析与总结工程组织 1.定义接口 public interface EmployeeMapper { //多条记录封装到一个map中: Map<Integer,Employee> ...

  2. spring boot加mybatis使用Map返回时,当值为空时属性也会没有(转)

    使用spring boot加mybatis时,设置Map返回,当值为空时属性也会没有,就会报错 在application.properties中加入下面配置,将会解决这个问题.   #当查询数据为空时 ...

  3. 使用MyBatis时接收值和返回值选择Map类型或者实体类型

    MyBatis作为现近JavaEE企业级项目开发中常用的持久层框架之一,以其简洁高效的ORM映射和高度的SQL的自由性被广大开发人员认可.Mybatis在接收系统传来的参数和返回的参数时主要可以有Ma ...

  4. 【mybatis】mybatis查询 结果 用map接收,无实体接收 + 关联子表 一并返回主子表的结果

    如果后台程序没有实体对应mysql的数据表. 而mybatis想要查询mysql这个数据表的数据,返回给应用程序. 应用程序该如何接收? =============================== ...

  5. Entity Framework 6 Recipes 2nd Edition(10-1)译->非Code Frist方式返回一个实体集合

    存储过程 存储过程一直存在于任何一种关系型数据库中,如微软的SQL Server.存储过程是包含在数据库中的一些代码,通常为数据执行一些操作,它能为数据密集型计算提高性能,也能执行一些为业务逻辑. 当 ...

  6. JSon_零基础_003_将Map集合对象转换为JSon格式的对象字符串,返回给界面

    将Map集合对象转换为JSon格式的对象字符串,返回给界面 需导入的jar包: 编写servlet: package com.west.webcourse.servlet; import java.i ...

  7. Java工具类 通过ResultSet对象返回对应的实体List集合

    自从学了JDBC用多了像一下这种代码: List<xxx> list = new Array<xxx>(); if(rs.next()){ xxx x = new xxx(); ...

  8. (转)Mybatis insert后返回主键给实体对象(Mysql数据库)

    <insert id="insert" parameterType="com.zqgame.game.website.models.Team"> & ...

  9. mybatis设置Map空值返回

    mybatis时,设置Map返回,当值为空时属性也会没有 在application.properties中加入下面配置,将会解决这个问题. #当查询数据为空时字段返回为null,不加这个查询数据为空时 ...

随机推荐

  1. golang从context源码领悟接口的设计

    注:写帖子时go的版本是1.12.7 go语言中实现一个interface不用像其他语言一样需要显示的声明实现接口.go语言只要实现了某interface的方法就可以做类型转换.go语言没有继承的概念 ...

  2. Jquery第一次考核

    1. 什么是JS JavaScript 缩写.一种计算机脚本语言 JavaScript是一种动态.弱类型.基于原型的语言,通过浏览器可以直接执行 2. JS三大组成部件 ECMAScript DOM ...

  3. SSM-员工管理系统Demo---带分页和校验(含源码)

    页面展示: 前端JSP: <%@ page language="java" contentType="text/html; charset=UTF-8" ...

  4. Vue 报错 listen EADDRINUSE :::8080

    今天在重启vue项目的时候,发现报了错, listen EADDRINUSE :::8080错误提示 原因:因为另一个项目占用了8080端口,我直接在命令行npm run dev第二个项目,就给出了这 ...

  5. 从零开始react实战:云书签-1 react环境搭建

    总览篇:react 实战之云书签 本篇是实战系列的第一篇,主要是搭建 react 开发环境,在create-react-app的基础上加上如下功能: antd 组件库按需引入 ,支持主题定制 支持 l ...

  6. 【iOS】Signing for "project_name" requires a development team. Select a development team in the project editor

    Xcode 8.3.2 运行 GitHub 上下载的代码时报了这个错. 解决方法: 单击工程名 --> Signing --> Team --> 选择对应的Account(如果没有A ...

  7. 【Java】Map

    今天用到了键-值对,于是想起了 Java 的 Map,由于之前并不很熟悉,就看了下源码,如下: /* * Copyright (c) 1997, 2006, Oracle and/or its aff ...

  8. java在src/test/resourse下读取properties文件

    package com.jiepu; import java.io.File; import java.net.URISyntaxException; import java.util.Map; im ...

  9. 夯实Java基础(十四)——Java8新的日期处理类

    1.前言 Java8之前处理日期一直是Java程序员比较头疼的问题,从Java 8之后,Java里面添加了许多的新特性,其中一个最常见也是最实用的便是日期处理的类——LocalDate.LocalDa ...

  10. 【Java例题】4.4使用牛顿迭代法求方程的解

    4. 使用牛顿迭代法求方程的解:x^3-2x-5=0区间为[2,3]这里的"^"表示乘方. package chapter4; public class demo4 { publi ...