java ibatis 一对多查询

时间:2021-06-08 11:55:26


一对一查询语句ID: query 是主查询 映射结构map ID 是 hashDynamic,queryUser 子查询  映射结构map ID 是 hashUser

一对多查询语句 ID:   query2 是主查询  映射结构map ID 是 hashDynamic2,queryUser2 子查询  映射结构map ID 是 hashUser

父查询和子查询都使用map来接收查询参数,如果是一对一的查询接收是OK的


但是一对多的查询,子查询使用map接收参数,会报错子查询查询有多条数据。所以我只能自己写 一个对象使用List<Map>来接收子查询多条数据



虽然知道,查询接收时使用map接收,其实是将map作为一个java对象来接收查询,而在dao方法中是使用queryForMap方式接收,

这个方法会把多条结果作为 list<map> 方式来接收。

我就是不想去创建一个 java对象用来接收 查询数据,在一对多的情况下,能不能像只引入java.util.map 的形式来接收子查询。

虽然我认为是没有的。。但是还是想问问,看有没有偏门的方法能处理,或者比我处理的多条的方式更简单。求大神。。。


<sqlMap namespace="ehr.comment">

<!-- <typeAlias alias="comment" type="com.ehr.dto.Comment"/> -->
<typeAlias alias="hashMap" type="java.util.HashMap"/>
<typeAlias alias="dynamic" type="com.ehr.model.Dynamic"/>

<resultMap class="hashMap" id="hashDynamic">  
   <result property="id" column="id"/>  
   <result property="user_id" column="userid"/>  
   <result property="user" column="userid" select="ehr.comment.queryUser"/>
    </resultMap>
    <resultMap class="hashMap" id="hashUser">  
        <result property="userId" column="id"/>
        <result property="userName" column="username"/>

    </resultMap>

<!-- 一对一查询  start   查询全部使用map接收查询参数-->

    <select id="queryUser" parameterClass="java.lang.Integer" resultMap="hashUser">  
    select id,username from t_user where id = #value#  
</select>  

<select id="query" parameterClass="java.util.HashMap" resultMap="hashDynamic">
   select t_d.id,t_d.userid from t_dynamic t_d limit 10
</select>
<!-- 一对一查询  end -->

<!-- 一对查询  start  我用map接收参数查询多条会报错说子查询多条数据,所有无奈,我只能自己写个java对象,对象中放一个list<map> 来接收子查询多条数据 -->
<resultMap class="dynamic" id="hashDynamic2">  
   <result property="id" column="id"/>  
   <result property="userId" column="userid"/>  
   <result property="title" column="title"/>  
   <result property="userMap" column="{userId_1=userid,userId_2=title}" select="ehr.comment.queryUser2"/>
    </resultMap>
    <select id="queryUser2" parameterClass="hashMap" resultMap="hashUser">  
    select id,username from t_user where id = #userId_1# or id = #userId_2#   <!--因为数据主键只能存在一条,所以我传两个参数,或者方式查询2条数据 -->
</select>  

<select id="query2" parameterClass="hashMap" resultMap="hashDynamic2">
   select t_d.id,t_d.userid,title from t_dynamic t_d limit 10

</select>

<!-- 一对查询  end-->

</sqlMap>



public class Dynamic {
private Integer id;
private Integer userId;
private String title;
private List<Map<String, Object>> userMap;

封装get、set省略.....

}