使用BeanPropertyRowMapper
將數(shù)據庫查詢結果轉換為Java
類對象辆影。
一稼跳、應用
常應用于使用Spring的JdbcTemplate
查詢數(shù)據庫,獲取List
結果列表楞黄,數(shù)據庫表字段和實體類自動對應涝影。
示例:
@Override
public List<Demo> findAll() {
String sql = "SELECT * FROM user";
/**
* BeanPropertyRowMapper將查詢結果轉換為類對象
*/
return jdbcTemplate.query(sql, new BeanPropertyRowMapper(Demo.class));
}
@Override
public List<Demo> selectUser(int uid) {
String sql = "SELECT * FROM user WHERE id = ?";
/**
* 帶條件查詢
*/
return jdbcTemplate.query(sql, new Object[]{uid}, new BeanPropertyRowMapper(Demo.class));
}
二、內部實現(xiàn)淺析
BeanPropertyRowMapper的initialize內部實現(xiàn)
如上圖紅框中所示:
mapperFields
是一個HashMap
魄眉,用來匹配Java對象的屬性和MySQL
表的字段名的砰盐。mapperFields
中存放的是所有可能與MySQL
表的字段名映射上的那些Java
屬性名字。this.mappedFields.put(this.lowCaseName(pd.getName()),pd);
在initialize
方法中坑律,BeanPropertyRowMapper
會把傳入的泛型Java類的所有屬性名稱的全小寫形式放入mapperFields
中岩梳,String underscoredName = this.underscoreName(pd.getName());
將Java
類的屬性名轉化成下劃線分割的形式囊骤,如userName
會被轉化成user_name
,這是因為:
數(shù)據庫設計字段名稱冀值,一般會使用下劃線分割形式也物,如:user_name
而Java
類設置屬性,一般使用駝峰命名形式列疗,如:userName
滑蚯。
使用
BeanPropertyRowMapper
自動綁定,需要確保數(shù)據庫表列名稱與Java
實體類屬性名稱相同