我有查詢將回傳 8 列用于訂單放置 POC,前 4 行對于幾行(人員詳細資訊)是相同的,剩下的 4 行會有所不同(訂單詳細資訊)。它是一個非標準化表。
COL1 COL2 COL3 COL4 COL5 COL6 COL7 COL8
-----------------------------------------------------
a aaa bbb ccc ddd eee fff ggg
a aaa bbb ccc hhh iii jjj kkk
我的物件看起來像
class OrderBook{
int id;
int name;
String age;
String mailId;
List<Order> orderList;
}
class Order{
String productName;
int price;
int quantity;
String address;
}
我如何遍歷結果集并將行映射到 Orderbook 物件中。回應應如下所示
{
"id": 1,
"name": "dude",
"age" : 22,
"mailId": "[email protected]",
"orderList": [
{
"productName": "Milk",
"price":23,
"quantity":2,
"address": "dude, 1st street"
},
{
"productName": "Egg",
"price":5,
"quantity":10,
"address": "dude, 1st street"
}
]
}
我不知道如何在這里回圈
while(rs.next()){
???
}
uj5u.com熱心網友回復:
如果您直接使用 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;
}
對于初始化轉換器,我使用了單例模式:
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;
}
uj5u.com熱心網友回復:
您應該首先將結果集轉換為 DataObject (OrderBook)。
List<OrderBook> list = new ArrayList<>();
while(rs.next()){
OrderBook orderBook = mapToOrderBook(rs);
list.add(orderBook);
}
您應該撰寫的幾個基本函式。
private List<OrderBook> getOrderBooks();
private OrderBook mapToOrderBook(ResultSet rs);
如果您不知道如何從結果集中獲取資料:
https://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html
然后就可以使用jackson 將List 轉換為json 資料。Spring mvc 已經為你處理好了。
@RequestMapping("/orderbooks")
public List<OrderBook> getOrderBooks() {
return orderbookService.getOrderBooks();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/346489.html
