일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 친절한SQL튜닝
- 선형대수
- 자료구조와함께배우는알고리즘입문
- 네트워크 설정
- 자료구조와 함께 배우는 알고리즘 입문
- 코드로배우는스프링웹프로젝트
- 스프링 시큐리티
- 이터레이터
- 데비안
- 페이징
- 구멍가게코딩단
- iterator
- 자바편
- network configuration
- resttemplate
- 목록처리
- 깃
- 리눅스
- 알파회계
- 처음 만나는 AI수학 with Python
- 서버설정
- Kernighan의 C언어 프로그래밍
- 병합
- 티스토리 쿠키 삭제
- 스프링부트핵심가이드
- GIT
- 코드로배우는스프링부트웹프로젝트
- merge
- 처음 만나는 AI 수학 with Python
- /etc/network/interfaces
- Today
- Total
목록Framework/Spring (54)
bright jazz music
https://github.com/hojuncha997/bootBoard GitHub - hojuncha997/bootBoard: 코드로 배우는 스프링부트 웹 프로젝트 ch.5 코드로 배우는 스프링부트 웹 프로젝트 ch.5. Contribute to hojuncha997/bootBoard development by creating an account on GitHub. github.com 목록화면에 필요한 데이터 게시물(Board): 게시물 번호, 게시물 작성 시간 회원(Member): 회원 이름/이메일 댓글(Reply): 해당 게시물의 댓글 수 위 3개 엔티티 가운데 가장 많은 데이터를 가져오는 것이 Board이다. 따라서 Board를 중심으로 조인 관계를 형성한다. 조인 후에는 Board를 기준으로 ..
연관관계가 없는 엔티티 조인 처리에는 'ON'을 사용해 줘야 한다. Board와 Member 사이에는 내부적으로 참조를 통해서 연관관계가 있었다. //Board.java ... @ManyToOne(fetch = FetchType.LAZY) //명시적으로 Lazy Loading 지정 private Member writer; //FK 연관관계 지정 //Reply.java ... @ManyToOne private Board board; Board와 Reply는 이러한 관계가 아니다. //Reply.java ... @ManyToOne private Board board; Reply 쪽이@ManyToOne으로 참조하고 Board를 참조하고 있지만 Board에서는 Reply 객체를 참조하고 있지 않다. 이러한 경우..
하나의 엔티티 타입을 이용하여 목록 화면에서 게시글의 정보와 함께 댓글의 수를 함께 가져올 수는 없다. 이에 대한 해결책으로는 보편적으로 쓰이는 방법은 JPQL의 join을 이용하는 것이다. 1. left (outer) join 스프링 부트 2버전 이후 포함되는 JPA(Java Persistence API) 버전은 엔티티 클래스 내에 전혀 연관관계가 없어도 join을 사용할 수 있다. LEFT OUTER JOIN 혹은 LEFT JOIN 을 사용할 수 있다. 조인 시 INNER JOIN 혹은 JOIN 과 같이 일반적인 조인 역시 사용할 수 있다. 엔티티 클래스 내부에 연관관계가 있는 경우 Board 엔티티 클래스의 경우 내부에 Member 엔티티 클래스를 변수로 가짐으로서 연관관계를 맺고 있다. //Boa..
이 포스팅에서는 Lazy Loading의 효과를 알아본다. 1. Board.java를 수정하여 Lazy Loading을 설정 우선 Board 클래스를 아래와 같이 수정한다. //Board.java package com.example.bootboard.entity; import lombok.*; import javax.persistence.*; @Entity @Builder @AllArgsConstructor @NoArgsConstructor @Getter @ToString(exclude = "writer") //이렇게 해준 이유는 아래에서 설명함 public class Board extends BaseEntity{ @Id @GeneratedValue(strategy = GenerationType.IDEN..
두 개 이상의 엔티티 간의 연관 관계를 맺고 나면, 엔티티 클래스들이 실제 DB 상에서는 두 개 혹은 두 개 이상의 테이블로 생성된다. 따라서 연관관계를 맺고 있다는 것은 DB의 입장에서는 조인이 필요하다는 뜻이 된다. 실제로 @ManyToOne의 경우 FK 쪽의 엔티티를 가져올 때 PK 쪽의 엔티티도 함께 가져온다. 1. BoardRepositoryTests를 통해 Member를 @ManyToOne으로 참조하고 있는 Board를 조회하는 테스트 코드 작성 //BoardRepositoryTests.java package com.example.bootboard.repository; import com.example.bootboard.entity.Board; import com.example.bootboar..
연관관계 테스트 현재 3개의 테이블이 PK와 FK의 관계로 이루어져 있다. 따라서 테스트를 위한 데이터를 추가하는 작업도 PK 쪽에서부터 시작하는 것이 좋다. 테스트를 위해 프로젝트 내 test 폴더에 repository 폴더를 생성한다. 그 안에 각 엔티티 클래스를 다루는 아래의 클래스를 생성한다. MemberRepositoryTests, BoardRepositoryTests, ReplyRepositoryTests 테스트 데이터 추가하기 MemberRepositoryTests.java MemberRepository를 주입하고 예제로 사용할 Member객체를 100개 추가한다. package com.example.bootboard.repository; import com.example.bootboard...
스프링부트 DB 없이 구동하는 법 스프링부트 db없이 구동하는 법 package com.alg_web.alg_web; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; //아래처럼 @SpringBootApplication 어노테이션에 다음과 같은 파라미터 등록 (exclude = DataSourceAutoConfiguration.class) @SpringBootApplication(exclude = D..
1. @ManyToOne 어노테이션 DB구조로 보면 앞으로 생성될 board 테이블과 member테이블에는 FK를 이용한 참조가 걸려있게 된다. member 테이블의 email을 board에서 FK로 참조하는 구조이다. JPA에서 관계를 고민할 때는 FK쪽을 먼저 해석해 보면 편리하다. 따라서 FK를 사용하는 board 먼저 살펴본다. board와 member는 N:1(다대일)의 관계가 된다. 따라서 이를 의미하는 @ManyToOne을 적용해야 한다. @ManyToOne은 DB상에서 외래키의 관계로 연결된 엔티티 클래스에 설정한다. Board클래스는 작성자가 Member엔티티를 의미하므로 아래와 같이 FK를 참조하는 부분을 추가한다. 1-1. Board 클래스의 변경(Member writer 작성) //..
1. entity 패키지 생성하고 BaseEntity.java 추가하기 entity 패키지는 이후 추가할 엔티티 클래스들을 보관하는 용도로 사용한다. BaseEntity는 추후 작성할 엔티티클래스들이 상속(extends) 할 클래스이다. package com.example.bootboard.entity; import lombok.Getter; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; import javax...
● bootboard라는 이름의 프로젝트 생성하여 다대일 연관관계를 실습하자 1. 프로젝트 생성 2. DB연결 설정(build.gradle & application.properties) 2-1. build.gradle 설정 추가 mariadb-java-client (jdbc) thymeleaf-extras-java8time (타임리프의 시간 처리 관련 라이브러리) 수정 후 gradle refresh 필수!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //build.gradle plugins { id 'org.springframework.boot' version '2.7.2' id 'io.spring.dependency-management' version '1.0.12.RELEASE' id '..