1. 程式人生 > 實用技巧 >7、表的列名與實體類列名不對應,如何將查詢結果封裝到實體類物件中

7、表的列名與實體類列名不對應,如何將查詢結果封裝到實體類物件中

解決方法:
(1)SQL語句用as關鍵字給列名取別名
(2)用MyBatis提供的ResultMap標籤建立例項類與表之間的關係
總結:第一種方法在SQL語句的層面上解決問題,效率高,複用性差,第二種反之;

表結構

實體類屬性

    private Integer userId;
    private String username;
    private Date UserBirthday;
    private String UserGender;
    private String UserAddress;

表的列名與實體類的屬性不對應

as關鍵字取別名
介面方法

/**
 * 用as關鍵字取別名,建立列名與屬性之間的對應關係
 */
List<User> findAll();

對映檔案

<!--列名username與屬性名userName只是大小寫問題,mysql資料庫在windows下是不區分大小寫的
所以不用起別名-->
<select id="findAll" resultType="com.example.pojo.User">
    SELECT id as userId, username, birthday as userBirthday, gender as userGender, address as userAddress FROM user
</select>

測試

@Test
public void TestFindAll(){
    List<User> users = userMapper.findAll();
    for (User user: users
         ) {
        System.out.println(user);
    }
}

通過ResultMap與實體類屬性建立關係

介面

/**
 * 通過resultMap與實體類建立關係
 */
List<User> findAll2();

對映檔案

<!--id為resultMap的唯一標識
type屬性指定將該對應關係賦給哪個實體類
username從忽略大小的角度來說該屬性與列名是對應的,所以不用設定對應關係
-->
<resultMap id="userResultMap" type="com.example.pojo.User">
    <!--id標籤說明該欄位是主鍵,property是java中的屬性名
        column是表中列名
    -->
    <id property="userId" column="id"/>
    <result property="userBirthday" column="birthday"/>
    <result property="userGender" column="gender"/>
    <result property="userAddress" column="address"/>
</resultMap>
<!--通過resultMap屬性引用resultMap封裝結果集-->
<select id="findAll2" resultMap="userResultMap">
    SELECT id, username, birthday, gender, address FROM user
</select>

測試

@Test
public void TestFindAll2(){
    List<User> users = userMapper.findAll2();
    for (User user: users
         ) {
        System.out.println(user);
    }
}