【发布时间】:2015-04-22 19:54:18
【问题描述】:
我的应用程序中有一个对象产品。这个对象里面有一个项目列表(ArrayList)。在数据库中,我有 2 个表:产品和项目。商品的产品 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()));
}
在 ItemsDao 类中,我只是根据发送的 ID 获取产品的项目列表。
所以问题是如何调用产品列表并获取每个产品中的项目列表? (也许在一个复杂的 SQL 语句中?)。现在性能很糟糕,因为当有 30 个产品,每个产品有 10 个项目时,要获取整个产品列表,它必须调用数据库这么多次。
【问题讨论】:
标签: java mysql database object jdbctemplate