当前位置:编程学习 > C/C++ >>

MyBatis映射文件的resultMap如何做表关联

MyBatis映射文件的resultMap如何做表关联
MyBatis的核心是其映射文件,SqlMap文件,里面配置了项目中用到了什么SQL语句,和数据库相关的逻辑都在这个映射文件里.顾名思义,映射文件就是对Java对象和SQL的映射.这里简单介绍一下映射文件中resultMap的用法:resultMap – 它描述如何将结果集映射到Java对象.
resultMap属性:type为java实体类;id为此resultMap的标识:<resultMap id="BaseResultMap" type="com.test.mybatis.vo.MybatisOrder" >
resultMap的子元素:
id – 一般对应到数据库中该行的ID,设置此项可以提高Mybatis性能.
result – 映射到JavaBean 的某个"简单类型"属性,String,int等.
association – 映射到JavaBean 的某个"复杂类型"属性,其他JavaBean类.
collection –复杂类型集合,a collection of complex types
比如现在有一个Order表,Customer表和OrderItem表,它们之间的关系为:一个Order关联到一个Customer(单向关联),一个Order有多个OrderItem(双向关联).
对应的Java对象文件为,
 
[html] 
public class MybatisOrder {  
    ....  
    private Mybatiscustomer customer;  
    private List<MybatisOrderItem> itemList;  
    ....  
public class MybatisOrderItem {  
    private MybatisOrder order;  
    ...  
[html 
public class MybatisOrder {  
    ....  
    private Mybatiscustomer customer;  
    private List<MybatisOrderItem> itemList;  
    ....  
public class MybatisOrderItem {  
    private MybatisOrder order;  
    ...  
对应的mapper文件为:
MybatiscustomerMapper.xml:
[html]  
<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>  
[html]  
<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:
[html] 
 <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>  
[html]  
 <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配置.
[html] 
<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" > &
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,