SpringBoot Data JPA 关联表查询的方法
SpringBoot Data JPA实现 一对多、多对一关联表查询
开发环境
- IDEA 2017.1
- Java1.8
- SpringBoot 2.0
- MySQL 5.X
功能需求
通过关联关系查询商店Store中所有的商品Shop,商店对商品一对多,商品对商店多对一,外键 store_id存在于多的一方。使用数据库的内连接语句。
表结构

tb_shop

tb_store
实体类,通过注解实现
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;//商铺号
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 {
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id ; //商品id private String name;//商品名 private int price;// 商品价格 private int num;//商品数量 private String info;//商品信息 @ManyToOne
@JoinColumn(name = "store_id")//外键
private Store store;
// 省略set()和get()方法;
}
StoreDao.java
CrudRepository 接口继承于 Repository 接口,并新增了简单的增、删、查等方法。其中封装好了很多的方法,这里不再概述,自行百度,这里通过自定义HQL语句完成复杂的操作。
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> { //此方法通过内连接查询店铺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来实现方法
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
实现具体数据操作操作
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));
//返回的为一个Store集合,Store类和Shop类为一对多,Store下的shops为List<Shop>。
List<Shop> shopList = new ArrayList<Shop>();
//循环遍历拿到每一个shop,添加到一个新的List<Shop>中,用于将数据在前台展示。
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";
}
}
前台页面跳转

查看的店铺

店铺商品
省略前端代码,主要的是@Query("****************")中语句使用,配合数据库的各种连接能实现复杂的操作。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
</div>
SpringBoot Data JPA 关联表查询的方法的更多相关文章
- 关于Spring Data JPA 多表查询 返回自定义Vo的问题记录
这两天开了一个新项目,使用SpringBoot+SpringData, 刚做了一个小功能,都是一张表的操作没什么问题,今天设计到了两张表联查,两张表各取了几个字段,组合成了一个vo, 当我用原生sq ...
- Spring data jpa 复杂动态查询方式总结
一.Spring data jpa 简介 首先我并不推荐使用jpa作为ORM框架,毕竟对于负责查询的时候还是不太灵活,还是建议使用mybatis,自己写sql比较好.但是如果公司用这个就没办法了,可以 ...
- jpa 联表查询 返回自定义对象 hql语法 原生sql 语法 1.11.9版本
-----业务场景中经常涉及到联查,jpa的hql语法提供了内连接的查询方式(不支持复杂hql,比如left join ,right join). 上代码了 1.我们要联查房屋和房屋用户中间表,通过 ...
- 【Spring Data 系列学习】Spring Data JPA @Query 注解查询
[Spring Data 系列学习]Spring Data JPA @Query 注解查询 前面的章节讲述了 Spring Data Jpa 通过声明式对数据库进行操作,上手速度快简单易操作.但同时 ...
- 在MyBatis中查询数据、涉及多参数的数据访问操作、插入数据时获取数据自增长的id、关联表查询操作、动态SQL、关于配置MyBatis映射没有代码提示的解决方案
1. 单元测试 在单元测试中,每个测试方法都需要执行相同的前置代码和后置代码,则可以自定义2个方法,分别在这2个方法中执行前置代码和后置代码,并为这2个方法添加@Before和@After注解,然后, ...
- SSH框架的多表查询(方法二)增删查改
必须声明本文章==>http://www.cnblogs.com/zhu520/p/7773133.html 一:在前一个方法(http://www.cnblogs.com/zhu520/p ...
- Mybatis源码分析--关联表查询及延迟加载原理(二)
在上一篇博客Mybatis源码分析--关联表查询及延迟加载(一)中我们简单介绍了Mybatis的延迟加载的编程,接下来我们通过分析源码来分析一下Mybatis延迟加载的实现原理. 其实简单来说Myba ...
- .NetCore中EFCore的使用整理(二)-关联表查询
EF常用处理关联加载的方式有3中:延迟加载(Lazy Loading).贪婪加载 (Eager Loading)以及显示加载. 一.EF Core 1.1 1.当前的版本,还不支持延迟加载(Lazy ...
- SSH框架的多表查询(方法二)
必须声明本文章==>http://www.cnblogs.com/zhu520/p/7773133.html 一:在前一个方法(http://www.cnblogs.com/zhu520/p ...
随机推荐
- jsp中非空判断
function中uname要和id的值相匹配,但是这样不专业,要显示我的专业性,我将使用document获得name的值来判断是否为空,应为这样是专业的写法,我要时刻记住我是专业的 <scri ...
- 在阿里云上搭建nginx + ThinkPHP 的实践
作为一个程序猿,理应用linux系统来作为平时的工作机环境,哎,之前倒是用过一段时间的linux,可惜后来换了本本,后来竟然没有保持,嗷嗷后悔中... 废话不多说,大家用windows的理由都一样,但 ...
- R Programming week1-Subsetting
Subsetting There are a number of operators that can be used to extract subsets of R objects. [ alway ...
- darknet+opencv在windows上的编译
darknet 源码网站:https://github.com/pjreddie/darknet 技术支持官网:https://pjreddie.com/darknet/ darknet采用C++编写 ...
- 从GridView中直接导出数据到Excel文件 处理导出乱码 类型“GridView”的控件“XXXX”必须放在具有 runat=server 的窗体标记内。”的异常
导出到Excel方法: <span style="color: rgb(0, 0, 255);">public</span> <span style= ...
- IE和DOM事件流、普通事件和绑定事件的区别
IE和DOM事件流的区别 IE采用冒泡型事件 Netscape(网络信息浏览器)使用捕获型事件 DOM使用先捕获后冒泡型事件 示例: <body> <div> <butt ...
- 在PetaPoco中使用Where in
之前一直没在意,今天查了很多资料,才知道在petapoco中使用in关键字需要使用命名参数,否则是无效的(或者只查出第一个条件的记录),示例如下: var tags= new string[]{“c1 ...
- 6-Java-C(无穷分数)
题目描述: 无穷的分数,有时会趋向于固定的数字. 请计算[图1.jpg]所示的无穷分数,要求四舍五入,精确到小数点后5位,小数位不足的补0. 请填写该浮点数,不能填写任何多余的内容. 正确算法: 此题 ...
- pycharm connect to github
这位同学写得非常详细,推荐 http://www.cnblogs.com/feixuelove1009/p/5955332.html#undefined
- [Luogu] P2817 宋荣子的城堡
题目描述 saruka有一座大大的城堡!城堡里面有n个房间,每个房间上面都写着一个数字p[i].有一天,saruka邀请他的小伙伴LYL和MagHSK来城堡里玩耍(为什么没有妹子),他们约定,如果某一 ...