Spring Boot

kxsxh·2024년 8월 5일
0
package com.spring.app.model;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
//Spring Data JPA는 "JpaRepository"라는 기능을 사용하면 매우 간단히 데이터를 입력,수정,삭제,검색을 할 수 있게 해준다.

//JpaRepository 인터페이스는 org.springframework.data.jpa.repository 패키지의 "JpaRepository"라는 인터페이스를 상속하여 만든다. 
//아래와 같이 만든다.
//public interface 인터페이스이름 extends JpaRepository <엔티티클래스명, ID필트타입>

//클래스의 선언 앞에 "@Repository"라는 어노테이션이 붙여져 있다. 
//그러면 이 인터페이스가 JpaRepository임을 나타낸다. 스프링레거시 에서는 반드시 @Repository 어노테이션을 붙여 두어야 한다.
//그런데 스프링부트 에서는 @Repository 를 생략해도 가능하다.
@Repository // select , delete 안만든다 .. mybatis같은 경우와 다르다 
public interface BoardRepository extends JpaRepository<Board, Long>{
//JpaRepository<> <> 안에 insert delete 할 것들을 적어줘야 한다 어떤 vo와 연동되어서 select,delete를 해야하는 것인지 
	//Board 클래스가 entity 어떤 테이블인지 board라는 테이블을 만든다   
	// 필드 타입은 Long이다 
	
	
}

엔티티클래스명하고 똑같아야함

package com.spring.app.domain;

import javax.persistence.Entity;

@Entity
public class Board {

}

@Entity를 쓰고 import해야함

@Entity
@Table(name="tbl_board")
public class Board {

}

@table를 해줘야함 --> (name="tbl_board") 이렇게 생성하면 자동적으로 생성이 된다.

package com.spring.app.domain;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Entity
@Table(name="tbl_board")
public class Board {
	
	@Id // 이게 primary key
	/*엔티티의 기본 키로 매핑된 컬럼은 기본 테이블의 기본 키로 가정됩니다. 만약 <code>Column</code> 애노테이션이 지정되지 않은 경우, 기본 키 컬럼 이름은 기본 키 속성 또는 필드의 이름으로 가정됩니다.*/
	@Column(name="num", columnDefinition="NUMBER")
	@SequenceGenerator(name="SEQ_BOARD_GENERATOR", sequenceName = "seq_Board", allocationSize = 1) // sequenceName = "seq_Board" 이것이 오라클에서 말하는 시퀀스 네임
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_BOARD_GENERATOR") //여기에 값을 넣어주는 것은 시퀀스이다 
	private long num; // 게시글 번호
//private String num; -> 이렇게하면 controller에서 	JpaRepository<Board, String> 이렇게 만들어줘야 한다
	private String fk_userId;
	
	
}
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_BOARD_GENERATOR")  
```

@GeneratedValue-> 기본 키 값의 자동 생성을 지정한다
GenerationType.seqence -> 데이터베이스 시퀀스를 사용하여 기본키 값을 생성한다는 것을 의미함

generator-> SEQ_BOARD_GENERATOR 사용할 시퀀스 생성기 이름을 나타낸다

@Id 필드에 이 애노테이션을 붙이면 엔티티가 저장될 때마다 지정된 시퀀스를 사용하여 자동으로 기본 키 값이 할당됩니다.

package com.spring.app.domain;

import java.time.LocalDateTime;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Entity
@Table(name="tbl_board")
public class Board {

	@Id // 이게 primary key
	/*엔티티의 기본 키로 매핑된 컬럼은 기본 테이블의 기본 키로 가정됩니다. 만약 <code>Column</code> 애노테이션이 지정되지 않은 경우, 기본 키 컬럼 이름은 기본 키 속성 또는 필드의 이름으로 가정됩니다.*/
	@Column(name="num", columnDefinition="NUMBER")
	@SequenceGenerator(name="SEQ_BOARD_GENERATOR", sequenceName = "seq_Board", allocationSize = 1) // sequenceName = "seq_Board" 이것이 오라클에서 말하는 시퀀스 네임,, alloctationSize--> 시퀀스 증가치이다
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_BOARD_GENERATOR") //여기에 값을 넣어주는 것은 시퀀스이다 
	private long num; // 게시글 번호
	//private String num; -> 이렇게하면 controller에서 	JpaRepository<Board, String> 이렇게 만들어줘야 한다
	// 초기치를 줄 때는 initialValue = 1 이렇게 주면 된다 초기치를 안주면 1이 된다 
	@Column(name="fk_userid", nullable = false, length = 50, updatable = false ) //nullable = false => null 값을 허용한다 
	// length = 50 --> varchar2 의 50 ,, updatable = falsed --> updatable를 안주면 자동적으로 true가 된다  updatable = false  이렇게하면 수정이 불가하다 
	/*   boolean nullable() default true;

    /**
	 * (Optional) Whether the column is included in SQL INSERT 
	 * statements generated by the persistence provider.
	 */
	private String fk_userId;




	@Column(nullable = false, length = 500)
	private String subject; 

	@Column(nullable = false, length = 4000)
	private String content;

	@Column(name="reg_date", nullable = false, columnDefinition="DATE DEFAULT SYSDATE", updatable = false) //updatable = false =>  수정이 불가하다 .. 
	private LocalDateTime regdate; // JPA는 name="regdate" 이렇게 주는 걸 안좋아한다 반대로   private LocalDateTime reg_date; 이렇게 넣는 것도 안좋다 언더바 금지  
	// 컬럼명에 _가 있는 경우 findBy~ 등으로 검색이 불가능하므로 비록 DB 컬럼명에는 _ 가 있더라도 아래와 같이 자바 필드명에는 _를 넣지 않도록 설정해야 한다.
	// 필드명에 _가 들어가 있는 경우 JpaRepository 상속 받는 인터페이스에서 findBy~ 을 사용하여 검색하는 메소드 작성시 _ 앞은 테이블명 _ 뒤는 컬럼명 으로 인식하기 때문에 이상하게 꼬여지기 때문에 _ 를 넣지 않도록 설정해야 한다.

	@Column(name="readcount",  nullable = false, columnDefinition="NUMBER DEFAULT 0", insertable = false ) // 조회수는 스스로가 UPDATE 해주면 안되기 때문에 정상적으로 UPDATE가 되어야 한다 
	// insertable = false  이 필드는  DEFAULT 0 이 있으므로 insert시 제외
	private int readcount; // 조회수
	// readCount 는 read_count 로 인식되므로 name 속성이 필요--> 그러하여 readcount 이렇게 적어야 한다 
	
	// 연관관계 정의
	



}

0개의 댓글