首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

MyBatis映射文件的resultMap怎么做表关联

2013-10-01 
MyBatis映射文件的resultMap如何做表关联public class MybatisOrder {....private Mybatiscustomer custom

MyBatis映射文件的resultMap如何做表关联
public class MybatisOrder {.... private Mybatiscustomer customer; private List<MybatisOrderItem> itemList;....public class MybatisOrderItem { private MybatisOrder order;...对应的mapper文件为:
MybatiscustomerMapper.xml:<resultMap id="AssociationSelectMap" type="com.test.mybatis.vo.MybatisOrder" ><id column="ORDERID" property="orderid" jdbcType="DECIMAL" /><result column="ORDERTYPE" property="ordertype" jdbcType="VARCHAR" /><result column="ORDERDATE" property="orderdate" jdbcType="DATE" /><association property="customer" column="CUSTOMERID" select="com.test.mybatis.mapper.MybatiscustomerMapper.getCustomerByID"/> <collection property="itemList" column="ORDERID" javaType="ArrayList" ofType="MybatisOrderItem" select="com.test.mybatis.mapper.MybatisOrderItemMapper.selectItemsByOrderID"/></resultMap><select id="getOrderByID" resultMap="AssociationSelectMap" parameterType="java.math.BigDecimal" >select *from MYBATISORDER where ORDERID = #{orderid,jdbcType=DECIMAL}</select>MybatisOrderItemMapper.xml: <resultMap id="AssociationMap" type="com.test.mybatis.vo.MybatisOrderItem" > <id column="ITEMID" property="itemid" jdbcType="DECIMAL" /> <result column="ITEMTYPE" property="itemtype" jdbcType="VARCHAR" /> <result column="ITEMQUANTITY" property="itemquantity" jdbcType="VARCHAR" /> <result column="ITEMCOST" property="itemcost" jdbcType="VARCHAR" /> <association property="order" column="ORDERID" select="com.test.mybatis.mapper.MybatisOrderMapper.getOrderByID"/> </resultMap> <select id="selectItemByID" resultMap="AssociationMap" parameterType="java.math.BigDecimal" > select *from MYBATISORDERITEMwhere ITEMID = #{itemid,jdbcType=DECIMAL} </select>MybatiscustomerMapper.xml:因为不和别的表做关联,只有简单的id,result配置. <resultMap id="BaseResultMap" type="com.test.mybatis.vo.Mybatiscustomer" > <id column="ID" property="id" jdbcType="DECIMAL" /> <result column="NAME" property="name" jdbcType="VARCHAR" /> </resultMap> <select id="getCustomerByID" resultMap="BaseResultMap" parameterType="java.math.BigDecimal" > select *from MYBATISCUSTOMER where ID = #{id,jdbcType=DECIMAL} </select>

MybatisOrderMapper的getOrderByID会先从MYBATISORDER取数据,然后根据CUSTOMERID调用MybatiscustomerMapper.getCustomerByID,然后根据ORDERID调用MybatisOrderItemMapper.selectItemsByOrderID,对应每一条MYBATISORDER数据,都会分别访问另外两个表各一次.
通过将association和collection的select功能替换为resultMap,再用join方式的SQL可以用一条SQL语句将关联数据取出来:

[html] view plaincopyprint?
  1.  <resultMap id="AssociationResultMap" type="com.test.mybatis.vo.MybatisOrder" >     <id column="ORDERID" property="orderid" jdbcType="DECIMAL" />  
  2.    <result column="ORDERTYPE" property="ordertype" jdbcType="VARCHAR" />     <result column="ORDERDATE" property="orderdate" jdbcType="DATE" />  
  3.   <association property="customer" column="CUSTOMERID"   
  4.     resultMap="com.test.mybatis.mapper.MybatiscustomerMapper.BaseResultMap"/>   <collection property="itemList" column="ORDERID" javaType="ArrayList"   
  5.     ofType="com.test.mybatis.vo.MybatisOrderItem"       resultMap="com.test.mybatis.mapper.MybatisOrderItemMapper.BaseResultMap"/>  
  6.  </resultMap>   <select id="getOrderAssociation" parameterType="String" resultMap="AssociationResultMap">    
  7.     SELECT *          FROM mybatisOrder ord LEFT JOIN mybatiscustomer customer ON ord.customerId = customer.ID   
  8.       LEFT JOIN mybatisOrderItem item ON ord.orderid = item.orderid        WHERE ord.orderid = #{id}  
  9.   </select>   

热点排行