从jdbc ResultSet填充类

时间:2011-10-07 15:07:43

标签: jdbc java

现在我正在填写这样的课程:

Part part = new Part();

ResultSet rs = statement.executeQuery();
part.setBrand(rs.getString("P_BRAND"));
part.setComment(rs.getString("P_COMMENT"));
part.setContainer(rs.getString("P_CONTAINER"));
part.setMfgr(rs.getString("P_MFGR"));
part.setName(rs.getString("P_NAME"));

是否有另一种快速填充零件对象的方法? 类似于那个方法(Part.class,part,rs)并返回一个填充的Part类。

4 个答案:

答案 0 :(得分:2)

简答:是的

更长的答案:

答案有几条路线:

  1. 使用像myBatis或Hibernate这样的ORM包。您可以编写一个方法来使用反射从ResultSet中填充对象,但为什么要重新发明轮子。 myBatis和Hibernate都已经这样做了。
  2. 编写一个Part构造函数,该构造函数接受ResultSet并将列值拉出。
  3. 编写一个Part构造函数,它接受ResultSet中的所有值,并使用ResultSet中的值调用它(请参阅Dennis的答案)。
  4. 编写一个零件生成器对象,该对象采用ResultSet并根据其中的值构造零件。
  5. 我没想过的东西。

答案 1 :(得分:0)

如果您编写构建part对象的方法,那么您将在那里执行相同的工作以将数据复制到其中。

但是,如果您反复执行part对象的构造,那么使用方法可以使代码更易于维护和组织。

拥有一个方法并不一定能让它变得更快,它只会使代码更简洁并避免重复代码(即DRY原则)。您可能还想在此处使用Builder模式。

另一种选择是使用Apache BeanUtils - 它为您提供了许多有用的实用方法。

但是,如果您特意说的是始终从JDBC结果集复制到内部DTO对象并愿意利用spring框架,那么您可以使用RowMapper()。还有Hibernate,iBatis等的ORM路由。

答案 2 :(得分:0)

简短回答:不。

原则上,您可以编写一个函数,通过使用反射包从ResultSet中填充bean。但坦率地说,我认为这将是一个笨拙和全面的坏主意。

如果您确实需要通用数据,则可以使用字段名称作为每个条目的键来创建哈希映射。但是对于正常使用,这也是一个坏主意,因为它会在识别出拼写错误的字段名称时产生问题。

简而言之,您最好一个一个地从结果集中复制字段。通常这不是什么大问题。每个字段需要一行代码。我想如果你的桌子上有一百个字段就会很痛苦。

答案 3 :(得分:0)

如果我正确理解您的问题,您可以编辑Part Class的构造函数以接受值...

Part part;

ResultSet rs = statement.executeQuery();
part = new Part(rs.getString("P_BRAND"), rs.getString("P_COMMENT"), rs.getString("P_CONTAINER"), 
   rs.getString("P_MFGR"), rs.getString("P_NAME"));