mybatis 临时表_mybatis如何返回多个结果集

开发的时候遇到如下问题:将一个存储过程的所有结果集收集起来,或者多段查询复用一个临时表,那么如何用mybatis的方式收集呢?

我们可以用如下代码解决:(注:下面是用的sqlserver的写法)

   <select id="findAll" resultMap="aa,bb" >
        SELECT
        line,
        COUNT(DISTINCT BoardSN+imulti) alls
        INTO #2
        FROM
        board_new_Summary
        WHERE
        fdate &gt;'2019-07-02 08:00:00'
        GROUP BY
        line


        select * from #2;

        select * from #2 ORDER BY alls;

    </select>

    <resultMap id="aa" type="com.sqlunit.entity.Board">
    <result column="line" property="line"></result>
     <result column="alls" property="alls"></result>
    </resultMap>

    <resultMap id="bb" type="com.sqlunit.entity.Board">
     <result column="line" property="line"></result>
     <result column="alls" property="alls"></result>
    </resultMap>

可以看出mybatis的resultMap其实也可以放一个数组或者list结果集,那么mapper层如何取接收呢?

当然是用泛型接收,最外层的list表示两个resultMap(即查出来的两张表),里面的一层list才是表示每张表的所有记录。

      List<List<?>> findAll();

那么service层如何取出里面的所有记录做操作呢?参考如下代码:

 List<List<?>> all = aoiBoardMapper.findAll();

        //获取第一个结果集,强转类型
        List<Board> list = (List<Board>) all.get(0);
        for (Board board : list) {
           //逻辑操作
        }
        System.out.println("---------------");
       //获取第二个结果集
        List<Board> list = (List<Board>) all.get(1);
       for (Board board : list) {
           //逻辑操作
        }

有人会有疑问,如果查出来的结果集很多,还必须封装成不同的实体类,那不得写代码写到累死嘛!所以你们的resultMap甚至可以直接用map类型去接收,像这样:

    <resultMap id="aa" type="java.util.Map">

    </resultMap>

    <resultMap id="bb" type="java.util.Map">

    </resultMap>

是不是方便省事,也不用那么麻烦的写那么多对应关系了。在service层中直接就将实体类改为map类型就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值