SpringBoot JPA 表关联查询
来源:互联网 发布:好易网络电视下載 编辑:程序博客网 时间:2024/05/22 02:18
今天给大家介绍一下如何利用JPA实现表关联查询。
今天给大家举一个一对多的关联查询,并且是使用JPA原生的findBy语句实现的。
例子中总共有两个实体类,一个是Floor(商品楼层类),另一个是FloorContent(商品楼层内容表)。下面看两张表的源代码:
Floor类:
package cms.model;import cms.model.base.BaseDomain;import org.hibernate.annotations.GenericGenerator;import javax.persistence.*;import java.io.Serializable;import java.util.List;/** * Created by Roney on 2016/10/10. * 楼层管理 * */@Entity@Table(indexes = {@Index(name = "idx_floor_user",columnList = "user_id")})public class Floor extends BaseDomain implements Serializable { @Id @GenericGenerator(name = "PKUUID", strategy = "uuid2") @GeneratedValue(generator = "PKUUID") @Column(length = 36) protected String id; /** * 发布用户ID */ @Column(length = 36,name = "user_id") private String userId; /** * 楼层名称 */ private String name; /** * 楼层的模板路径 */ private String templateUrl; /** * 类型 * 1.管理端 * 2.供应商 */ private Integer type; /** * 排序 */ @Column(name = "show_index", nullable = false) private Integer showIndex; /** * 是否禁用 * */ @Column(nullable = false) private Boolean isDisable=false; @OneToMany(fetch = FetchType.LAZY,mappedBy = "floor") private List<FloorContent> floorContents; public List<FloorContent> getFloorContents() { return floorContents; } public void setFloorContents(List<FloorContent> floorContents) { this.floorContents = floorContents; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getTemplateUrl() { return templateUrl; } public void setTemplateUrl(String templateUrl) { this.templateUrl = templateUrl; } public Integer getShowIndex() { return showIndex; } public void setShowIndex(Integer showIndex) { this.showIndex = showIndex; } public Boolean getDisable() { return isDisable; } public void setDisable(Boolean disable) { isDisable = disable; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Floor floor = (Floor) o; return id != null ? id.equals(floor.id) : floor.id == null; } @Override public int hashCode() { return id != null ? id.hashCode() : 0; }}FloorContent类:
package cms.model;import cms.model.base.BaseDomain;import org.hibernate.annotations.GenericGenerator;import javax.persistence.*;import java.io.Serializable;/** * Created by Roney on 2016/10/10. * 楼层的内容 */@Entity@Table(indexes = {@Index(name = "idx_floor_content_user", columnList = "user_id")})public class FloorContent extends BaseDomain implements Serializable { @Id @GenericGenerator(name = "PKUUID", strategy = "uuid2") @GeneratedValue(generator = "PKUUID") @Column(length = 36) protected String id; /** * 发布用户ID */ @Column(length = 36, name = "user_id") private String userId; /** * 內容名稱 */ private String name; /** * * 內容圖片 */ @Column(length = 256) private String contentImageUrl; /** * 類型 * 1.超鏈接 * 2.圖片檢索 */ private Integer type; /** * 超鏈接url */ private String linkUrl; /** * 圖片檢索內容 */ private String picSearchContent; /** * 排序 */ @Column(name = "show_index", nullable = false) private Integer showIndex; /** * 是否禁用 */ @Column(nullable = false) private Boolean isDisable = false; @ManyToOne @JoinColumn(name = "floor_id",foreignKey = @ForeignKey(name = "fk_floor_fc")) private Floor floor; public Floor getFloor() { return floor; } public void setFloor(Floor floor) { this.floor = floor; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getContentImageUrl() { return contentImageUrl; } public void setContentImageUrl(String contentImageUrl) { this.contentImageUrl = contentImageUrl; } public Integer getType() { return type; } public void setType(Integer type) { this.type = type; } public String getLinkUrl() { return linkUrl; } public void setLinkUrl(String linkUrl) { this.linkUrl = linkUrl; } public String getPicSearchContent() { return picSearchContent; } public void setPicSearchContent(String picSearchContent) { this.picSearchContent = picSearchContent; } public Integer getShowIndex() { return showIndex; } public void setShowIndex(Integer showIndex) { this.showIndex = showIndex; } public Boolean getDisable() { return isDisable; } public void setDisable(Boolean disable) { isDisable = disable; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; FloorContent that = (FloorContent) o; return id != null ? id.equals(that.id) : that.id == null; } @Override public int hashCode() { return id != null ? id.hashCode() : 0; }}实体类已经出来了,现在具体说说怎么利用JPA中findBy来实现关联查询:
package cms.model.repository;import cms.model.Floor;import cms.model.FloorContent;import org.springframework.data.domain.Page;import org.springframework.data.domain.Pageable;import org.springframework.data.jpa.repository.JpaRepository;/** * Created by Roney on 2016/10/10. * Created by Roney on 2016/10/10. * 楼层内容管理dao类 */public interface FloorContentRepos extends JpaRepository<FloorContent,String>{ public Page<FloorContent> findByFloor_IdAndIsDeleteOrderByShowIndexAsc(String floorId,boolean b, Pageable pageable);}从例子中就可以看出JPA关联查询主要在“_”这个符号的使用,下面来给大家具体的介绍一下这个符号到底代表什么含义。
首先findBy是必须写的,表示使用JPA规则进行查询。
如果查询的是本张表中的内容,例如查询本张表中的name字段就可以这么写:findByName()。
如果查询的是楼层中的name字段就可以这么写:findByFloor_Name()。
如果是既要查询本张表中的name字段,也要查询楼层中的name字段,就可以这么写:findByFloor_NameAndName()。
从上面的案例就可以看出可以在findBy后面添加要关联的实体类,然后在实体类后面写上“_”,"_"符号后面是添加关联表的字段而不是本身表的字段,这点要记住。如何还想关联更多的表可以在后面添加:And+表名字+“_”+表中要查询的字段。或者只是想关联本身的查询字段可以在后面添加:And+查询的字段。
千万不要写错了,写错的话运行都运行不起来的。所以写的时候要多看看是否符合规则。
千万不要写错了,写错的话运行都运行不起来的。所以写的时候要多看看是否符合规则。
如果大家想要源代码或者对博客有啥异议都可以加我QQ:208017534 欢迎打扰哦!!!
1 0
- SpringBoot JPA 表关联查询
- SpringBoot-JPA进行多表连接查询
- Spring boot jpa 多表关联查询
- 基于SpringBoot的Jpa查询
- spring data jpa 表不关联多表查询
- springBoot JPA 查询中出现的问题
- JPA表映射-关联
- JPA 多对多关联查询
- 如何实现mybatis+Springboot 关联查询
- springboot jpa
- Springboot+Jpa
- springboot jpa
- springboot jpa
- JPA的查询语言—JPQL的关联查询
- JPA的查询语言—JPQL的关联查询
- JPA的查询语言:JPQL的关联查询
- JPA的查询语言:JPQL的关联查询
- 转载 spring-data-jpa 介绍 复杂查询,包括多表关联,分页,排序等
- 3346 数据结构实验之二叉树七:叶子问题
- SSM框架---搭建示例(业务原理并附源码下载)
- 入坑markdown!
- 新国王释放犯人
- android 打造真正的下拉刷新上拉加载recyclerview(二):添加删除头尾部
- SpringBoot JPA 表关联查询
- openjudge每日推荐——9271奶牛散步
- Hadoop完全分布式安装-高可用(HA)
- eclipse快捷键以及使用技巧大全
- 小加法计算器的实现,遇到的问题
- Clang:fatal error:'stdio.h' file not found的解决方法
- 资料
- C++运算符优先级
- bootstrap学习总结-css样式设计(二)