前言
首先,先介绍一下BeanPropertyRowMapper,BeanPropertyRowMapper
是 Spring JDBC 模板中用于将查询结果的每一行数据映射到一个 Java Bean 的类,
本博客主要对本人第一次使用spring中JdbcTemplate用queryForObject(String sql, RowMapper<> rowMapper, Object… args),获取指定对象时,在数据库字段与bean属性名对应的情况(本人做了很多次修改),获取的值还是null,很烦恼,求助网上的大神,很是没有解决,本来想放弃,但是,回到bean中,发现set get方法没有加入public方法,抱着侥幸的心理试了一下,真的出结果了。对此本人对BeanPropertyRowMapper方法进行了总结。
注意事项
BeanPropertyRowMapper是Spring JDBC模板中用于将ResultSet中的数据映射到Java Bean对象的工具类。在使用BeanPropertyRowMapper时,需要注意以下几点:
- 确保目标 Java Bean 的属性与数据库表的列相匹配,或者提供自定义的映射规则。
- 如果数据库列名和 Java Bean 属性名之间存在不匹配的情况,可以使用别名来解决这个问题。例如,在 SQL 查询中使用
AS
关键字给列起别名,使其与 Java Bean 属性名一致。 - 对于复杂的映射需求,可能需要考虑使用其他更高级的映射框架,如 MyBatis 或 Hibernate。
默认构造函数
确保Java Bean类具有默认构造函数(无参数构造函数)。BeanPropertyRowMapper
需要使用默认构造函数来创建Java Bean实例。
public class User {
private int id;
private String name;
public User() {
}
}
getter和setter方法
确保Java Bean类的属性具有公共的getter和setter方法。BeanPropertyRowMapper
使用Java Bean的getter和setter方法来访问属性值。
public class User {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
数据库字段
确保数据库表中的列名与Java Bean类的属性名匹配。BeanPropertyRowMapper
使用列名来查找Java Bean的属性。如果列名与属性名不匹配,您需要使用别名在SQL查询中将列名映射到属性名。
SELECT id, name AS userName FROM users
一般,字段名字一样或者驼峰式与下划线式对应,属性明首字母小写,个人建议bean的属性名称按照数据库字段来写,这样能够避免映射错误。
SpringJDBC BeanPropertyRowMapper 查询的时候 一般的数据库字段都可以正常映射到 bean!
字段 –> bean属性
USER_NAME –> userName
USER_ID –> userId
这样sql查询不必转化别名,BeanPropertyRowMapper会自动匹配。
访问修饰符
如果您使用的是访问修饰符(如private
,protected
或package-private
)来限制Java Bean类的访问权限,请确保getter和setter方法具有适当的访问级别。BeanPropertyRowMapper
需要访问这些方法来设置属性值。
public class User {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
本人出现的问题就是快捷键生成get set方法时,忘记加入public,导致方法为默认值,BeanPropertyRowMapper不能访问。
总结
总之,在使用BeanPropertyRowMapper
时,请确保Java Bean类具有默认构造函数,属性具有公共的getter和setter方法,数据库表中的列名与Java Bean类的属性名匹配,以及getter和setter方法具有适当的访问级别。这样,您就可以使用BeanPropertyRowMapper
将ResultSet
中的数据映射到Java Bean对象了。
我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!