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

2014-11-23 23:24:33 · 作者: · 浏览: 5
MyBatis映射文件的resultMap如何做表关联
MyBatis的核心是其映射文件,SqlMap文件,里面配置了项目中用到了什么SQL语句,和 数据库相关的逻辑都在这个映射文件里.顾名思义,映射文件就是对 Java对象和SQL的映射.这里简单介绍一下映射文件中resultMap的用法:resultMap – 它描述如何将结果集映射到Java对象.
resultMap属性:type为java实体类;id为此resultMap的标识:
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 itemList;
....
public class MybatisOrderItem {
private MybatisOrder order;
...
[html
public class MybatisOrder {
....
private Mybatiscustomer customer;
private List itemList;
....
public class MybatisOrderItem {
private MybatisOrder order;
...
对应的mapper文件为:
MybatiscustomerMapper.xml:
[html]
select="com.test.mybatis.mapper.MybatiscustomerMapper.getCustomerByID"/>
select="com.test.mybatis.mapper.MybatisOrderItemMapper.selectItemsByOrderID"/>
[html]
select="com.test.mybatis.mapper.MybatiscustomerMapper.getCustomerByID"/>
select="com.test.mybatis.mapper.MybatisOrderItemMapper.selectItemsByOrderID"/>
MybatisOrderItemMapper.xml:
[html]
select="com.test.mybatis.mapper.MybatisOrderMapper.getOrderByID"/>
[html]
select="com.test.mybatis.mapper.MybatisOrderMapper.getOrderByID"/>
MybatiscustomerMapper.xml:因为不和别的表做关联,只有简单的id,result配置.
[html]
[html]
MybatisOrderMapper的getOrderByID会先从MYBATISORDER取数据,然后根据CUSTOMERID调用MybatiscustomerMapper.getCustomerByID,然后根据ORDERID调用MybatisOrderItemMapper.selectItemsByOrderID,对应每一条MYBATISORDER数据,都会分别访问另外两个表各一次.
通过将association和collection的select功能替换为resultMap,再用join方式的SQL可以用一条SQL语句将关联数据取出来:
[html]
resultMap="com.test.mybatis.mapper.MybatiscustomerMapper.BaseResultMap"/>
ofType="com.test.mybatis.vo.MybatisOrderItem"
resultMap="com.test.mybatis.mapper.MybatisOrderItemMapper.BaseResultMap"/>