Spring文档声明:
“如果最后两段代码实际存在于同一个代码中 应用程序,删除存在的重复是有意义的 两个RowMapper匿名内部类,并将它们提取出来 单个类(通常是静态内部类),然后可以 根据需要由DAO方法引用。“
在这种情况下,“最后两个片段”是使用两个具有相同逻辑的行映射器映射其调用结果的数据库方法。
我的问题是为什么内部RowMapper类需要是静态的......还是需要它?我在我的DAO中有一个自动装配的服务方法,用于查找常量值,如:
//Returns "USA"
lookupService.getCountryForCountryId(1)
在父类中自动装配。
更改我的RowMapper定义:
public static final RowMapper<Order> BASIC_SHALLOW_MAPPER = new RowMapper<Order>() {...}
到
public final RowMapper<Order> BASIC_SHALLOW_MAPPER = new RowMapper<Order>() {
public Order mapRow(ResultSet rs, int rowNum) {
...
lookupService.getCountryForId(rs.getInt("country_id"));
...
}
}
...允许我在rowmapper中翻译该数据,如上所示。这种方法有什么缺点吗?
答案 0 :(得分:3)
行映射器类不必是静态的。但大多数情况下,它不需要访问父类的字段,在这些情况下,使其静态更有效。