Mybatis-解決屬性名和字段名不一致的問題


解決屬性名和字段名不一致的問題

1. 問題

在數據庫中,密碼字段為pwd,而在實體類中為password

package com.wang.pojo;

public class User {
    private int id;
    private String name;
    private String password;

    public User(int id, String name, String password) {
        this.id = id;
        this.name = name;
        this.password = password;
    }

    public User() {
    }

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

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

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

測試出現問題

package com.wang.dao;

import com.wang.pojo.User;
import com.wang.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class UserMapperTest {

    //
    @Test
    public void testGetUserById() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = mapper.getUserById(1);
        System.out.println(user);

        sqlSession.close();
    }

}

User{id=1, name='張三', password='null'}

select * from mybatis.user where id = #{id};
等同於
select id, name, pwd from mybatis.user where id = #{id};

MyBatis 在設置預處理語句(PreparedStatement)中的參數或從結果集中取出一個值時, 都會用類型處理器將獲取到的值以合適的方式轉換成 Java 類型。

經過類型處理器處理后,此時,在實體類中找不到pwd的字段

.解決方法:

  • 起別名: pwd as password
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace=綁定一個對應的Dao/Mapper接口-->
<mapper namespace="com.wang.dao.UserMapper">

    <select id="getUserById" parameterType="int" resultType="User">
        select id, name, pwd as password from mybatis.user where id = #{id};
    </select>

</mapper>

2. ResultMap

結果集映射

數據庫 id name pwd

實體類 id name password

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace=綁定一個對應的Dao/Mapper接口-->
<mapper namespace="com.wang.dao.UserMapper">
  
	<!--使用resultMap時,此處不要指定resultType,在下面寫resultMap時再指定其type屬性-->
    <select id="getUserById" parameterType="int" resultMap="UserMap">
        select * from mybatis.user where id = #{id};
    </select>

    <!--結果集映射 resultMap id = 找到要映射的標簽(在上面的resultMap中設定的標簽)-->
    <resultMap id="UserMap" type="User">
    <!--column 數據庫中的字段; property 實體類中的屬性-->
        <result column="pwd" property="password"/>
    </resultMap>

</mapper>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM