問題:兩者不一致時 , 查詢結果無法封裝到實體!(也就無法查詢出來)
① 查詢的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();
}