我正在使用Spring JDBC,但是我不确定如何使用多个一对多关系(或多对多关系)。在这种情况下,我正在将一个存储库注入(inject)到我的一个结果计算器中,以便可以检索其关联。这是这样做的方法吗?不好吗还有其他更好的方法吗?
注意:我没有注入(inject)存储库
public class SomeResultSetExtractor implements ResultSetExtractor {
public Object extractData(ResultSet rs) throws SQLException, DataAccessException {
List result = new LinkedList();
while (rs.next()) {
SomeObject object = new SomeObject(rs.getString(1), rs.getLong(2));
result.add(object);
List<AnotherObject> otherObjects = anotherRepository.findAllById(object.getId);
object.setOtherObjects(otherObjects);
// and so on
}
return result;
}
}
Okey,所以在阅读Dmytro Polivenok答案之后,我改为使用RowMapper界面,并且我目前正在使用其他存储库来填充所有关联,如我在示例中所示。这是一个好方法吗?
最佳答案
我认为,一般来说,Spring JDBC和SQL查询的一个好习惯是对每个实体使用一个查询。
例如。假设此模型:
我将建立3个查询,3个Daos,3个ResultSetExtractors/RowcallbackHandlers:
带有readCustomerData(客户或列表)的
如果要在1个查询中进行烘烤,则必须建立一些逻辑来还原笛卡尔积。
对于许多人:
我可能会建立:
这样,您可以重复使用ProductDao.readProducts用于