为什么RowMapper内部类是静态的?

时间:2014-05-05 16:46:03

标签: java spring jdbctemplate

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中翻译该数据,如上所示。这种方法有什么缺点吗?

1 个答案:

答案 0 :(得分:3)

行映射器类不必是静态的。但大多数情况下,它不需要访问父类的字段,在这些情况下,使其静态更有效。