好吧,这真的很尴尬,我为数据检索目的制作了一个标准的 pojo 类及其 dao 类。我很难理解如何处理 Pojo 类的自定义查询数据的基本过程。
假设我的 User 类是
public class User{
private int userId;
private String username;
private int addressId;
}
public class Address{
private int addressId;
private String zip;
}
public class UserDAO{
public void getUserDetails(){
String getSql = select u.userId, u.username, a.zipcode from user u, address a where u.addressId = a.addressId;
//no pojo class is now specific to the resultset returned. so we can't map result to pojo object
}
}
现在我应该如何使用我的 pojo 类对此进行建模,就好像使用 String 来管理它一样,然后面向对象的概念消失了, future 的复杂性也会增加。请指导!
进一步解释的更新
我们知道我们可以用相同的 pojo 类映射相同的表对象,但是当查询被自定义并且返回的数据没有映射到任何特定的类时,那么程序是什么?即我们应该再开一个类吗?或者我们应该把这些数据扔到一个字符串变量中?请举一些例子。
最佳答案
为此,您可以使用 JPA 的实现之一。但是当你想手动完成时,我会给你一个小例子。
UPD:
public class User {
private int userId;
private String username;
private Address address; // USE POJO not ID
}
public class Address{
private int addressId;
private String zip;
List<User> users;
}
public User getUserById(Connection con, long userId) {
PreparedStatement stmt;
String query = "select u.user_id, u.user_name, a.id, a.zip from user u, address a where a.address_id = u.id and u.id = ?";
User user = new User();
Address address = new Address;
try {
stmt = con.prepareStatement(query);
stmt.setLong(1, userId);
ResultSet rs = stmt.executeQuery();
address.setId(rs.getInt("id"));
address.setZip(rs.getString("zip");
user.setId(rs.getInt("id"));
user.setUsername(rs.getString("user_name"));
user.setAddressId(rs.getInt("address_id"));
user.setAddress(address); // look here
} catch (SQLException e) {
if (con != null) {
try {
System.err.print("Transaction is being rolled back");
con.rollback();
} catch (SQLException excep) {
}
}
} finally {
if (stmt != null) {
stmt.close();
}
}
return user;
}
你不应该为那个查询做新的 POJO,你应该写普通的查询。请记住 - 您的对象模型是主要的,数据库中的表只是保存应用程序数据的一种方式。