MyBatis - 實體類的屬性名和資料庫列名不一致時的兩種解決辦法!
阿新 • • 發佈:2018-11-19
問題:兩者不一致時 , 查詢結果無法封裝到實體!(也就無法查詢出來)
① 查詢的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(); }