mybatis 用resultMap 和用实体vo返回有啥区别?
MyBatis 中使用 resultMap
和直接使用实体(Entity)或值对象(VO)返回结果集都是用于处理查询结果的两种不同方式,它们有一些区别:
-
使用
resultMap
:- 定制化映射:
resultMap
允许你更灵活地进行映射,可以将数据库字段映射到实体的不同属性或进行一些特定的映射操作。 - 复杂查询: 在处理复杂的查询时,
resultMap
更为强大,可以处理多表关联查询,嵌套查询等。 - 可读性: 对于复杂映射,使用
resultMap
可以使映射配置更清晰易读。
示例使用
resultMap
的映射文件部分:<resultMap id="userResultMap" type="User"> <id property="id" column="user_id"/> <result property="username" column="user_name"/> <result property="email" column="user_email"/> </resultMap>
查询语句中引用
resultMap
:<select id="getUserById" resultMap="userResultMap"> SELECT user_id, user_name, user_email FROM users WHERE user_id = #{id} </select>
- 定制化映射:
-
使用实体或值对象返回:
- 简便性: 直接使用实体或值对象返回可以简化代码,特别是在处理简单的查询时。
- 自动映射: MyBatis 在处理结果集时会尝试将数据库列名映射到实体的属性,前提是它们的名称一致,这种自动映射减少了映射配置的工作。
- 适用于简单场景: 对于简单的查询,直接返回实体或值对象更加方便,避免了繁琐的配置。
示例直接返回实体的映射文件部分:
<select id="getUserById" resultType="User"> SELECT user_id, user_name, user_email FROM users WHERE user_id = #{id} </select>
总体而言,选择使用 resultMap
还是直接返回实体或值对象取决于你的项目需求。对于简单的 CRUD 操作,直接返回实体可能更为方便;而对于复杂的查询,多表关联等情况,使用 resultMap
提供了更多的灵活性和控制能力。