MyBatis解決在開發過程當中實體類屬性和數據庫列名不一致的問題

MyBatis解決在開發過程當中實體類屬性和數據庫列名不一致的問題

記:以前咱們規定 編寫實體類的時候, 屬性和數據庫列名 必須保持 一致。java

思考:二開、業務變化等等的時候,此時數據庫中的列名和實體類的屬性名就是不一致,怎麼解決?mysql

實體類屬性和數據庫列名不一致,以下圖所示:linux

image.png

演示 屬性和數據庫列名 不一狀況下,數據庫 改 操做

提示:這裏只演示改操做。sql

記:在修改配置文件 IUserDao.xml 後,增刪改操做基本能夠知足開發須要。數據庫

------windows

新建實體類:UserV2.javadom

image.png

代碼以下:測試

------spa

public class UserV2 {

    private int userId;

    private String userName;

    private Date userBirthday;

    private String userSex;

    private String userAddress;
    ...

------3d

接口:IUserDao.java,新增 updateUserV2 方法

image.png

代碼以下:

-------

/**
* 用戶修改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();

}

結果以下,修改爲功!
image.png
總結:

通常來講,增刪改的方法,就算實體屬性和數據庫列名不一致,經過配置後,也能夠正常運行。

可是,在查詢的時候,若是不一致,就會出異常!

演示 屬性和數據庫列名 不一狀況下,數據庫 查 操做

查詢的時候,列名沒法對齊,致使數據出現異常。

接口: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("-------");
}

運行結果,以下圖所示:
image.png
提示:mysql數據庫在windows系統下不區分大小寫。若是是linux系統下,是嚴格區分大小寫的。

解決方案:

  • 設置查詢別名(瞭解);
  • 配置 查詢結果的列名和實體類的屬性名的對應關係(推薦使用!理由:這個resultMap能夠複用,修改起來也方便);

修改配置文件: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("-------");

}

查詢結果以下:
image.png

歡迎你們來評論!

相關文章
相關標籤/搜索