본문 바로가기
Spring Framework

spring boot 1.5.17 버전 jpa 로 데이터 베이스 조작 mysql

by 자유코딩 2018. 11. 15.

스프링으로 웹 개발을 할 때 DB에 어떻게 접근하는게 좋을까


몇가지 방법이 있다.


1. 직접 자바 코드를 작성해서 DB에 접근 


2. ORM을 사용하는 방법


1번은 권장하지 않는다.


접근을 수월하게 해주는 ORM 이라는 도구가 있기 때문이다.


쿼리를 매핑해주는 Mybatis 를 쓰기도 한다.


DB 조작시 많이 사용되는 것은 3가지가 있다.


1. Mybatis - xml 을 활용해서 쿼리를 매핑한다.


2. JPA - ORM 으로써 자바 코드로 DB 조작을 더 수월하게 할 수 있게 한다.


3. Hibernate - ORM 으로써 자바 코드로 DB 조작을 더 수월하게 할 수 있게 한다.


사실 Mybatis 는 우리나라에서만 많이 쓴다. 그것도 좋지 않은 SI 에서만.


아무튼 spring boot 에서 많이 쓰이는 jpa 에 대해서 알아본다.


관련 자료 링크 : https://spring.io/guides/gs/accessing-data-mysql/


링크에 있는 코드를 가져다 쓰면 된다.


가져다 쓰는 방법


관련 자료 링크에 들어간다.


사이트에 들어간다.




클릭해서 복사한다.



이 프로젝트를 가져올 것이다.


import 를 클릭한다.



next 를 클릭한다.



clone URI 를 선택한다.


next 를 클릭한다.


github 주소를 입력한다.


복사해서 URI에 붙여 넣으면 나머지는 알아서 작성된다.


next 를 클릭한다.



next 를 클릭한다.


browse 를 클릭해서 현재 경로로 변경한다.


next 를 클릭한다.


import as general project 를 선택한다.


next를 클릭한다.


finish 를 클릭한다.


프로젝트를 확인한다.


이런 프로젝트가 생성됐다.


이제 여기 있는 내용을 내 프로젝트로 복사해서 붙여 넣을 것이다.


프로젝트를 하나 더 만든다. 만들 때 Gradle 로 지정한다.


Maven pom.xml보다 Gradle이 더 좋다.


관련 글 링크 : https://bkim.tistory.com/13



next 를 클릭한다.


이번 글에서는 mysql 을 다룰 것이다.



version은 1.5.17 을 선택했다.


next를 클릭한다.



finish를 클릭한다.


생성된 프로젝트



그럼 이제 git 에서 가져온 프로젝트를 복사한다.



여기서 MainController , User , UserRepository를 복사한다.



package 등등 import 문이 잘못 작성되어서 에러가 나는 부분을 고친다.



application.properties를 작성한다.


자신의 mysql 정보를 입력하면 된다.



spring.jpa.hibernate.dll-auto부분이 조금 중요하다.


이 옵션을 create로 해놓으면 프로그램을 새로 실행 했을 때, db 에 있는 것들이 모두 사라진다.


db를 새로 만든다. 그러므로 validate로 할 것을 권장한다.


각 항목의 소스코드


Springjpa6Application.java


1
2
3
4
5
6
7
8
9
10
11
12
13
package com.example;
 
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
 
@SpringBootApplication
public class Springjpa6Application {
 
    public static void main(String[] args) {
        SpringApplication.run(Springjpa6Application.class, args);
    }
}
 
cs



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
34
35
36
37
38
39
package com.example.controller;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
 
import com.example.model.User;
import com.example.repository.UserRepository;
 
@Controller    // This means that this class is a Controller
@RequestMapping(path="/demo"// This means URL's start with /demo (after Application path)
public class MainController {
    @Autowired // This means to get the bean called userRepository
               // Which is auto-generated by Spring, we will use it to handle the data
    private UserRepository userRepository;
    
    @GetMapping(path="/add"// Map ONLY GET Requests
    public @ResponseBody String addNewUser (@RequestParam String name
            , @RequestParam String email) {
        // @ResponseBody means the returned String is the response, not a view name
        // @RequestParam means it is a parameter from the GET or POST request
        
        User n = new User();
        n.setName(name);
        n.setEmail(email);
        userRepository.save(n);
        return "Saved";
    }
    
    @GetMapping(path="/all")
    public @ResponseBody Iterable<User> getAllUsers() {
        // This returns a JSON or XML with the users
        return userRepository.findAll();
    }
}
 
cs


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
32
33
34
35
36
37
38
39
40
41
package com.example.model;
 
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
 
@Entity // This tells Hibernate to make a table out of this class
public class User {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer id;
 
    private String name;
 
    private String email;
 
    public Integer getId() {
        return id;
    }
 
    public void setId(Integer id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getEmail() {
        return email;
    }
 
    public void setEmail(String email) {
        this.email = email;
    }   
}
cs


UserRepository.java


1
2
3
4
5
6
7
8
9
10
11
12
13
package com.example.repository;
 
import org.springframework.data.repository.CrudRepository;
 
import com.example.model.User;
 
// This will be AUTO IMPLEMENTED by Spring into a Bean called userRepository
// CRUD refers Create, Read, Update, Delete
 
public interface UserRepository extends CrudRepository<User, Integer> {
 
}
 
cs


프로젝트를 실행한다.




매개변수를 맞춰서 send 하면 saved 가 출력된다.


db확인



select 문으로 결과를 확인했다.


다른 db는 db에 맞춰서 주소 , username , password 를 입력하면 될 것이다.


끝.

댓글