使用 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 属性,解决了字段名与属性名不一致的问题。
Previous: 映射文件里面使用别名
Next: 一对一关系映射