본문 바로가기

Dev.BackEnd/Spring Boot

[Spring boot] Spring-Boot에서 JDBC Driver 설정하고 사용하기


Spring boot + jdbc driver 로 데이터베이스 사용 환경 설정

1. application.properties 에 해당 코드를 추가한다.
code>>
1
2
3
4
5
spring.application.name=SpringBootJdbc
spring.datasource.url=jdbc:mysql://localhost/dbproject?autoReconnect=true&useSSL=false
spring.datasource.username=root
spring.datasource.password=(****)
spring.datasource.dirverClassName=com.mysql.jdbc.Driver
cs

해당하는 Database를 dbproject라는 자리에 적어두자.
그리고 useSSL=fasle 최근에 추가된 SSL 강제성 때문에 각종 오류가 발생하는 것을 방지하기 위해서
SSL 사용을 하지 않는다고 명시적으로 나타내주는 구문이다.


2. Maven Dependency 추가
jdbc 드라이버 추가
1
2
3
4
5
6
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-jdbc -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
    <version>1.4.1.RELEASE</version>
</dependency>
cs

mysql-connector 추가
1
2
3
4
5
6
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>6.0.4</version>
</dependency>
cs



3. 데이터베이스를 연동할 실제 JAVA 구현 코드 ( Test 용 )
데이터를 운반할 VO(Value Object)를 구현
User.java>>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package com.jbee.domain;
 
public class User {
 
    private int userNum;
    private String userName;
 
    public int getUserNum() {
        return userNum;
    }
 
    public void setUserNum(int userNum) {
        this.userNum = userNum;
    }
 
    public String getUserName() {
        return userName;
    }
 
    public void setUserName(String userName) {
        this.userName = userName;
    }
 
    @Override
    public String toString() {
        return "User{" +
                "userNum=" + userNum +
                ", userName='" + userName + '\'' +
                '}';
    }
}
cs

Mysql에 특화된  DAO(Data Access Object) 구현(실제 프로젝트에서는 Interface를 사용하여 DBMS에 독립적으로 설계)
UserDao.java>>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package com.jbee.domain;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
 
import java.util.List;
 
@Repository
public class UserDao {
    @Autowired
    private JdbcTemplate jdbcTemplate;
 
    public List<User> listForBeanPropertyRowMapper() {
        String query = "SELECT * FROM user";
        return jdbcTemplate.query(query, new BeanPropertyRowMapper<User>(User.class));
    }
 
    public int insert(User user){
        String query = "INSERT INTO user(userNum, userName) VALUES(?,?)";
        return jdbcTemplate.update(query, user.getUserNum(), user.getUserName());
    }
}
cs


4. 실제 작동하는지 보기 위한 클래스 설정
Controller 생성
MainController.java>>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package com.jbee.web;
 
import com.jbee.domain.User;
import com.jbee.domain.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
 
@Controller
public class MainController {
    @Autowired
    private UserDao userDao;
 
    @GetMapping("/")
    public String mainPage() {
        return "index";
    }
 
    @PostMapping("/user")
    public String userAdd(User user) {
        System.out.print(user);
        userDao.insert(user);
        return "redirect:/user";
    }
 
    @GetMapping("/user")
    public String userlistPage(Model model) {
        model.addAttribute("users", userDao.listForBeanPropertyRowMapper());
        return "/userlist";
    }
}
cs

값을 입력받을 html 파일 구현 ( input tag의 post 방식 데이터 송신 )
index.html>>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Test</title>
</head>
<body>
<h1>Text</h1>
  <form action="/user" method="post">
    <input type="number" name="userNum" placeholder="number">
    <input type="text" name="userName" placeholder="name">
    <button type="submit">Submit</button>
  </form>
</body>
</html>
cs

값을 출력할 html 파일 구현 ( mustache 템플릿 엔진을 통한 값 출력 )
userList.html>>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Test</title>
</head>
<body>
<h1>UserList</h1>
<div>
  {{#users}}
  <ul>
    <li>{{userNum}}</li>
    <li>{{userName}}</li>
  </ul>
  {{/users}}
</div>
</body>
</html>
cs

이제 애플리케이션을 실행해보면, index.html 로 접속되어 두 개의 input을 컨트롤러로 보내게 된다. 이 input은 컨트롤러에서 Database에 insert 되고, redirect가 userlist.html 로 되면서, input된 value에 대해 select 쿼리를 실행하여, 값이 출력된다.


End