计算机系统应用教程网站

网站首页 > 技术文章 正文

mybatis关联查询有两种

btikc 2024-09-18 08:36:28 技术文章 24 ℃ 0 评论

关联查询有两种

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

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

<resultMap id="BaseResultMapVo" type="com.esteel.account.beanVo.TbCusFirmChgVo" >

<!--

WARNING - @mbggenerated

-->

<id column="CUSTOMER_KEY" property="customerKey" jdbcType="DECIMAL" />

<result column="MARKET_KEY" property="marketKey" jdbcType="DECIMAL" />

<result column="IS_REC_SMS" property="isRecSms" jdbcType="CHAR" />

<result column="KF_CUSTOMER_KEY" property="kfCustomerKey" jdbcType="DECIMAL" />

<result column="SET_USER_NUM" property="setUserNum" jdbcType="DECIMAL" />

<association property="tbCusFirmChg" column="KF_CUSTOMER_KEY" javaType="com.esteel.account.bean.TbCusFirmChg" select="getCue">

</association>

</resultMap>

<select id="getCue" resultMap="BaseResultMap">

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

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

<select id="getTbCusFirmChgAry" parameterType="map" resultMap="BaseResultMapVo">

select C.* from TB_CUS_FIRM_CHG C

where 1=1

</select>

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

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

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

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

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

一对多,多对多都如此

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper

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

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

<mapper namespace="com.kerwin.mybatis.pojo.Person">

<resultMap type="com.kerwin.mybatis.pojo.Person" id="personreSultMap">

<id column="p_id" property="id"/>

<result column="name" property="name"/>

<collection property="orderList" ofType="com.kerwin.mybatis.pojo.Orders" column="pid">

<id column="o_id" property="id"/>

<result column="price" property="price"/>

</collection>

</resultMap>

<select id="selectPersonFetchOrder" parameterType="int" resultMap="personreSultMap" >

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

</select>

</mapper>

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

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

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

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

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表