如果我没记错的话,一旦连接关闭,preparedStatement 就会从缓存中销毁。目前我的应用程序已设置,因此我有一个函数可以根据传入的单个 POJO 对象从数据库中获取 POJO 对象。然后我有另一个函数来获取该表中所有对象的 ID,以用于需要列表的情况,然后在该函数的 while 循环中,我一次获取整个对象。
但是这样做并没有利用缓存的查询,对吗?那么,如果它是一个项目列表或单个项目,那么拥有一个可以利用缓存的preparedstatements 的通用getter SQL 函数的最佳方法是什么?在 PHP 中,我可以通过检查传入的参数是否为数组来轻松完成此操作,但 Java 要求您定义参数对象。
例如,假设用户,这是我目前拥有的:
//Get user object
public User getUser(User user) throws SQLException {
Connection connection = connectionWrapper.getConnection();
String query = "SELECT firstName, lastName FROM users WHERE userId = ?";
PreparedStatement statement = connection.prepareStatement(query);
statement.setInt(1, user.getUserId());
ResultSet rs = statement.executeQuery();
if (rs.next()) {
//Get database details and set into object
}
rs.close();
statement.close();
connection.close();
}
//Get all users
public List<User> getAllUsers() throws SQLException {
List<User> userArr = new ArrayList<User>();
Connection connection = connectionWrapper.getConnection();
String query = "SELECT userId FROM users";
PreparedStatement statement = connection.prepareStatement(query);
ResultSet rs = statement.executeQuery();
while (rs.next()) {
int id = rs.getInt("userId");
User user = new User(id);
getUser(user);
userArr.add(user);
}
rs.close();
statement.close();
connection.close();
return userArr;
}
如果能够让 getUser 函数处理像上面这样的单个对象情况和传入用户对象数组(带有 userId 的集合)并在关闭之前循环遍历数组以获取所有对象的数组情况,那就太好了连接。有没有一种简单的方法可以做到这一点,或者我应该在所有情况下都将一个 User 数组传递给 getUser 函数,即使它只是一个?