<resultMap>标签

首先<resultMap>标签是一个双标签,其作用是完成表和类的映射关系。其id属性的值是在xml文件中对象的对象名,用于被其他对象的属性引用,type属性的作用是指明实体类的路径。或是结合@Alias注解和<typeAliases>标签用别名进行指定,示例中是采用了注解方式。
在其标签内可以添加<id/><result/><collection/><association/>等标签来完成对象属性的映射。

 	 <resultMap id="UserMapper" type="User">
        <id property="id" column="user_id"/>
        <result property="name" column="user_name"/>
        <association property="roles" column="user_id" resultMap="RoleMapper"/>
        <collection property="privses" column="user_id" resultMap="PrivsMapper" />
     </resultMap>
<id>&<result>标签

这两个标签作用差不多,都是完成类的基本属性(八大基本属性&String)和表中字段的映射。不同之处是<id/>标签只能有一个,一般对象表中的主键,<result/>标签可以有多个。但是他们不能完成对象属性是对象的映射。
其property属性的值是类的属性的名称,column属性的值对应表中的字段名。

<assocition/>标签

<association/>标签用来完成属性是对象的情况下的映射。
其property属性的值同样是类的属性的名称;column属性的值由于表中肯定不会直接存在对象,所以在这里可以写当前<resultMap/>标签中<id/>标签对应的column属性的值(一般用这个,不会出现重复的情况),也可以写要依赖的<resultMap/>标签中的id标签的column属性的值(可能会出现重复,指两个User可能会对应同一个Role,这时可能出现封装时指代不明);result属性的值是要依赖的<resultMap/>标签的id值。
另外还一定要配置要依赖的类的<resultMap/>,这样就完成了属性是对象的情况的映射,该标签是一对一的关系,也就是不能映射List等的集合。

 	 <resultMap id="UserMapper" type="User">
        <id property="id" column="user_id"/>
        <association property="roles" column="user_id" resultMap="RoleMapper"/>
     </resultMap>
     
     <resultMap id="RoleMapper" type="Role">
        <id property="id" column="role_id"/>
        <result property="name" column="role_name"/>
     </resultMap>
<collection/>标签 封装集合

<collection/>标签完成了当属性是集合的时候的映射。
其属性的作用和<association/>标签大同小异,不过由于其在数据库中是一对多的关系,所以其column属性一定要是当前<resultMap/>标签中<id/>标签对应的column属性的值,而不能写依赖的<resultMap/>中对应的字段,否则将封装为一条条的数据,而不是一个集合的形式。
在学习过程中就有网友说String不能封装成集合,只是一条条数据,想来就是column属性设置的不合适,而具体封装的类型与该标签无关,只需要在所依赖的<resultMap/>的type属性中进行申明即可。

 	 <resultMap id="UserMapper" type="User">
        <id property="id" column="user_id"/>
        <collection property="privses" column="user_id" resultMap="PrivsMapper" />
     </resultMap>

	<resultMap id="PrivsMapper" type="java.lang.String">
        <result column="privs_name"/>
    </resultMap>
<typeAliases/>标签

这个标签其实应该配置在configuratio.xml文件中,即配置数据源的配置文件中,其resource属性应写实体类所在的包的路径。只有配置了该标签并且在实体类上用@Alias注解进行了别名的配置,才能在<resultMap/>中用别名的方式完成映射。
链接: configuratio.xml文件的配置

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐