참고 : goddaehee.tistory.com/205?category=367461

 

[스프링부트 (4)] Spring Boot DataBase 연동하기 (MariaDB, MyBatis, HikariCP)

[스프링부트 (4)] 스프링부트 DB 연동 (MariaDB, MyBatis, HikariCP) 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ SpringBoot DB 연동] 입니다. : ) 0. 들어가기 앞서 Spring Boot를 사용하면서 DB를연결하기..

goddaehee.tistory.com

github 링크 : github.com/Mistive/SpringBoot/commit/83f1586ce41d1d7c928d6d08bee1d09a111fc52c#diff-18ce661d1fc3d790f60910ad9c3c5192

 

MariaDB 적용하기 · Mistive/SpringBoot@83f1586

* MariaDB에 데이터 추가해서 출력해보기

github.com

▶커넥션풀(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 수정

▶ 결과


 

+ Recent posts