MyBatis映射文件的resultMap如何做表关联
来源:互联网 发布:2016下半年的网络综艺 编辑:程序博客网 时间:2024/04/30 09:40
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(双向关联).对应的mapper文件为:
MybatiscustomerMapper.xml:MybatisOrderItemMapper.xml:MybatiscustomerMapper.xml:因为不和别的表做关联,只有简单的id,result配置.MybatisOrderMapper的getOrderByID会先从MYBATISORDER取数据,然后根据CUSTOMERID调用MybatiscustomerMapper.getCustomerByID,然后根据ORDERID调用MybatisOrderItemMapper.selectItemsByOrderID,对应每一条MYBATISORDER数据,都会分别访问另外两个表各一次.
通过将association和collection的select功能替换为resultMap,再用join方式的SQL可以用一条SQL语句将关联数据取出来:
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;
- ...
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>
- <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>
- <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>
通过将association和collection的select功能替换为resultMap,再用join方式的SQL可以用一条SQL语句将关联数据取出来:
- <resultMap id="AssociationResultMap" 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"
- resultMap="com.test.mybatis.mapper.MybatiscustomerMapper.BaseResultMap"/>
- <collection property="itemList" column="ORDERID" javaType="ArrayList"
- ofType="com.test.mybatis.vo.MybatisOrderItem"
- resultMap="com.test.mybatis.mapper.MybatisOrderItemMapper.BaseResultMap"/>
- </resultMap>
- <select id="getOrderAssociation" parameterType="String" resultMap="AssociationResultMap">
- SELECT *
- FROM mybatisOrder ord LEFT JOIN mybatiscustomer customer ON ord.customerId = customer.ID
- LEFT JOIN mybatisOrderItem item ON ord.orderid = item.orderid
- WHERE ord.orderid = #{id}
- </select>
0 0
- MyBatis映射文件的resultMap如何做表关联
- MyBatis映射文件的resultMap如何做表关联
- MyBatis映射文件的resultMap如何做表关联
- MyBatis映射文件的resultMap如何做表关联
- MyBatis映射文件的resultMap如何做表关联
- MyBatis映射文件的resultMap一对一一对多关联
- mybatis中resultMap的使用 (关联和映射)
- 【Mybatis】表关联和resultMap的使用
- 【Mybatis】表关联和resultMap的使用
- mybatis的mapper.xml文件resultMap的关联association用法
- mybatis中映射文件的resultType和resultMap
- mybatis中映射文件的resultType和resultMap
- mybatis-SQL语句映射文件(1)resultMap
- MyBatis关联查询,表字段相同,resultMap映射问题的解决办法
- MyBatis关联查询,表字段相同,resultMap映射问题的解决办法
- MyBatis关联查询,表字段相同,resultMap映射问题的解决办法
- Mybatis-04-结果集映射resultMap/动态SQL/关联查询
- mybatis关联查询的的resultMap 用法
- Fitnesse使用系列六
- MKNetworkKit与AFNetworking和ASIHTTPRequest,MKNetworkKit用法与介绍
- 传说中的CSS~让我来告诉你吧~Cascading Style Sheets
- leetcode-Reverse Words in a String
- Android 利用seekbar结合AudioManager调节系统音量
- MyBatis映射文件的resultMap如何做表关联
- FOJ2166 inversion
- Ubuntu 14.04 创建无线接入点供移动设备连接上网
- C++基础之引用(常人有误区)
- 关于lua coroutine
- php删除数组指定元素
- 关于Highcharts图表组件动态修改属性的方法(API)总结之Axis
- qq 能上但是打不开网页
- Java中对日期的注意点