記:以前咱們規定 編寫實體類的時候, 屬性和數據庫列名 必須保持 一致。java
思考:二開、業務變化等等的時候,此時數據庫中的列名和實體類的屬性名就是不一致,怎麼解決?mysql
實體類屬性和數據庫列名不一致,以下圖所示:linux
提示:這裏只演示改操做。sql
記:在修改配置文件 IUserDao.xml 後,增刪改操做基本能夠知足開發須要。數據庫
------windows
新建實體類:UserV2.javadom
代碼以下:測試
------spa
public class UserV2 { private int userId; private String userName; private Date userBirthday; private String userSex; private String userAddress; ...
------3d
接口:IUserDao.java,新增 updateUserV2 方法
代碼以下:
-------
/** * 用戶修改v2 * @param userv2 */ void updateUserV2(UserV2 userv2);
-------
配置文件: IUserDao.xml ,代碼以下:
-------
<!--更新用戶操做V2--> <update id="updateUser" parameterType="com.abc2.domain.UserV2"> UPDATE USER SET \`username\`=#{userName},\`address\`=#{userAddress},\`sex\`=#{userSex},\`birthday\`=#{userBirthday} WHERE id=#{userId}; </update>
測試文件,代碼以下:
@Test public void updateUserV2Test() { UserV2 user = new UserV2(); user.setUserId(70); user.setUsername("小明"); user.setUserAddress("外星球-月球22"); user.setUserSex("女"); user.setUserBirthday(new Date()); //更新用戶 userDao.updateUserV2(user); //執行提交 sqlSession.commit(); }
結果以下,修改爲功!
總結:
通常來講,增刪改的方法,就算實體屬性和數據庫列名不一致,經過配置後,也能夠正常運行。
可是,在查詢的時候,若是不一致,就會出異常!
查詢的時候,列名沒法對齊,致使數據出現異常。
接口:IUserDao.java
/** * 查詢全部數據V2 * @return **/ List<UserV2> findAllV2();
配置文件:IUserDao.xml
<!--配置查詢全部 指定id,resultType結果集類型 --> <select id="findAllV2" resultType="com.abc2.domain.UserV2"> select \* from user </select>
測試類:Test
@Test public void findAllV2Test() { List<UserV2> allV2 = userDao.findAllV2(); System.out.println("-------"); for (UserV2 item : allV2) { System.out.println(item); } System.out.println("-------"); }
運行結果,以下圖所示:
提示:mysql數據庫在windows系統下不區分大小寫。若是是linux系統下,是嚴格區分大小寫的。
解決方案:
修改配置文件:IUserDao.xml
<!--配置:查詢結果的列名和實體類的屬性名對應關係--> <resultMap id="userMap2" type="com.abc2.domain.UserV2"\> <!--主鍵字段的對應--> <id property="userId" column="id"></id> <!--非主鍵字段對應--> <result property="userName" column="username"></result> <result property="userBirthday" column="birthday"></result> <result property="userSex" column="sex"></result> <result property="userAddress" column="address"></result> </resultMap> <!--配置查詢全部 指定id,resultType結果集類型 --> <select id="findAllV2" resultMap\="userMap2"> <!-- 使用查詢別名-瞭解便可! --> <!-- select id as userId,username as userName,birthday as userBirthday,sex as userSex,address as userAddress from user;--> select \* from user; </select>
測試類:Test
@Test public void findAllV2Test() { List<UserV2> allV2 = userDao.findAllV2(); System.out.println("-------"); for (UserV2 item : allV2) { System.out.println(item); } System.out.println("-------"); }
查詢結果以下:
歡迎你們來評論!