MyBatis resultMap元素详解

MyBatis resultMap元素详解

  • MyBatis resultMap元素详解
        • resultMap元素属性
            • 1. id:映射规则集的唯一标识,可以被select元素的resultMap属性应用
            • 2.type:映射的结果类型,这里指定封装成userList实例
        • resultMap元素包含以下子元素
            • 1. id:指定和数据表主键字段对应的标识属性。设置此项可以提升MyBatis框架的性能,特别是应用缓存和嵌套结果映射的时候。
            • 2.result:指定结果集字段和实体类属性的映射关系。
            • 3.association:映射到JavaBean某个“复杂类型”属性,比如JavaBean类
            • 4.collection:映射到JavaBean某个“复杂类型”属性,比如集合
        • resultMap如何将结果映射到结果集
        • 如何使用association元素嵌套结果映射(一般使用一对一查询)
        • 如何使用collection元素嵌套结果映射(一般使用一对多查询)
      • resultMap的自动映射的三种行为

MyBatis resultMap元素详解

  • resultMap元素属性

    1. id:映射规则集的唯一标识,可以被select元素的resultMap属性应用
    2.type:映射的结果类型,这里指定封装成userList实例
  • resultMap元素包含以下子元素

    1. id:指定和数据表主键字段对应的标识属性。设置此项可以提升MyBatis框架的性能,特别是应用缓存和嵌套结果映射的时候。
    2.result:指定结果集字段和实体类属性的映射关系。
    3.association:映射到JavaBean某个“复杂类型”属性,比如JavaBean类
    4.collection:映射到JavaBean某个“复杂类型”属性,比如集合

resultMap如何将结果映射到结果集

<!--id是唯一的,对应resultMap的唯一标识名称  type是里面返回的类型-->
<resultMap id="userMap" type="User">
    <!--id标签表示表的主键-->
    <!--column表示数据库的列   property表示实体类的属性-->
    <id column="id" property="id"></id>
    <!--如果不是主键列,就用result表示-->
    <result column="roleName" property="userRoleName"></result>
</resultMap>

如何使用association元素嵌套结果映射(一般使用一对一查询)

/**
* 对用户和角色进行联表查询
* @return
*/
List<User> findAllUserAndRole();

<resultMap id="UserAndRole" type="User">
        <id property="id" column="id"></id>
        <result property="username" column="userName"></result>
        <!--association表示一个实体类-->
        <!--association对应User类的属性值,javaType表示属性值的类型-->
        <association property="role" javaType="Role">
            <id property="id" column="roleId"></id>
            <result property="roleName" column="roleName"></result>
        </association>
    </resultMap>
    <select id="findAllUserAndRole" resultMap="UserAndRole">
        select user.*,role.id as roleId,role.roleName from smbms_user user inner 		  join smbms_role role on user.userRole = role.id
    </select>

如何使用collection元素嵌套结果映射(一般使用一对多查询)

/**
* 根据用户ID查询所有的地址信息
* @return
*/
List<User> findAddressById(Long id);

    <resultMap id="UserAndAddressList" type="User">
        <id property="id" column="id"></id>
        <result property="username" column="userName"></result>
        <!--association表示一个实体类-->
        <!--association对应User类的属性值,javaType表示属性值的类型-->
        <collection property="addressList" ofType="com.changan.entity.Address">
            <id property="id" column="addressId"></id>
            <result property="addressDesc" column="addressDesc"></result>
        </collection>
    </resultMap>
    <select id="findAddressById" resultMap="UserAndAddressList">
        select user.*,address.id as addressId,address.addressDesc from smbms_user 			user inner join smbms_address address on
        user.id = address.userId where user.id = #{
     id}
    </select>

resultMap的自动映射的三种行为

  1. NONE 禁用自动映射,仅为手工映射的属性赋值。
    <settings>
        
        <setting name="autoMappingBehavior" value="NONE"/>
    settings>
  1. PARTIAL 这是默认行为,对于没有嵌套映射的resultMap使用自动映射;而对于有嵌套映射的resultMap 不使用自动映射,仅为手工映射的属性赋值
 <settings>
        
        <setting name="autoMappingBehavior" value="PARTIAL"/>
    settings>
  1. FULL 全部使用自动映射,即使有嵌套映射的resultMap也会使用自动映射
 <settings>
        
        <setting name="autoMappingBehavior" value="FULL"/>
    settings>

你可能感兴趣的:(MyBatis,mybatis)