SpringBoot 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;
/**
* Q
*/
private String name;
/**
*
* D
*/
@Column(length = 256)
private String contentImageUrl;
/**
*
* 1.
* 2.D z
*/
private Integer type;
/**
* url
*/
private String linkUrl;
/**
* D z
*/
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 + 검색 필드를 추가할 수 있습니다.
절대 잘못 쓰지 마세요. 잘못 쓰면 운행도 안 돼요.그래서 쓸 때 규칙에 맞는지 많이 봐야 한다.
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.