SpringBoot Data JPA 關(guān)聯(lián)表查詢的方法
SpringBoot Data JPA實(shí)現(xiàn) 一對(duì)多、多對(duì)一關(guān)聯(lián)表查詢
開發(fā)環(huán)境
- IDEA 2017.1
- Java1.8
- SpringBoot 2.0
- MySQL 5.X
功能需求
通過關(guān)聯(lián)關(guān)系查詢商店Store中所有的商品Shop,商店對(duì)商品一對(duì)多,商品對(duì)商店多對(duì)一,外鍵 store_id存在于多的一方。使用數(shù)據(jù)庫的內(nèi)連接語句。
表結(jié)構(gòu)

tb_shop

tb_store
實(shí)體類,通過注解實(shí)現(xiàn)
1.商店類Store.java
package com.gaolei.Entity;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;
/**
* Created by GaoLei on 2018/6/25.
*/
@Entity
@Table(name = "tb_store")
public class Store {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;//商鋪號(hào)
private String name;//商鋪姓名
private String address;//商鋪地址
private int tel ;//商鋪聯(lián)系
private String info;//商鋪信息
@OneToMany(cascade = CascadeType.ALL,mappedBy = "store")
private Set<Shop> shops = new HashSet<Shop>();
// 省略set()和get()方法;
}
商品類Shop.java
package com.gaolei.Entity;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;
/**
* Created by GaoLei on 2018/6/25.
*/
@Entity
@Table(name = "tb_shop")
public class Shop {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id ; //商品id
private String name;//商品名
private int price;// 商品價(jià)格
private int num;//商品數(shù)量
private String info;//商品信息
@ManyToOne
@JoinColumn(name = "store_id")//外鍵
private Store store;
// 省略set()和get()方法;
}
StoreDao.java
CrudRepository 接口繼承于 Repository 接口,并新增了簡單的增、刪、查等方法。其中封裝好了很多的方法,這里不再概述,自行百度,這里通過自定義HQL語句完成復(fù)雜的操作。
package com.gaolei.Dao;
import com.gaolei.Entity.Store;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* Created by GaoLei on 2018/6/25.
*/
@Repository
public interface StoreDao extends CrudRepository<Store,Integer> {
//此方法通過內(nèi)連接查詢店鋪id=?中的所有商品
@Query("select distinct s from Store s inner join s.shops where s.id = ?1")
List<Store> findByShopList(Integer id);
}
StoreService.java
通過@Autowired注入StoreDao來實(shí)現(xiàn)方法
package com.gaolei.Service;
import com.gaolei.Dao.StoreDao;
import com.gaolei.Entity.Shop;
import com.gaolei.Entity.Store;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* Created by GaoLei on 2018/6/25.
*/
@Controller
@Transactional
public class StoreService {
@Autowired
private StoreDao storeDao;
/**
* 展示商店商品
* */
public List<Store> findByShopList(Integer id){
return storeDao.findByShopList(id);
}
}
StoreAction.java
實(shí)現(xiàn)具體數(shù)據(jù)操作操作
package com.gaolei.Action;
import com.gaolei.Entity.Shop;
import com.gaolei.Entity.Store;
import com.gaolei.Service.ShopService;
import com.gaolei.Service.StoreService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
/**
* Created by GaoLei on 2018/6/26.
*/
@Controller
@RequestMapping("/store")
public class StoreAction {
@Autowired
private StoreService storeService;
/**
* Store_shop_menu展示店鋪商品
* */
@RequestMapping("showShop")
public String showShop(HttpServletResponse response ,HttpServletRequest request,Model model){
String id = request.getParameter("store_id");
//通過HQL語句拿到id=?的商鋪,并拿到該店鋪下所有的商品
List<Store> list = storeService.findByShopList(Integer.valueOf(id));
//返回的為一個(gè)Store集合,Store類和Shop類為一對(duì)多,Store下的shops為List<Shop>。
List<Shop> shopList = new ArrayList<Shop>();
//循環(huán)遍歷拿到每一個(gè)shop,添加到一個(gè)新的List<Shop>中,用于將數(shù)據(jù)在前臺(tái)展示。
for (Store store:list){
System.out.println(store.getName());
for (Shop shop: store.getShops()) {
System.out.println(shop.getName());
shopList.add(shop);
}
}
model.addAttribute("list",shopList);
return "admin/showShop";
}
}
前臺(tái)頁面跳轉(zhuǎn)

查看的店鋪

店鋪商品
省略前端代碼,主要的是@Query("****************")中語句使用,配合數(shù)據(jù)庫的各種連接能實(shí)現(xiàn)復(fù)雜的操作。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Struts2中json 相互引用死循環(huán)解決辦法
本篇文章主要介紹詳解Struts2中json 相互引用死循環(huán)解決辦法,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-01-01
@RequestAttribute和@RequestParam注解的區(qū)別及說明
這篇文章主要介紹了@RequestAttribute和@RequestParam注解的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
Java SpringMVC實(shí)現(xiàn)國際化整合案例分析(i18n)
本篇文章主要介紹了Java SpringMVC實(shí)現(xiàn)國際化整合案例分析(i18n),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
IntelliJ IDEA連接MySQL數(shù)據(jù)庫詳細(xì)圖解
今天小編就為大家分享一篇關(guān)于intellij idea連接mysql數(shù)據(jù)庫詳細(xì)圖解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-10-10
IDEA在一個(gè)工作空間中管理多個(gè)項(xiàng)目的詳細(xì)步驟
這篇文章主要介紹了IDEA在一個(gè)工作空間中管理多個(gè)項(xiàng)目的詳細(xì)步驟,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
Java中zip文件壓縮與解壓之ZipInputStream和ZipOutputStream
這篇文章主要給大家介紹了關(guān)于Java中zip文件壓縮與解壓之ZipInputStream和ZipOutputStream的相關(guān)資料,ZipInputStream 和 ZipOutputStream 可以用于處理 ZIP文件格式,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10
Java實(shí)現(xiàn)的文件上傳下載工具類完整實(shí)例【上傳文件自動(dòng)命名】
這篇文章主要介紹了Java實(shí)現(xiàn)的文件上傳下載工具類,結(jié)合完整實(shí)例形式分析了java針對(duì)文件上傳下載操作的相關(guān)實(shí)現(xiàn)技巧,并且針對(duì)上傳文件提供了自動(dòng)命名功能以避免文件命名重復(fù),需要的朋友可以參考下2017-11-11
SpringCloudGateway網(wǎng)關(guān)處攔截并修改請(qǐng)求的操作方法
這篇文章主要介紹了SpringCloudGateway網(wǎng)關(guān)處攔截并修改請(qǐng)求的操作方法,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-12-12

