一对一查询语句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省略.....
}