mybatis 表字段名与类属性名不完全相同时,无法将查询结果全部封装进类对象

问题描述

当表中 字段 与 实体类中的 属性 不完全相同时,查询的结果 无法封装到实体类中

通过下面步骤验证

案例

在user表中增加create_time字段,DATETIME类型,表示插入该条记录的时间

修改表结构sql

ALTER TABLE `user`
    ADD COLUMN `create_time` DATETIME NULL DEFAULT NULL;

修改成功后,将 create_time 字段加上值

结果如下:

实体类增加属性

在User类中增加createTime属性(java中使用驼峰命名方式,所以不能有_),并增加setter、getter方法

如下:

private Date createTime;

public Date getCreateTime() {
    return createTime;
}

public void setCreateTime(Date createTime) {
    this.createTime = createTime;
}

完整代码

package top.malaoshi.entity;


import java.util.Date;

public class User {
    private String id;
    private String username;
    private String password;
    private Integer age;
    private String sex;
    private String status;
    private Date createTime;

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

}

修改 userMapper.xml

将下面代码:

<select id="selectAll" resultType="org.malaoshi.entity.User">
    select id,username,password from user
</select>

修改成:

<select id="selectAll" resultType="org.malaoshi.entity.User">
    select id,username,password,age,sex,status,create_time from user
</select>

增加create_time字段

执行

@Test
public void test() throws IOException {
    /*
     1. 读取  mybatis-config.xml 自定义命名的全局配置文件.
        getResourceAsStream 使用的资源路径
     */
    InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");

    // 2. 使用sqlSession的工厂构造器来读入全局配置,再生成一个sqlSession工厂.
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//
//        // 3. 通过 sqlSession 工厂打开一个 sqlSession
    SqlSession sqlSession = sqlSessionFactory.openSession();
    try {
//            //4 使用SqlSession创建Dao接口的代理对象
        IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);
        List<User> list=mapper.selectAll();
        for(User user:list){
            System.out.println(user.getUsername()+"--"+user.getCreateTime());
        }
    }finally{
        sqlSession.close();
        inputStream.close();
    }
}

执行结果如下:

user.getCreateTime()返回null


原文出处:/show_1EF6WVlkW6nN.html