将 JDBC 结果集映射到对象

2022-08-31 22:20:48

我有一个具有16个属性的用户类,例如名字,姓氏,dob,用户名,密码等...这些都存储在MySQL数据库中,当我想检索用户时,我会使用ResultSet。我想将每个列映射回用户属性,但是我这样做的方式似乎非常低效。例如,我正在做:

//ResultSet rs;
while(rs.next()) {
   String uid = rs.getString("UserId");
   String fname = rs.getString("FirstName");
   ...
   ...
   ...
   User u = new User(uid,fname,...);
   //ArrayList<User> users 
   users.add(u);
} 

即,我检索所有列,然后通过将所有列值插入到User构造函数中创建用户对象。

有谁知道一种更快,更整洁的方法吗?


答案 1

如果您不想使用任何JPA提供程序,例如OpenJPA或Hibernate,您可以尝试Apache DbUtils。

http://commons.apache.org/proper/commons-dbutils/examples.html

然后你的代码将如下所示:

QueryRunner run = new QueryRunner(dataSource);

// Use the BeanListHandler implementation to convert all
// ResultSet rows into a List of Person JavaBeans.
ResultSetHandler<List<Person>> h = new BeanListHandler<Person>(Person.class);

// Execute the SQL statement and return the results in a List of
// Person objects generated by the BeanListHandler.
List<Person> persons = run.query("SELECT * FROM Person", h);

答案 2

无需将 resultSet 值存储到 String 中,然后再次设置到 POJO 类中。而是在检索时设置。

或者最好的方法是切换到ORM工具,如休眠,而不是JDBC,它将POJO对象直接映射到数据库。

但截至目前,请使用此:

List<User> users=new ArrayList<User>();

while(rs.next()) {
   User user = new User();      
   user.setUserId(rs.getString("UserId"));
   user.setFName(rs.getString("FirstName"));
  ...
  ...
  ...


  users.add(user);
}