7、表的列名與實體類列名不對應,如何將查詢結果封裝到實體類物件中
阿新 • • 發佈:2020-07-24
解決方法:
(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);
}
}