[英]How do I Write joins in spring boot
我是spring boot
的初學者,我正在研究數據庫實體。 現在我處於一種情況,我需要在spring boot
項目中使用join
來從不同的表中獲取數據。
我有 3 個表item
、 category
和issued_item
,我為它編寫了一個query
以從中獲取數據。
query
是:
SELECT issued_item.issued_id,
item.item_name,
issued_item.issued_from,
issued_item.issued_to,
issued_item.quantity,
category.cat_type,
issued_item.issued_date
FROM issued_item
INNER JOIN item ON issued_item.ii_fk = item.item_id
INNER JOIN category ON item.ic_fk = category.cat_id;
現在我對如何在我的spring boot
項目中編寫它感到困惑。
此外,將其提升到一些高級水平,我使用parameters
來訪問以下items
:
SELECT issued_item.issued_id,
item.item_name,
issued_item.issued_from,
issued_item.issued_to,
issued_item.quantity,
category.cat_type,
issued_item.issued_date
FROM issued_item
INNER JOIN item ON issued_item.ii_fk = item.item_id
INNER JOIN category ON item.ic_fk = category.cat_id
WHERE issued_item.issued_date BETWEEN FromDate AND ToDate
ORDER BY issued_item.issued_date ASC;
FromDate
和ToDate
是兩個不同的參數。
注意:如果有人需要實體代碼,那么我會提供它。
在這種情況下使用dto
類有用嗎?
編寫如下,使用返回類型為List<Object []>
。
@Query(value="SELECT issued_item.issued_id,
item.item_name, issued_item.issued_from,
issued_item.issued_to, issued_item.quantity, category.cat_type,
issued_item.issued_date
FROM issued_item
INNER JOIN item
ON issued_item.ii_fk = item.item_id
INNER JOIN category
ON item.ic_fk = category.cat_id
WHERE issued_item.issued_date BETWEEN :fromdate AND
:todate
ORDER BY issued_item.issued_date ASC", nativeQuery= true)
List<Object []> returnObject(@Param("fromdate" Date fromdate, @Param("todate") Date todate );
然后進行迭代獲取值。
for(Object[] obj : result) {
String issueId = (String) obj[0];
//Get others variable also
}
實體類和存儲庫類應該類似於如下所示。 OneToMany 和 ManyToOne 向 JPA 提供主鍵/外鍵信息以連接表。 由於您有不遵循典型命名約定的表字段名稱,因此必須通過 JoinColumn 顯式命名它們。
一旦定義了實體,大多數查詢都是由 JPA 自動生成的 - 您只需要以JPA 要求的格式提供方法聲明
@Entity
@Table(name="item")
class Item{
@Identity
private Long item_id;
....other columns
@OneToMany(fetch = FetchType.EAGER)
private List<IssuedItem> issuedItems;
@ManyToOne
@JoinColumn(name="ic_fk")
private Category category;
}
@Entity
@Table(name="category")
class Category{
@Identity
private Long cat_id;
@OneToMany(fetch = FetchType.EAGER)
private List<Item> items;
....other columns
}
@Entity
@Table(name="issued_item")
class IssuedItem{
....other columns
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="ii_fk")
private Item item;
}
@Repository
class IssuedItemRepository extends JpaRepository<IssuedItem, Long>{
//implementation will be generated by JPA
List<IssuedItem> findAllByIssuedDateBetween(
Date FromDate,
Date ToDate);
}
@Repository
class ItemRepository extends JpaRepository<Item, Long>{
}
@Repository
class CategoryRepository extends JpaRepository<Category, Long>{
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.