使用 resultMap 解决字段名与属性名不一致的问题

使用 resultMap 解决字段名与属性名不一致的问题

有些时候,我们表里面的某些列和类里面的字段名不一定相同。这种情况下,MyBatis 提供 <resultMap> 标签来进行映射。

下面我们修改前面的 Account,新增一个 Account2 类,故意把里面的 Name 改为 UserName,Sex 改为 Gender,来演示这个问题。

定义 Account2 类

package cn.foxdevelop.models;

import java.util.Date;

public class Account2 {

    private int ID;
    private String UserName;
    private int Age;
    private boolean Gender;

    public int getID() {
        return ID;
    }
    public void setID(int iD) {
        ID = iD;
    }
    public String getUserName() {
        return UserName;
    }
    public void setUserName(String userName) {
        UserName = userName;
    }
    public int getAge() {
        return Age;
    }
    public void setAge(int age) {
        Age = age;
    }
    public boolean isGender() {
        return Gender;
    }
    public void setGender(boolean gender) {
        Gender = gender;
    }
    public Date getAddTime() {
        return AddTime;
    }
    public void setAddTime(Date addTime) {
        AddTime = addTime;
    }
    private Date AddTime;
}Code language: PHP (php)

修改映射文件

增加一个 resultMap 配置,将数据库列名与类属性名进行映射:

<resultMap type="cn.foxdevelop.models.Account2" id="Account2ResultMap">
    <result property="UserName" column="name"/>
    <result property="Gender" column="sex"/>
</resultMap>Code language: HTML, XML (xml)

修改获取所有用户的映射,改为返回 Account2 对象列表。注意下面用的是 resultMap 而不是 resultType:

<!-- 查询所有 -->
<select id="getAllAccount" resultMap="Account2ResultMap">
    select * from account
</select>Code language: HTML, XML (xml)

测试代码

// 获取所有用户
List<Account2> listAccount = session.selectList("cn.foxdevelop.mapper.getAllAccount");
for (Account2 item : listAccount) {
    System.out.println(item.getUserName() + ":" + (item.isGender() ? "男" : "女") + " " + item.getID());
}Code language: PHP (php)

通过 resultMap,MyBatis 就能正确地将数据库中的 name 列映射到 UserName 属性,sex 列映射到 Gender 属性,解决了字段名与属性名不一致的问题。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注