카테고리 없음
[스프링 부트] DB 연동하기
mistive
2020. 10. 4. 16:37
참고 : goddaehee.tistory.com/205?category=367461
▶커넥션풀(Connection Pool)이란?
- 풀(Pool) 속에 데이터베이스와의 연결(커넥션)을 미리 만들어두고, 데이터베이스에 접근 시 풀에 남아있는 커넥션 중 하나를 받아와 사용한 뒤 반환하는 기법이다.
- DBCP(=DataBasce Connection Pool)이라고도 한다.
JDBC(=Java Data Base Connection) 예제 코드
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
sql = "SELECT * FROM T_BOARD"
// 1. 드라이버 연결 DB 커넥션 객체를 얻음
connection = DriverManager.getConnection(DBURL, DBUSER, DBPASSWORD);
// 2. 쿼리 수행을 위한 PreparedStatement 객체 생성
pstmt = conn.createStatement();
// 3. executeQuery: 쿼리 실행 후
// ResultSet: DB 레코드 ResultSet에 객체에 담김
rs = pstmt.executeQuery(sql);
} catch (Exception e) {
} finally {
conn.close();
pstmt.close();
rs.close();
}
}
- 커넥션풀을 이용하여 미리 연결을 만들어놓기 때문에 효과적으로 DB 연결 및 자원 사용이 가능하다.
▶ MariaDB & MyBatis Dependency 추가
pom.xml
<!-- MariaDB -->
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
▶Driver 및 연결 정보 설정 추가
application.properties
spring.datasource.driverClassName= org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/test?characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=스키마계정
spring.datasource.password=비밀번호
▶testMapper.xml 생성 및 Dependency 추가
testMapper.xml
- 생성 경로 : resources/mybatis/test/testMapper.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo2.test.mapper.TestMapper">
<select id="selectTest" resultType="com.example.demo2.test.vo.TestVo"> SELECT 'MISTIVE' AS NAME </select>
</mapper>
application.properties
spring.datasource.driverClassName= org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=1234
# testMapper.xml 위치 지정
# **은 하위 폴더 레벨에 상관없이 모든 경로를 뜻하며, *는 아무 이름이나 와도 된다는것을 뜻합니다.
mybatis.mapper-locations: mybatis/**/*.xml
더보기
추가 사항
application.properties
# mybatis 매핑 type을 짧게 쓰기 위한 설정
# mapper.xml에서 resultType을 지정할 때 com.god.bo.test.vo.TestVo 대신 TestVo로 간략히 할 수 있다.
mybatis.type-aliases-package:com.example.demo2.test.vo
을 추가할 경우
testMapper.xml에서 resultType을 "TestVo"만 써도 된다.
▶TestVo.java 파일 생성하기
- 생성 경로 : com.example.demo2.test.vo.TestVo
- Vo는 MVC에서 M, Model을 의미한다. DTO, VO라고도 표현한다.
package com.example.demo2.test.vo;
public class TestVo {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
▶TestMapper.java 생성
- 생성 경로 : com.example.demo2.test.mapper.TestMapper
- Mapper 인터페이스를 생성한다.
package com.example.demo2.test.mapper;
import java.util.List;
import com.example.demo2.test.vo.TestVo;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Repository
@Mapper
public interface TestMapper {
List<TestVo> selectTest();
}
▶TestService.java 생성
- 생성 경로 : com.example.demo2.test.service.TestService
package com.example.demo2.test.service;
import com.example.demo2.test.mapper.TestMapper;
import com.example.demo2.test.vo.TestVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class TestService {
@Autowired
public TestMapper mapper;
public List<TestVo> selectTest() {
return mapper.selectTest();
}
}
▶TestController.java 생성 및 Service 호출
- 생성 경로 : com.example.demo2.test.controller.TestController
package com.example.demo2.test.controller;
import com.example.demo2.test.service.TestService;
import com.example.demo2.test.vo.TestVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import java.util.List;
@RestController
public class TestController {
@Autowired
TestService testService;
@RequestMapping(value = "/")
public String home() throws Exception{
return "Hello World";
}
@RequestMapping(value = "/test")
public ModelAndView test() throws Exception {
List<TestVo> testList = testService.selectTest();
ModelAndView mav = new ModelAndView();
mav.addObject("list", testList);
return mav;
}
}
▶test.jsp 생성
- 생성 경로 : resources/webapp/WEB-INF/views/test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>View Test Page</title></head>
<body><h2>Hello! ${name}</h2>
<div>JSP List Test</div>
<c:forEach var="item" items="${list}" varStatus="idx"> ${idx.index}, ${item.name} <br/> </c:forEach></body>
</html>
더보기
▶jsp 적용 방법
application.properties
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
devtools.livereload.enabled=true
pom.xml
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
▶구조
▶결과
▶ 주의 사항
▶ 추가 테스트
- test DB에 데이터를 추가하고 출력해보기
▶ DB에 데이터 추가
▶ testMapper.xml 수정
▶ 결과