我使用的是Spring JDBC,我不知道什麼是最好的:連接所有的表,以便我可以獲取我想要填充的對象或做多個選擇查詢的所有關聯?如何處理在Spring中連接表時需要連接多個表來獲取對象的所有數據?一次加入所有表或多個查詢?
回答
一般來說,最好連接儘可能多的表格,因爲您會從對象中引用這些表格。您帶回的列數不會太多,以致於無法爲您的其他數據多次調用數據庫。
唯一真正的例外是,如果你想從多對一的關聯數據。因此,例如,如果您選擇Car
並加入Wheel
s,那麼您將爲每輛車取回四行,這並不是真正的問題。但是,如果您加入Wheels
和Seats
,您將獲得16排汽車的4個座位。這種加入創造了笛卡兒的產品,所以在這種情況下,第二個獲得座位的詢問可能是必要的,除非你只會選擇幾輛汽車。
爲了解決使用Spring JDBC加入時重寫映射代碼的問題,考慮打破RowMapper。免責聲明:我主要使用Hibernate,並不熟悉Spring的JdbcTemplate,儘管我已經使用了它。讓我舉一個例子爲一到一個連接:
private Car mapCar(ResultSet rs) throws SQLException {
Car car = null;
while (rs.next()) {
if (car == null) {
Long carId = rs.getLong("ID");
String model = rs.getString("MODEL");
car= new Car(carId, model);
}
car.setEngine(mapEngine(rs));
}
return car;
}
你既可以有一個mapEngine()
方法CarRepository
特定於汽車或你可以作出公開mapEngine()
方法對你EngineRepository
您調用類從mapCar()
。如果你使用後者,你可能會有名稱衝突,所以你的選擇變量可能是有序的。即使如此,如果CarMapper
和EngineMapper
都包含rs.getLong("ID")
,您可能別無選擇,只能創建一個單獨的公共映射器。所以,你可能有這樣一個公共方法:
public Engine mapEngineShared(ResultSet rs) throws SQLException {
Engine engine = new Engine();
engine.setId("ENGINE_ID"); // Aliased from "ID"
engine.setId("ENGINE_MODEL_TYPE"); // Aliased from "MODEL_TYPE"
return engine;
}
而且在任何查詢,將這種方式映射,確保與ENGINE_
別名你的引擎領域與共享映射器的兼容性。這不是一個理想的解決方案,但可以讓您避免在任何地方都有重複的映射代碼。
對於一個-to-many關聯,你就需要使用ResultSetExtractor
因爲RowMappers
一次只能處理一個行會給你複製Cars
爲每Wheel
。該方法將是相同的,但在適當情況下重用RowMappers
。
如果最終使用複雜連接的原因很多,因爲您的數據模型和業務邏輯傾向於需要這些連接,並且您發現創建映射器很笨拙,您可以考慮一個ORM解決方案來處理映射。再說一次,如果你真的沒有發現不使用連接的性能問題,你最好少用它們,並堅持使用JdbcTemplate的簡單性。
- 1. 如何避免在查詢中多次加入同一個表?
- 2. SQL查詢加入多個表以滿足所有條件或任何回報
- 3. 加入兩個查詢到一個查詢或製作一個子查詢
- 4. SQL:將所有字段或多個查詢插入爲1查詢?
- 5. 多表查詢加入
- 6. SQL加入多個表查詢
- 7. 加入多個表的查詢涉及
- 8. 加入codeigniter查詢中的多個表
- 9. 如何多次加入同一個表
- 10. LINQ查詢具有多個左加入
- 11. 加入一對多查詢
- 12. SQL查詢合併多個結果或加入表
- 13. JPA多個查詢加入
- 14. 多次查詢多個表格
- 15. 如何加入具有所有計數的另一個表的計數查詢?
- 16. 加入來自三個表的所有信息的查詢
- 17. 多個表(一個是子查詢)加入
- 18. 多次插入查詢
- 19. 多次運行MySQL INSERT查詢(將值插入多個表)
- 20. 在另一個查詢中查詢加入兩個表
- 21. 查詢加入3個表
- 22. 查詢輸入必須包含至少一個表或查詢
- 23. 查詢MySQL表格一次以獲取所有類別的所有列表
- 24. 如何查詢具有多個值的表中有一列加入
- 25. 多個MySQL查詢或一個有多個JOIN?
- 26. SQL:查詢一個表基礎上加入對具有多個匹配
- 27. MySQL查詢:一個表的所有記錄加上另一個表的計數
- 28. 有一個顯示所有結果的查詢兩次
- 29. 加入多一次?
- 30. SQL查詢:加入4個表:一對多
取決於您的表格有多大,以及您之後的列。 – Makoto 2013-03-17 20:30:32
它從10行到2000行不等。 – LuckyLuke 2013-03-17 20:37:21