mybatis-resultMap标签使用

mybatis-resultMap标签使用

resultMap介绍

resultMap用于实体类和表映射,功能十分强大
如果使用的好,那么对项目是很大的帮助

基本标签

id

映射主键,column指定表列的名称,property指定实体的字段名

result

映射主键之外的列,column和property

扩展标签

association

负责映射类型为实体类的字段,常见于多对一或者一对一映射
只有property字段名

<!-- 声明resultMap用于User实体类和user_info的表映射-->
<resultMap id="identityCardMap" type="identityCard">
    <!-- id用于映射主键,property指定实体的字段名,column指定表列的名称 -->
    <id property="identityCardId" column="cell_phone_number_id"/>
    <!-- 其他属性使用result标签来映射-->
    <result property="identityCard" column="cell_phone_number"/>
    <!-- 多对一或者一对一映射 property代表字段-->
    <association property="user">
        <id column="user_id" property="userId"/>
        <result column="name" property="name"/>
    </association>
</resultMap>

collection

负责映射类型为集合<实体类>的字段,常见于多对多或者一对多映射
property代表字段名 ofType代表类型(没有定义类型会出现空指针异常)

<!-- 声明resultMap用于实体类和表映射-->
<resultMap id="credentialsMap" type="credentials">
    <!-- id用于映射主键,property指定实体的字段名,column指定表列的名称 -->
    <id property="credentialsId" column="credentials_id"/>
    <!-- 其他属性使用result标签来映射-->
    <result property="credentialsName" column="credentials_name"/>
    <!-- 多对多映射 property代表字段 ofType代表类型-->
    <collection property="users" ofType="entity.User">
        <id property="userId" column="user_id"/>
        <result property="name" column="name"/>
    </collection>
</resultMap>

注意

mybatis是通过id标签进行的合并成集合<实体类>,所以为了保证数据的合理性。
在查询多对多或者一对多关系时为了保证所查询的数据中集合合并,
就需要设置id(主键)唯一值保证数据的正常合并