resultMap 元素是 MyBatis 中最重要最强大的元素,它可以让我们从JDBC ResultSets 数据提取代码中解放出来。

我们的程序更可能会使用 JavaBean 或 POJO(Plain Old Java Objects,普通老式 Java 对象)作为领域模型。请看下面这个 JavaBean:

  • public class User {
  • private int id;
  • private String username;
  • private String hashedPassword;
  • public int getId() {
  • return id;
  • }
  • public void setId(int id) {
  • this.id = id;
  • }
  • public String getUsername() {
  • return username;
  • }
  • public void setUsername(String username) {
  • this.username = username;
  • }
  • public String getHashedPassword() {
  • return hashedPassword;
  • }
  • public void setHashedPassword(String hashedPassword) {
  • this.hashedPassword = hashedPassword;
  • }
  • }

对应的映射关系是这样的:

  • <select id="selectUsers" resultType="cn.mybatis.model.User">
  • select id, username, hashedPassword
  • from t_users
  • where id = #{id}
  • </select>

这些情况下,MyBatis 会在幕后自动创建一个 ResultMap,再基于属性名来映射列到 JavaBean 的属性上。

如果列名和属性名没有精确匹配,可以使用 resultMap 元素来帮忙:

  • <resultMap id="userResultMap" type="User">
  • <id property="id" column="user_id" />
  • <result property="username" column="user_name"/>
  • <result property="password" column="hashed_password"/>
  • </resultMap>

而在引用它的语句中使用 resultMap 属性就行了(注意:我们去掉了 resultType 属性)。比如:

  • <select id="selectUsers" resultMap="userResultMap">
  • select user_id, user_name, hashed_password
  • from t_users
  • where id = #{id}
  • </select>

标签: none

添加新评论