赞
踩
mybatis核心配置文件中settings中配置,指定 MyBatis 应如何自动映射列到字段或属性。 NONE 表示取消自动映射;PARTIAL 只会自动映射没有定义嵌套结果集映射的结果集。 FULL 会自动映射任意复杂的结果集(无论是否嵌套)。默认是partial,这是一种全局设置
在resultMap或者association,collections中使用,是一个局部开关,开启后会自动设置嵌套查询中的属性,局部开关优先级大于全部开关,当全部开关开启FULL映射时,局部开关关闭,这时候仍然不会进行映射。
- <select id="findCustomerByIdResultMap" parameterType="int" resultMap="CustomerResultMap">
- SELECT
- id,
- username,
- jobs,
- phone,
- idCard.cardId as cardId,
- idcard.address as address
- FROM
- t_customer ,
- idcard
- WHERE t_customer.cardId=idcard.cardId and t_customer.id=#{id}
- </select>
-
- <resultMap type="cn.edu.huel.po.Customer" id="CustomerResultMap">
- <id column="id" property="id"/>
- <result column="username" property="username"/>
- <result column="jobs" property="jobs"/>
- <result column="phone" property="phone"/>
- <association property="card" javaType="cn.edu.huel.po.IdCard">
- <id column="cardId" property="cardId"/>
- <result column="address" property="address"/>
- </association>
- DEBUG [main] - ==> Preparing: SELECT id, username, jobs, phone, idCard.cardId as cardId, idcard.address as address FROM t_customer , idcard WHERE t_customer.cardId=idcard.cardId and t_customer.id=?
- DEBUG [main] - ==> Parameters: 2(Integer)
- DEBUG [main] - <== Total: 1
- Customer [id=2, username=李四, jobs=采购, phone=222, card=IdCard [cardId=2222, address=安阳]]
- <select id="findCustomerByIdResultMap" parameterType="int" resultMap="CustomerResultMap">
- SELECT
- id,
- username,
- jobs,
- phone,
- idCard.cardId as cardId,
- idcard.address as address
- FROM
- t_customer ,
- idcard
- WHERE t_customer.cardId=idcard.cardId and t_customer.id=#{id}
- </select>
-
- <resultMap type="cn.edu.huel.po.Customer" id="CustomerResultMap">
- <id column="id" property="id"/>
- <association property="card" javaType="cn.edu.huel.po.IdCard">
- <id column="cardId" property="cardId"/>
- </association>
-
- </resultMap>
- DEBUG [main] - ==> Preparing: SELECT id, username, jobs, phone, idCard.cardId as cardId, idcard.address as address FROM t_customer , idcard WHERE t_customer.cardId=idcard.cardId and t_customer.id=?
- DEBUG [main] - ==> Parameters: 2(Integer)
- DEBUG [main] - <== Total: 1
- Customer [id=2, username=null, jobs=null, phone=null, card=IdCard [cardId=2222, address=null]]
- <select id="findCustomerByIdResultMap" parameterType="int" resultMap="CustomerResultMap">
- SELECT
- id,
- username,
- jobs,
- phone,
- idCard.cardId as cardId,
- idcard.address as address
- FROM
- t_customer ,
- idcard
- WHERE t_customer.cardId=idcard.cardId and t_customer.id=#{id}
- </select>
-
- <resultMap type="cn.edu.huel.po.Customer" autoMapping="true" id="CustomerResultMap">
- <id column="id" property="id"/>
- <association property="card" autoMapping="true" javaType="cn.edu.huel.po.IdCard">
- <id column="cardId" property="cardId"/>
- </association>
- </resultMap>
- DEBUG [main] - ==> Preparing: SELECT id, username, jobs, phone, idCard.cardId as cardId, idcard.address as address FROM t_customer , idcard WHERE t_customer.cardId=idcard.cardId and t_customer.id=?
- DEBUG [main] - ==> Parameters: 2(Integer)
- DEBUG [main] - <== Total: 1
- Customer [id=2, username=李四, jobs=采购, phone=222, card=IdCard [cardId=2222, address=安阳]]
autoMappingBehavior是<settings>里面的,是全局总开关。autoMapping是<resultMap>里面的,是局部select语句映射开关。
局部开关优先级大于全局开关。
如上resultMap配置了autoMapping, 那么mybatis会自动把查询出来的name、id、cartid都赋值给customer, 如果autoMappng设为false, 则不会自动映射, 需要你在resultMap中手动配置result
, 它的作用在collection和association标签中作用是一样的。
此外, 配置autoMapping这个属性的优先级高于autoMappingBehavior, 也就是即使你autoMappingBehavior配置为FULL, 但是autoMapping配置为false, 那么依旧不会自动映射。
在嵌套影射中通常会同时配置上columnPrefix属性, 这样的话可以在一定程度上避免因为实体属性名相同导致mybatis无法正确赋值的问题。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。