**guestbook
⇒하나의 테이블을 생성하고 테이블에 대한 CRUD 작업을 수행하는 애플리케이션으로 출력은 thymeleaf를 이용하고 데이터베이스 연동은 JPA(Hibernate로 구현)를 사용
전체 디렉토리
1.개발환경
1)Language: Java11
2)Framework: Spring Boot, Bootstrap
3)Database: MySQL 8.0
4)IDE : Intellij
5)WAS:Tomcat
2.프로젝트 생성 및 기본 설정
1)기본 의존성
- Spring Boot Dev Tools
- Lombok
- Spring Web
- Thymeleaf
- Spring Data JPA
- MariaDB Driver
@Query annotation을 사용했을 때의 단점을 보안하고자 Querydsl을 사용 독려
@MappedSuperclass:테이블로 생성하지 않은 Entity 클래스
2)thymeleaf에서 날짜를 포맷에 맞게 출력하는 라이브러리 의존성을 bulid.gradle에 추가
implementation group: 'org.thymeleaf.extras', name: 'thymeleaf-extras-java8time'
3)application.properties
#MariaDB
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.username=#
spring.datasource.password=#
spring.datasource.url=jdbc:#/#?useUnicode=yes&characterEncoding=UTF-8&serverTimezone=UTC
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.database-platform=org.hibernate.dialect.MariaDB103Dialect
logging.level.org.hibernate.type.descriptor.sql=trace
#Live Reload
spring.devtools.livereload.enabled=true
spring.thymeleaf.cache=false
4)프로젝트 실행
⇒콘솔 메세지 확인
5)레이아웃 설정
⇒부트스트랩(반응형 웹을 쉽게 적용하기 위한 자바스크립트 라이브러리)을 적용한 SimpleSidebar 다운로드
https://startbootstrap.com/template/simple-sidebar
⇒다운로드 받은 파일 압축 해제
⇒압축을 해제한 3개의 디렉토리와 하나의 html 파일을 resources/static 디렉토리에 복사
⇒templates 디렉토리에 layout (기본 레이아웃 파일 설정) 디렉토리를 생성 ⇒templates 디렉토리에 guestbook (화면에 보여지는 뷰)디렉토리 생성
3.메인 화면 출력
GuestbookApplication
@Controller
@Log4j2 //로그기록 용
public class GuestBookController {
@GetMapping({"/","/guestbook/list"})
public String List(){
log.info("list.................");
return "guestbook/list";
}
}
4.데이터 생성 날짜와 수정 날짜를 자동으로 설정하기 위한 작업
1)Spring Boot와 Application 클래스 상단에 JPA에 감시 위한 설정을 추가
@EnableJpaAuditing
2)데이터 생성 날짜와 수정날짜를 갖는 상위 Entity클래스 생성
BaseEntity
@MappedSuperclass
//Jpa를 감시하고 있다가 데이터를 수정
@EntityListeners(value = {AuditingEntityListener.class})
@Getter
public abstract class BaseEntity {
//데이터 생성 날짜를 설정
@CreatedDate
@Column(name="regdate", updatable = false)
private LocalDateTime regDate;
//데이터의 마지막 수정 날짜를 설정
@LastModifiedDate
@Column(name="moddate")
private LocalDateTime modDate;
}
3) 방명록 테이블과 연동할 Entity클래스 생성
GuestBook
package com.ynsoft.guestbook.entity;
import lombok.*;
import javax.persistence.*;
@Entity
//Getter밖에 안 만들면 수정은 못함
@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class GuestBook extends BaseEntity{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long gno;
@Column(length =100, nullable = false)
private String title;
@Column(length =1500, nullable = false)
private String content;
@Column(length =50, nullable = false)
private String writer;
//수정메소드를 직접 만든다
public void changeTitle(String title){
this.title=title;
}
public void changeContent(String content){
this.content=content;
}
}
4)애플리케이션으로 만들어졌나 확인 && 데이터베이스에 테이블 만들어졌는지 확인
⇒MySQL에서는 GuestBook으로 Entity설정하면 테이블 이름은 guest_book으로 설정
5.GuestBook Entity의 CRED작업을 위한 Repository 인터페이스 생성
1)Repository를 Test하기 위한 클래스를 src/test/java 디렉토리에 생성
RepositoryTest
@SpringBootTest
public class RepositoryTest {
@Autowired
private GuestBookRepository guestBookRepository;
}
2)데이터 삽입 테스트
RepositoryTest
@SpringBootTest
public class RepositoryTest {
@Autowired
private GuestBookRepository guestBookRepository;
//데이터 삽입테스트
@Test
public void inserTest(){
//300개의 가상 데이터 삽입
IntStream.rangeClosed(1,300).forEach(i->{
GuestBook guestBook = GuestBook.builder()
.title("Title...."+i)
.content("Content_"+i)
.writer("user" + (i %10))
.build();
guestBookRepository.save(guestBook);
});
}
}
주의**
*MariaDB ⇒MariaDB인데 GenerationType.AUTO)로하면 테이블은 생성 되지만, 삽입은 불가.
GeneratedValue(strategy = GenerationType.IDENTITY)
3)데이터 수정
RepositoryTest
@Test
public void updateTest() {
//데이터 1개 찾아오기
Optional<GuestBook> result = guestBookRepository.findById(103L);
//데이터가 존재할 때 수정
if(result.isPresent()){
GuestBook guestBook = result.get();
guestBook.changeTitle("제목변경");
guestBook.changeContent("내용수정");
guestBookRepository.save(guestBook);
}
//데이터가 존재하지 않을 때
else{
System.out.println("데이터가 존재하지 않음");
}
}
Optional isPresent() Null을 확인하는 JAVA Code
4)데이터 삭제
@Test
public void deleteTest() {
//데이터 1개 찾아오기
Optional<GuestBook> result = guestBookRepository.findById(103L);
//데이터가 존재할 때 수정
if(result.isPresent()){
GuestBook guestBook = result.get();
guestBookRepository.delete(result.get());
}
//데이터가 존재하지 않을 때
else{
System.out.println("데이터가 존재하지 않음");
}
}
5)전체데이터 가져오기 테스트
@Test
public void selectTest() {
List<GuestBook> list=
guestBookRepository.findAll();
for(GuestBook guestBook : list){
System.out.println(guestBook);
}
}
'Spring > GuestBook' 카테고리의 다른 글
GuestBook #4 검색 디테일부터 마무리까지 (0) | 2022.10.29 |
---|---|
GuestBook #3 페이징 처리가 되어있는 목록보기부터 검색까지 (0) | 2022.10.29 |
GuestBook #2 Querydsl 사용을 위한 설정부터 까지 처리 메서드선언까지 (0) | 2022.10.29 |
댓글