gpt4 book ai didi

java - 具有类层次结构的 Spring JDBC RowMapper

转载 作者:搜寻专家 更新时间:2023-10-31 20:07:40 25 4
gpt4 key购买 nike

我想知道社区认为在使用 Spring JDBC 映射类层次结构方面的“最佳实践”是什么。

我们没有能力使用成熟的 ORM 工具,但是我们正在使用 Spring JDBC 来减轻 JDBC 的一些乏味性。我们经常使用的一个类是 BeanPropertyRowMapper,因为它易于使用并且能够从我们的结果集中访问不区分类型的 bean 属性。

我有一个类层次结构,它全部映射回单个表(对这个小的类层次结构采用一个表一个层次结构的方法)。因此,该表包含一个 classId 列,可用于确定应实际实例化哪个类。前任。 1 = 经理,2 = 员工,3 = 承包商。所有这些都是“人”,但是人的每个子类都有一些属性是他们的类所独有的。

我最初的想法是创建 BeanPropertyRowMapper 的子类,并尝试注入(inject)此逻辑以说明“如果列 A = 1,则实例化一个管理器,然后进行正常绑定(bind)”。

这看起来是一种合理的方法吗?人们是否还有其他对您有用的建议?

最佳答案

看起来在子类中没有地方可以添加钩子(Hook)来切换类,而无需完全复制 BeanPropertyRowMapper 的 mapRow() 的实现。您最好的方法可能是创建一个 RowMapper 类,该类委托(delegate)给适当的 BeanPropertyRowMapper。

例如:

    final RowMapper managerMapper = new BeanPropertyRowMapper(Manager.class);
final RowMapper employeeMapper = new BeanPropertyRowMapper(Employee.class);
final RowMapper contractorMapper = new BeanPropertyRowMapper(Contractor.class);

RowMapper rm = new RowMapper()
{
@Override
public Object mapRow(ResultSet rs, int rowNum)
throws SQLException
{
int employeeType = rs.getInt("type");
switch (employeeType)
{
case 1:
return managerMapper.mapRow(rs, rowNum);

case 2:
return employeeMapper.mapRow(rs, rowNum);

case 3:
return contractorMapper.mapRow(rs, rowNum);

default:
break;

}
}
};

关于java - 具有类层次结构的 Spring JDBC RowMapper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1834341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com