기존 순수자바로 연결할 때는
- HikariCP
- Pstmt
- ResultSet
- Connection
위와 같은 연결 관련 객체들을 전부 직접 생성하여 사용했다.하지만 Spring Boot는 DB설정 정보인 DataSource만 지정해두면 자동으로 위의 객체들을 Bean으로 생성해 관리해두기 때문에 DataTemplate 객체 하나로 전부 사용할 수 있다.
DataSource는 yml파일의 형태로 설정해둘 수 있다.
Spring Boot에서 jdbc에 필요한 연결정보 및 기능들을 전부 담고 있는 클래스
DataSource, pstmt, rs 등등 기존에 나눠져 있던 요소들을 전부 포함하고 있다.
(DataSource 설정을 해두었다면 @Repository Bean이 생성될 때 자동으로 JdbcTemplate 내부에서 사용될 여러 객체들에 의존성 주입 됨)
//연결
public int save(BoardCreateReq req){
int res = jdbcTemplate.update("INSERT INTO board (title, contents) values (?, ?)",
req.getTitle(),
req.getContents());
return res;
}
실행되는 application의 각종 설정을 조작하는 파일로 여러개를 사용할 수 있으며 yml특성상 공백도 문법에 포함된다.
기본 서버의 포트번호를 변경하는 등 서버와 관련된
IP,포트번호,id,pwd등 db연결과 관련된 설정을 할 수 있다.
이 경우 보안을 위해 민감한 정보는 ${DBUSERNAME} 등으로 우선 비워두고 환경변수에서 설정해준다.
로깅 레벨을 설정하여 로그의 상세도를 제어할 수 있다.
예시 코드
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: myuser
password: mypassword
jpa:
hibernate:
ddl-auto: update
show-sql: true
logging:
level:
org.springframework: INFO
http 요청
DB 테이블
Controller
@RestController
@RequestMapping("/board")
public class BoardController {
private final BoardService boardService;
public BoardController(BoardService boardService) {
this.boardService = boardService;
}
@PostMapping(value = "/create")
public ResponseEntity<String> create(
@RequestBody BoardCreateReq boardCreateReq
){
String res = boardService.create(boardCreateReq);
return ResponseEntity.ok(res);
}
}
Service
public class BoardService {
private final BoardRepository boardRepository;
public BoardService(BoardRepository boardRepository) {
this.boardRepository = boardRepository;
}
public String create(BoardCreateReq boardCreateReq){
int result = boardRepository.save(boardCreateReq);
if (result > 0){
return boardCreateReq.getTitle()+"저장 성공";
}else {
return "저장 실패";
}
}
}
Repository
@Repository
public class BoardRepository {
private JdbcTemplate jdbcTemplate;
public BoardRepository() {
}
//생성자가 하나일경우에만 생략 가능
@Autowired
public BoardRepository(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public int save(BoardCreateReq req){
int res = jdbcTemplate.update("INSERT INTO board (title, contents) values (?, ?)",
req.getTitle(),
req.getContents());
return res;
}
}