我在创建行映射器(将行映射到> = 1个对象)时在对象关系映射期间遇到此问题。我正在使用DBUtils
,你需要实现RowProcessor
接口以拥有“自己的”行映射器。这是方法签名(4个此类方法中的1个,返回单个对象,列表,映射和数组)
public <T> T toBean(ResultSet rs, Class<T> type) throws SQLException
{
//conversion logic
}
在Spring中,这是行映射的方法签名(只有1个方法):
Object mapRow(ResultSet rs, int rowNumber)
{
//conversion logic
}
从DBUtil的方法转向对象涉及基于反射的实例化和过多的类型转换,甚至可以将对象取出。
Spring似乎相当简单(比较容易)。
问题在于设计的灵活性哪种风格更好,何时你会选择基于反思的方法而不是后者(如上所述)?我只是很好奇,所以我想我会把它拿出来得到一些想法。基本上你为什么认为DBUtils采用基于反射的方法?有什么好处吗?
答案 0 :(得分:1)
在这种情况下使用反射(或巨大的开关语句或其他)具有将类型不安全封装在一个地方的优点。呼叫者指定他们所追求的东西,这就是他们得到的东西。然后他们可以继续使用它而无需任何演员表等。您只需要在这一处手动检查类型安全性,编译器将在其他地方检查它。返回对象意味着调用者将进行大量的强制转换,每个强制转换都可能带有ClassCastException
,需要手动检查。