mybatis實現MySQL資料庫的增刪改查之三
阿新 • • 發佈:2020-12-30
現在我們解決一下屬性名和欄位名不一致的問題
實體類的屬性如下:
1 public class User { 2 private int id; 3 private String name; 4 private String password; 5 }
介面:
1 public interface UserMapper { 2 3 //根據id查詢使用者 4 User getUserById(int id); 5 6 }
xml對映檔案:
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 <mapper namespace="com.qijian.dao.UserMapper"> 6 7 <select id="getUserById" parameterType="int" resultType="com.qijian.pojo.User"> 8 select * from mybatis.user where id = #{id};9 </select> 10 11 </mapper>
測試類:
1 public class UserDaoTest { 2 @Test 3 public void testGetUserLike() throws IOException { 4 SqlSession sqlSession = MyBatisUtils.getSqlSession(); 5 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); 6 User user = userMapper.getUserById(1);7 8 System.out.println(user); 9 10 sqlSession.close(); 11 12 }
執行結果如下:
這裡會發現password的值變成了null。下面我們來分析一下為什麼會這樣?
mybatis會根據這些查詢的列名(會將列名轉化為小寫,資料庫不區分大小寫) , 去對應的實體類中查詢相應列名的set方法設值 , 由於找不到setPwd() , 所以password返回null ; 【自動對映】
解決辦法一:
修改SQL語句:
1 <select id="getUserById" parameterType="int" resultType="com.qijian.pojo.User"> 2 select id,name,pwd as password from mybatis.user where id = #{id}; 3 </select>
解決辦法二:
resultMap
元素是 MyBatis 中最重要最強大的元素。它可以讓你從 90% 的 JDBC ResultSets
資料提取程式碼中解放出來,並在一些情形下允許你進行一些 JDBC 不支援的操作。實際上,在為一些比如連線的複雜語句編寫對映程式碼的時候,一份 resultMap
能夠代替實現同等功能的數千行程式碼。ResultMap 的設計思想是,對簡單的語句做到零配置,對於複雜一點的語句,只需要描述語句之間的關係就行了。(注意resultType和resultMap兩者只能存在一個
)
1 <resultMap id="UserMap" type="com.qijian.pojo.User"> 2 <result column="pwd" property="password"/> 3 </resultMap> 4 <select id="getUserById" resultMap="UserMap"> 5 select * from mybatis.user where id = #{id} 6 </select>