SpringBoot JPA 表关联查询实例

网友投稿 277 2023-05-25


SpringBoot JPA 表关联查询实例

今天给大家介绍一下如何利用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 floorContents;

public List getFloorContents() {

return floorContents;

}

public void setFloorContents(List 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 || getClahttp://ss() != 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{

public Page findByFloor_IdAndIsDeleteOrderByShowIndexAsc(String floorId,boolean b, Pageable pageable);

}

从例子中就可以看出JPA关联查询主要在“_”这个符号的使用,下面来给大家具体的介绍一下这个符号到底代表什么含义。

首先http://findBy是必须写的,表示使用JPA规则进行查询。

如果查询的是本张表中的内容,例如查询本张表中的name字段就可以这么写:findByName()。

如果查询的是楼层中的name字段就可以这么写:findByFloor_Name()。

如果是既要查询本张表中的name字段,也要查询楼层中的name字段,就可以这么写:findByFloor_NameAndName()。

从上面的案例就可以看出可以在findBy后面添加要关联的实体类,然后在实体类后面写上“_”,"_"符号后面是添加关联表的字段而不是本身表的字段,这点要记住。如何还想关联更多的表可以在后面添加:And+表名字+“_”+表中要查询的字段。或者只是想关联本身的查询字段可以在后面添加:And+查询的字段。

千万不要写错了,写错的话运行都运行不起来的。所以写的时候要多看看是否符合规则。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:详解angular element()方法使用
下一篇:Java身份证验证方法实例详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~