반응형
H2 Database
3가지 모드
- Embedded : 스프링과 같이 구동
- Server : Tcp통신으로 접속할 수 있게 하는 모드
- In-Memory : 데이터를 메모리에 저장하는 방식, 서버를 끄면 사라짐 (휘발성)
application.properties
spring.application.name=H2_jpa
#port
server.port=80
# H2 (mem=메모리모드, 끄면 사라짐)
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
spring.datasource.url=jdbc:h2:mem:test
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
# JPA
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
# spring.jpa.hibernate.ddl-auto 설정
# none - 엔티티가변경되더라도데이터베이스를변경하지않음
# update - 엔티티의변경된부분만적용
# validate - 변경사항검사만진행
# create - 서버가실행시모두삭제하고데이터다시생성
# create-drop - create와동일하지만종료시에도모두삭제
spring.jpa.hibernate.ddl-auto=update
# 콘솔에서실행된쿼리확인(테스트용)
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.show_sql=true
# thymeleaf 참조경로
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
# 리소스변화를반영.
spring.devtools.livereload.enabled=true
실행시켜보기
데이터베이스가 없어도 접속 가능 http://localhost/h2-console
Board
import LocalDateTime;
import Column;
import Entity;
import GeneratedValue;
import Id;
import Builder;
import Data;
import NoArgsConstructor;
@Data
@Entity
@NoArgsConstructor
public class Board {
@Id
@GeneratedValue
private int bno;
@Column(length=50)
private String btitle;
@Column(columnDefinition = "mediumtext")
private String bcontent;
@Column
private LocalDateTime bdate = LocalDateTime.now();
@Column(nullable = false)
private String name;
@Builder
public Board(String btitle, String bcontent, String name) {
this.btitle = btitle;
this.bcontent = bcontent;
this.name = name;
}
}
=> 구동
=> 이렇게 생성해준다.
H2Controller
import LocalDateTime;
import Controller;
import GetMapping;
@Controller
public class H2Controller {
@GetMapping("/insert")
public String insert() {
Board board = new Board("연습1", "본문1", "작성자1");
board.setBdate(LocalDateTime.now());
return "";
}
}
-> 서비스 생성 후, 컨트롤러에 서비스 연결
@Controller
public class H2Controller {
@Autowired
private H2Service h2Service;
@GetMapping("/insert")
public String insert() {
Board board = new Board("연습1", "본문1", "작성자1");
board.setBdate(LocalDateTime.now());
h2Service.insert(board);
return "redirect:/board";
}
}
-> insert 를 서비스에 생성
-> BoardRepository 생성 (인터페이스)
BoardRepository (인터페이스)
인터페이스로 생성하기 > JpaRepository를 추가
import org.springframework.data.jpa.repository.JpaRepository;
public interface BoardRepository extends JpaRepository<Board, Integer> {
}
H2Service.java
@Service
public class H2Service {
@Autowired
private BoardRepository boardRepository;
public void insert(Board board) {
boardRepository.save(board);
}
}
-> localhost/insert 로 접속
-> 500에러가 나는데 이거는 타임리프가 없어서 나는거라서 상 관없음.
-> 다시 localhost/h2-console로 접속해서 [SELECT * FROM BOARD] 실행시키면
H2Controller
@GetMapping("/board")
public String board(Model model) {
model.addAttribute("list", h2Service.findAll());
return "board";
}
-> findAll() 을 서비스에 생성
H2Service
public List<Board> findAll() {
return boardRepository.findAll();
}
board.html
<!DOCTYPE html>
<html lang="ko" th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>board</h1>
<table>
<tr>
<th>번호</th>
<th>제목</th>
<th>날짜</th>
<th>작성자</th>
</tr>
<tr each="row : ${list }">
<td text="${row.bno }"></td>
<td text="${row.btitle }"></td>
<td text="${row.bdate }"></td>
<td text="${row.name }"></td>
</tr>
</table>
</body>
</html>
=> localhost/insert로 접속 시, board로 넘어감
반응형
'개발 공부 Today I Learned' 카테고리의 다른 글
vue 3 mariaDB 연동 backend 연결 (0) | 2024.05.03 |
---|---|
[국비 TIL] 코틀린 기초 (0) | 2024.05.02 |
[국비 101일차 TIL] 취업 준비 기간 (0) | 2024.04.19 |
[국비 100일차 TIL] 취업 준비 시작 (0) | 2024.04.17 |
[국비 99일차 TIL] 프로젝트 관련 문서 작성 (0) | 2024.04.17 |
댓글