赞
踩
介绍自动映射之前先看一下手动映射,如下:
- <resultMap id="orderModelMap1" type="com.javacode2018.chat05.demo7.model.OrderModel">
- <id column="id" property="id"/>
- <result column="userId" property="userId" />
- <result column="createTime" property="createTime" />
- <result column="upTime" property="upTime" />
- </resultMap>
-
- <select id="getById1" resultMap="orderModelMap1">
- <![CDATA[
- SELECT
- a.id,
- a.user_id userId,
- a.create_time createTime,
- a.up_time upTime
- FROM
- t_order a
- WHERE
- a.id = #{value}
- ]]>
- </select>
注意上面的resultMap元素中有4行配置,如下:
- <id column="id" property="id"/>
- <result column="userId" property="userId" />
- <result column="createTime" property="createTime" />
- <result column="upTime" property="upTime" />
这4行代码用于配置sql结果的列和OrderModel对象中字段的映射关系。
大家有没有注意到,映射规则中column和property元素的值都是一样,mybatis中支持自动映射配置,当开启自动映射之后,当sql的列名和Model中的字段名称是一样的时候(不区分大小写),mybatis内部会进行自动映射,不需要我们手动去写上面的4行映射规则。
下面我们将上面的示例改成自动映射的方式,如下:
- <resultMap id="orderModelMap2" type="com.javacode2018.chat05.demo7.model.OrderModel" autoMapping="true">
- </resultMap>
-
- <select id="getById2" resultMap="orderModelMap2">
- <![CDATA[
- SELECT
- a.id,
- a.user_id userId,
- a.create_time createTime,
- a.up_time upTime
- FROM
- t_order a
- WHERE
- a.id = #{value}
- ]]>
- </select>
注意上面的resultMap中的autoMapping属性,是否开启自动映射,我们设置为true,这样mybatis会自动按照列名和Model中同名的字段进行映射赋值。
上面两个配置最后查询结果是一样的,都会将查询结果对应的4个字段的值自动赋值给OrderModel中同名的属性。
mybatis中自动映射主要有2种配置,一种是全局的配置,对应用中所有的resultMap起效,这个是在mybatis配置文件中进行设置的;另外一种是通过resultMap
的autoMapping
属性进行配置。
mybatis判断某个resultMap是否开启自动映射配置的时候,会先查找自身的autoMapping
属性,如果这个属性设置值了,就直接用这个属性的值,如果resultMap元素的autoMapping
属性没有配置,则走全局配置的自动映射规则。
下面我们来详解介绍一下这款的内容。
在mybatis全局配置文件中加入下面配置:
- <settings>
- <setting name="autoMappingBehavior" value="自动映射规则"/>
- </settings>
autoMappingBehavior值来源于枚举:org.apache.ibatis.session.AutoMappingBehavior
,源码:
- public enum AutoMappingBehavior {
-
- /**
- * Disables auto-mapping.
- */
- NONE,
-
- /**
- * Will only auto-map results with no nested result mappings defined inside.
- */
- PARTIAL,
-
- /**
- * Will auto-map result mappings of any complexity (containing nested or otherwise).
- */
- FULL
- }
NONE:关闭全局映射开关
PARTIAL:对除在内部定义了嵌套结果映射(也就是连接的属性)以外的属性进行映射,这个也是默认值。
FULL:自动映射所有属性。
小提示:settings元素中有很多配置,这些配置最后都会被解析成
org.apache.ibatis.session.Configuration
的属性,源码位于org.apache.ibatis.builder.xml.XMLConfigBuilder#settingsElement
方法中。
下面我们来演示一下autoMappingBehavior
每种配置的效果。
NONE
mybatis-config.xml加入配置
- <settings>
- <!-- 关闭自动映射开关 -->
- <setting name="autoMappingBehavior" value="NONE"/>
- </settings>
OrderMapper.xml
- <resultMap id="orderModelMap4" type="com.javacode2018.chat05.demo7.model.OrderModel">
- </resultMap>
-
- <select id="getById4" resultMap="orderModelMap4">
- <![CDATA[
- SELECT
- a.id,
- a
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。