簡體   English   中英

我如何在 Spring Boot 中編寫連接

[英]How do I Write joins in spring boot

我是spring boot的初學者,我正在研究數據庫實體。 現在我處於一種情況,我需要在spring boot項目中使用join來從不同的表中獲取數據。

我有 3 個表itemcategoryissued_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;

FromDateToDate是兩個不同的參數。


注意:如果有人需要實體代碼,那么我會提供它。

在這種情況下使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM