从jdbc结果集填充类

从jdbc结果集填充类,jdbc,java,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 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类。

如果您编写一个方法来构造
Part
对象,您将在那里执行相同的工作以将数据复制到其中

但是,如果您重复地构造
部分
对象,那么拥有一个方法会使它更易于维护和组织代码

拥有一个方法并不一定会使它变得快速,它只会使代码更加简洁,避免代码重复(即原则)。您可能还想利用这里的模式

另一个选择是使用Apache—它为您提供了许多有用的实用工具方法

但是,如果您谈论的是始终从JDBC结果集复制到内部DTO对象,并且愿意利用spring框架,那么您可以使用来自它的。另外还有带有Hibernate、iBatis等的ORM路由。

简短回答:否

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

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


简而言之,您最好将字段一个接一个地从结果集中复制出来。通常这没什么大不了的。每个字段需要一行代码。我想如果你的表中有100个字段,那会很痛苦。

如果我正确理解你的问题,你可以编辑Part类的构造函数来接受这些值

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"));
简短回答:是的

详细回答:

答案有几种途径:

  • 使用类似myBatis或Hibernate的ORM包。您可以编写一个方法来使用反射从结果集填充对象,但为什么要重新发明轮子呢。myBatis和Hibernate都已经这样做了
  • 编写一个获取ResultSet并提取列值的部件构造函数
  • 编写一个部件构造函数,它接受ResultSet中的所有值,并使用ResultSet中的值调用它(请参阅Dennis的答案)
  • 编写一个零件生成器对象,该对象获取结果集并基于其中的值构造零件
  • 一些我没有想到的事情