使用BeanPropertyRowMapper
将数据库查询结果转换为Java
类对象。
一、应用
常应用于使用Spring的JdbcTemplate
查询数据库,获取List
结果列表,数据库表字段和实体类自动对应。
示例:
@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));
}
二、内部实现浅析
BeanPropertyRowMapper的initialize内部实现如上图红框中所示:
-
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
,这是因为:
数据库设计字段名称,一般会使用下划线分割形式,如:user_name
而Java
类设置属性,一般使用驼峰命名形式,如:userName
。
使用
BeanPropertyRowMapper
自动绑定,需要确保数据库表列名称与Java
实体类属性名称相同
网友评论