如果您直接使用 ResultSet,则必须直接从 RS 到 Object 实例实现转换器。并从您的 DAO 层使用它 类似:
@Override
public User getByID(int id) {
OrderBook book = new OrderBook();
try {
PreparedStatement select = OrderBookTransformer.getInstance().getSelectStatementById(id);
ResultSet rs = select.executeQuery();
while (rs.next()) {
book = OrderBookTransformer.getInstance().fromRsToObject(rs);
}
} catch (SQLException e) {
log.error(e);
}
return book;
}
OrderBookTransformer 可能是这样的:
@Override
public OrderBook fromRsToObject(ResultSet rs) {
OrderBook book = new OrderBook();
try {
user.setId(rs.getInt("id"));
user.setName(rs.getInt("name"));
user.setAge(rs.getString("age"));
// set other fields
} catch (SQLException e) {
log.error(e);
}
return user;
}
对于初始化转换器,我使用了 Singleton 模式:
public class OrderBookTransformer implements BaseTranformer<OrderBook> {
private static final Logger log = Logger.getLogger(OrderBookTransformer.class);
private static OrderBookTransformer instance = null;
protected OrderBookTransformer() {
}
public static OrderBookTransformer getInstance() {
if (instance == null) {
instance = new OrderBookTransformer();
}
return instance;
}
然后选择语句类似于:
@Override
public PreparedStatement getSelectStatementById(int id) {
PreparedStatement select = null;
try (Connection connection = ConnectionManager.getConnection()) {
select = connection
.prepareStatement("SELECT FROM order_books WHERE id = ?");
select.setInt(1, id);
} catch (SQLException e) {
log.error(e);
}
return select;
}
我的建议是使用Spring Data,而不是直接处理结果集。
您只需要再执行几个步骤:
- 将
spring data 依赖添加到您的构建工具中
- 将 JPA 注释添加到您的模型及其关系中:
@Entity
class OrderBook {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private Integer name;
private String age;
private String mailId;
@ElementCollection(targetClass = Order.class, fetch = FetchType.EAGER)
@CollectionTable(name = "orders", joinColumns = @JoinColumn(name = "book_id"))
private List<Order> orderList;
// no args constructor + getters/setters
}
@Entity
class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private String productName;
private Integer price; // consider use Double here
private Integer quantity;
private String address;
}
公共 OrderBookRepository 实现 JpaRepository {}
并使用它从数据库中检索数据。