SpringBoot JPA 테이블 관련 질의 인스턴스

9022 단어 springbootjpa
오늘은 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 + 검색 필드를 추가할 수 있습니다.
절대 잘못 쓰지 마세요. 잘못 쓰면 운행도 안 돼요.그래서 쓸 때 규칙에 맞는지 많이 봐야 한다.
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기