1. 程式人生 > 實用技巧 >mybatis實現MySQL資料庫的增刪改查之三

mybatis實現MySQL資料庫的增刪改查之三

現在我們解決一下屬性名和欄位名不一致的問題

實體類的屬性如下:

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 mapper
3 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>