1. 程式人生 > >MyBatis - 實體類的屬性名和資料庫列名不一致時的兩種解決辦法!

MyBatis - 實體類的屬性名和資料庫列名不一致時的兩種解決辦法!

問題:兩者不一致時 , 查詢結果無法封裝到實體!(也就無法查詢出來)
在這裡插入圖片描述

查詢的sql語句中使用別名進行查詢.

但要注意: 欄位名的別名 要和 實體類的屬性名一致!

在這裡插入圖片描述
UserMapper.xml

<!--  namespace:介面的全路徑名.  -->
<mapper namespace="com.xxx.dao.UserMapper">
	<!-- 使用別名 --> 
    <select id="queryAll" resultType="com.xxx.domain.User">
        select 
        	id as userId,
        	username as userName,
            address as userAddress,
            sex as userSex,
            birthday as userBirthday 
        from user;
    </select>
</mapper>

注: 如果使用別名 , 每一個sql語句都需要加別名 (很麻煩)
故: 一般都使用第二種.

② 使用resultMap

UserMapper.xml

<mapper namespace="com.jxj.dao.UserDao">
    <resultMap id="userResultMap" type="User">
    	<!-- 
    		主鍵欄位  
    		    property: 實體類屬性名.
    		    column: 庫中表的列名
    		    javaType: 資料型別.
    	--> 
        <id property="userId" column="id" javaType="int"></id>
        <!-- 非主鍵欄位  --> 
        <result property="userSex" column="sex" javaType="string"></result>
        <result property="userAddress" column="address" javaType="string"></result>
        <result property="userBirthday" column="birthday" javaType="date"></result>
        <result property="username" column="username" javaType="string"></result>
    </resultMap>

    <select id="queryAll"  resultMap="userResultMap">
        select * from user
    </select>

注: select中resultMap的屬性值 要和 resultMap中id的屬性值一樣.

測試類: UserMapper.java

@Test
public void queryAll() throws IOException {
    // 1.建立工廠類.
    InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
    // 2.建立sql物件.
    SqlSession sqlSession = sqlSessionFactory.openSession();
    // 3.建立介面的實現類物件.
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    // 4.呼叫介面中的方法 (代理)
    List<User> users = mapper.queryAll();
    for (User user : users) {
        System.out.println(user);
    }
    sqlSession.close();
    in.close();
}