07.25 mybatis关联查询有两种

mybatis关联查询有两种

mybatis关联查询有两种

关联查询有两种

1,元素标签中传入关联条件值,此种方法一般和sql语句的子查询配套(即关联实体的列是用sql结果集表示)

一对一,多对一都是如此用

<resultmap>

<result>

<result>

<result>

<result>

<association>

<select>

select KF.* from TB_CUS_FIRM_CHG KF where KF.CUSTOMER_KEY=#{KF_CUSTOMER_KEY}

//子查询的参数不要指定,直接通过关联压入

<select>

select C.* from TB_CUS_FIRM_CHG C

where 1=1

  1. <collection> property="htAuthorityDTO" ofType="com.sailod.shiro.dto.HtAuthorityDTO" /<collection>
  2. select="selectAuthority" column="{htAuthorityId2 = htAuthorityId ,currentUserId2 = currentUserId}" >

这部分就相当于用一个大sql写的关联

2,直接在大的sql中就把关联体现出来(例如where o.pid=p.p_id)(不用子查询)这种往往和用标签直接写出结果(也可用不带条件的子查询表示结果集(便于懒加载))

注意用这种方式的时候要把主实体和关联的实体一起查出 select p.*,o.*

http://blog.csdn.net/rain097790/article/details/13615291

一对多,多对多都如此

/p>

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper> /<mapper>

<resultmap> /<resultmap>

<result>

<collection> /<collection>

<result>

<select> /<select>

select p.*,o.* from person p,orders o where o.pid=p.p_id and p.p_id=#{id}

注意:两张表中的主键id字段名要唯一,例如不能都写id,不然的话,在一对多查询的时候就会出现:级联出来的订单项只有一条记录。我之前就是将两张表的主键id字段名都写为id,

导致测试结果级联出来的多一直只有一条数据,具体如下:

id和result的唯一不同是id表示的结果将是当比较对象实例时用到的标识属性。

这帮助来改进整体表现,特别是缓存和嵌入结果映射。所以不同数据的id应该唯一区别,不然导致数据结果集只有一条数据。


分享到:


相關文章: