resultMap和resultType的使用
1. resultType
该属性就是返回的类型,就是将resultType查询到的结果映射封装成pojo类型中,前提是该pojo类的属性名和查询到的数据库表的字段名一致。这种映射封装mybatis帮我们自动做好了,不需要我们自己考虑。
使用场景:
- 如果只是返回一个值,比如说String或者int,那直接用resultType就行了
<mapper namespace="mapper.StudentMapper"> <select id = "selectStudent" resultType="hashmap"> select * from student </select> <mapper>
- 如果sql查询结果返回的列名和实体类中的字段名一致,可以使用resultType,MyBatis会自动把查询结果赋值给和字段名一致的字段
- 如若不一致也可以通过起别名的方式使其一致
2. resultMap
resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询。
当sql的列名和实体列名不一致的时候就可以使用resultMap
resultMap常用的属性
<resultMap id="唯一标识" type="映射的entity对象的绝对路径">
<id column="表主键字段" jdbcType="字段类型" property="映射entity对象的主键属性" />
<result column="表某个字段" jdbcType="字段类型" property="映射entity对象的某个属性"/>
<!-- 指的是entity对象中的对象属性 -->
<association property="entity中某个对象属性" javaType="这个对象的绝对路径">
<id column="这个对象属性对应的表的主键字段" jdbcType="字段类型" property="这个对象属性内的主键属性"/>
<result column="表某个字段" jdbcType="字段类型" property="这个对象属性内的某个属性"/>
</association>
<!-- 指的是entity对象中的集合属性 -->
<collection property="entity中的某个集合属性" ofType="这个集合泛型所存实体类的绝对路径">
<id column="这个集合属性中泛型所存实体类对象对应表的主键字段" jdbcType="字段类型"
property="这个集合属性中泛型所存实体类对象的主键属性"
/>
<result column="表某个字段" jdbcType="字段类型"
property="这个集合属性泛型所存实体类对象的属性"
/>
</collection>
<!-- 引用另一个resultMap (套娃) -->
<collection property="entity中的某个集合属性"
resultMap="这个引用的resultMap的type,就是这个集合属性泛型所存实体类的绝对路径"
/>
</resultMap>
使用举例
<resultMap id="userMap" type="com.xxx.User">
<id property="id" column="id"/>
<result property="userName" column="user_name"/>
<result property="sex" column="sex"/>
</resultMap>
<select id="getUsers" resultMap="userMap">
select id, user_name, sex from t_user
</select>
对于简单的映射,resultType和resultMap区别不大。但是resultMap功能更强大
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Zhn&Blog!
评论