我的應用程序中有一個對象產品。這個對象有一個列表項(ArrayList)。在數據庫中我有兩個表格:Product和Item。商品具有與產品ID相關的外部產品ID。從數據庫獲取對象列表
從數據庫獲取產品並獲取產品清單非常簡單。
如何從數據庫中獲取產品列表,其中將包含所有相關項目?
據我所知,爲列表中的每個產品調用dao效率不高。如何管理查詢或創建對象以使其更高效?
我正在使用Spring JdbcTemplate從數據庫中獲取數據。目前,我正在獲取DAO類中的產品列表,並直接從那裏爲每個項目調用ItemDAO。數據庫是MySQL。
更新 好的,可能我在第一種方法中還不清楚。目標是從數據庫獲取嵌套列表以及如何使其在性能方面更好。
public class Product {
private Integer id;
private String name;
private String description;
private ArrayList<Item> items;
private Timestamp timeAdded;
}
public class Item {
private String name;
private Float price;
private String type;
private Integer productId;
}
public ArrayList getProducts(String searchName) throws SQLException {
ArrayList<Product> products = new ArrayList<Product>();
String sql = "SELECT * FROM product WHERE name LIKE '%" + searchName + "%'";
List<Map> rows = getJdbcTemplate().queryForList(sql);
for (Map row : rows) {
Product product = setNewProduct(row);
products.add(product);
}
return products;
}
private Product setNewProduct(Map row) {
Product product = new Product();
product.setId((Integer) row.get("id"));
product.setName((String) row.get("name"));
product.setDescription((String) row.get("description"));
ItemsDao itemsDao = (ItemsDao) appContext.getBean("itemsDao");
ArrayList<Item> items = itemsDao.getItems(product.getId());
if (items.size() > 0) {
product.setItems(items);
}
product.setTimeAdded(new java.util.Date(((Timestamp) row.get("time_added")).getTime()));
}
In ItemsDao class我只是根據發送的ID獲取產品的物品列表。
所以問題是如何調用產品列表並獲取每個產品中的物品清單? (也許在一個複雜的SQL語句?)。現在性能非常糟糕,因爲當有30種產品每種都有10種產品時,爲了獲得整個產品列表,必須多次調用數據庫。