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

 我来答
苹邈9069
2012-12-03 · 超过53用户采纳过TA的回答
知道答主
回答量:117
采纳率:0%
帮助的人:121万
展开全部
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对象文件为,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语句将关联数据取出来:
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式