zoukankan      html  css  js  c++  java
  • 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());
            }
        }
        
    }
  • 相关阅读:
    通过HttpListener实现简单的Http服务
    WCF心跳判断服务端及客户端是否掉线并实现重连接
    NHibernate初学六之关联多对多关系
    NHibernate初学五之关联一对多关系
    EXTJS 4.2 资料 跨域的问题
    EXTJS 4.2 资料 控件之Grid 那些事
    EXTJS 3.0 资料 控件之 GridPanel属性与方法大全
    EXTJS 3.0 资料 控件之 Toolbar 两行的用法
    EXTJS 3.0 资料 控件之 combo 用法
    EXTJS 4.2 资料 控件之 Store 用法
  • 原文地址:https://www.cnblogs.com/arebirth/p/mybatisone.html
Copyright © 2011-2022 走看看