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对象文件为,
- 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语句将关联数据取出来:
- <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>
相关推荐
接下来,在MyBatis的映射文件中定义了`resultMap`元素,用于描述数据库结果集与Java对象之间的映射关系: ```xml <!--dpsMatchPlanDetailResultVOMap列表--> <resultMap id="DetailResultVOMap" type=...
"关联映射"是MyBatis中的一个重要概念,用于处理数据库中表之间的关联关系,比如一对一、一对多、多对一和多对多的关系。下面将详细介绍MyBatis的关联映射以及如何在代码中实现。 关联映射是MyBatis通过XML配置文件...
在MyBatis中,ResultMap是核心配置之一,它用于定义如何将数据库查询结果映射到Java对象。ResultMap的概念是为了提高数据映射的灵活性和效率,避免了简单类型的数据映射过程中的冗余代码。在`mybatis-demo4-...
MyBatis ResultMap 详解 MyBatis 中的 ResultMap 是一个强大的元素,它描述如何从...ResultMap 是 MyBatis 中一个非常强大的元素,它可以帮助开发者快速地将结果集映射到 Java 实体类中,从而提高开发效率和代码质量。
ResultMap是MyBatis映射语句中用于定义结果集映射的元素。它允许我们精确控制如何将数据库查询的结果行映射到Java对象。默认情况下,MyBatis会尝试根据结果列名与Java对象的属性名进行匹配,但这种方式并不总是可行...
其中,`namespace`属性是映射器接口的全限定类名,用于关联映射器接口和XML文件。 2. **增删改查操作** - **Insert**:插入数据,使用`<insert>`标签定义SQL语句,并通过`id`属性指定唯一的操作标识。 - **...
- 在对应的UserMapper.xml文件中,编写SQL查询语句,并进行关联映射配置。这里会使用`<resultMap>`定义映射规则,`<association>`标签来处理一对多关系。 ```xml <resultMap id="userWithOrdersMap" type="User...
ResultMap的设计旨在提高灵活性,解决对象与数据库表之间的映射问题,尤其是在面对一对多、多对一或自关联等复杂关系时。 ResultMap 的工作原理是通过定义字段到对象属性的映射规则,使得Mybatis能够将SQL查询的...
- 在Mapper XML文件中编写SQL查询语句,并使用`resultMap`来配置关联映射规则。 ##### 2. 自关联查询 - **概念**: 指的是同一类对象之间的关联查询,如菜单项与其子菜单项之间的关联。 - **实现**: - 在实体类中...
Springboot 中 MyBatis 表关联映射关系(一对一) 在 Springboot 中,MyBatis 提供了强大的表关联映射关系机制,可以实现一对一、多对一、多对多等各种关联关系。在本文中,我们将详细介绍 Springboot 中 MyBatis ...
此外,Mybatis还支持ResultMap,允许自定义复杂的结果映射,处理一对一、一对多、多对多等复杂的关联关系。 总的来说,这个资源包提供了一个完整的Mybatis应用示例,涵盖了从实体类到数据库操作的整个流程,对于...
ResultMap是MyBatis的核心组件之一,用于解决对象关系映射的复杂性,比如一对一、一对多、多对多等关联关系的处理。 首先,ResultMap的概念。ResultMap是MyBatis中定义的一种映射规则,用于解析查询结果并将其映射...
MyBatis使用`<resultMap>`元素的`<association>`子元素来处理一对一的关联映射。配置`<association>`时,可以设置`property`属性来指定映射到实体类的对象属性,`column`用于指定数据库中的字段,`javaType`定义对象...
1. **外键关联**:在从表中有一个字段指向主表的主键,我们可以在主表的映射文件中添加`<association>`标签,指定关联的子类和关联的字段。 2. **主键关联**:主表的主键同时也是从表的一个字段,此时在从表的映射...
2. 映射文件与 XML 映射元素:Mybatis 的映射文件通常以 `.xml` 结尾,如 `mybatis3.xml`,它包含了 SQL 语句和结果集映射。在映射文件中,`<select>`, `<insert>`, `<update>`, `<delete>` 元素分别对应 SQL 的查询...
在本篇关于MyBatis框架的学习中,我们将深入探讨一对一关联映射和一对多关联映射的概念、配置以及在实际开发中的应用。MyBatis是一个优秀的持久层框架,它允许开发者将SQL语句直接写在XML配置文件或者注解中,从而...
1. **配置映射文件**:在MyBatis的映射文件中,你需要定义两个实体类(例如,Student和Course)的映射,以及它们之间的关联映射。关联映射通常通过`<association>`或`<collection>`标签来实现。 2. **关联查询**:...
在本高级映射实例中,我们将深入探讨如何使用XML方式编写Mapper文件,以及如何利用关联嵌套和鉴别器(Discriminator)功能。 首先,让我们了解MyBatis中的Mapper文件。Mapper文件是MyBatis的核心组件之一,它定义了...
【MyBatis框架关联映射查询与缓存配置】 MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。在Java开发中,MyBatis简化了DAO(Data Access Object)层的开发工作,使得开发者能够更专注于...