월루를 꿈꾸는 대학생

[Spring Boot] Rest API & MySQL & MyBatis 연동 본문

Programing/Spring Boot

[Spring Boot] Rest API & MySQL & MyBatis 연동

하즈시 2022. 12. 23. 16:32
728x90

데이터 베이스에 테이블과 속성을 만들 경우 

객체의 이름과 변수이름이랑 같도록 

 

데이터베이스 및 테이블 생성

CREATE TABLE `springboot`.`userprofile` (
  `id` INT NOT NULL,
  `name` VARCHAR(64) NULL,
  `phone` VARCHAR(64) NULL,
  `address` VARCHAR(256) NULL,
  PRIMARY KEY (`id`));

 

 

데이터베이스랑 테이블 생성 확인 

 

 

이제 코드랑 디비랑 연결해야함

 

mysql 라이브러리랑 

sql 매핑 기술 

 

2가지가 필요 

 

mysql이랑 mybatis 추가 

 

gradle 파일에 해당 문구 추가 

//mysql connector
implementation 'mysql:mysql-connector-java'
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.0'

 

applicaion.properties 파일에 디비 설정 추가 

비밀번호는 8자 이상 넣어야 에러 안 남 

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root 
spring.datasource.password=
spring.thymeleaf.cache=false

 

자바와 sql 매핑하는 게 필요 

mapper 전용 인터페이스를 만들곡 sql문이랑 매핑하기 

파라미터의 경우 ${} 가 아니라 #{} 임 

@Mapper
public interface UserProfileMapper {

    //전달받은 id로 데이터베이스 테이블에서 조회후 객체를 리턴
    //이거랑 매핑할 sql문을 어노테이션으로 지정
    //id 표시할 때 $ 가 아니라 # 임
    @Select("SELECT * FROM UserProfile WHERE id=#{id}")
    // 파라미터로 전달된 id가 sql문에 가고 sql문이 실행
    // 리턴을 해당 디비에 있는 값들을 리턴하고 UserProfile에 반환
    UserProfile getUserProfile(@Param("id") String id);


    @Select("SELECT * FROM UserProfile")
    List<UserProfile> getUserProfileList();


    // sql문에 의해 적용 혹은 영향받은 레코드의 갯수를 반환
    // 보통 insert 1개 , update도 1 , delete 도 1 -> 제대로 동작할때
    // 0이면 제대로 동작 x
    @Insert("INSERT INTO UserProfile VALUES(#{id}, #{name}, #{phone}, #{address})")
    int insertUserProfile(@Param("id") String id, @Param("name") String name, @Param("phone") String phone, @Param("address") String address);

    @Update("UPDATE UserProfile SET name=#{name}, phone=#{phone}, address=#{address} WHERE id=#{id}")
    int updateUserProfile(@Param("id") String id, @RequestParam("name") String name, @RequestParam("phone") String phone, @RequestParam("address") String address);


    @Delete("DELETE FROM UserProfile WHERE id = #{id}")
    int deleteUserProfile(@Param("id") String id);

}

 

컨트롤러에서 해당 경로와 put,get 이런 거에 따라서 

해당하는 함수가 호출되면 해당 호출되는 함수에 있는 mapper의 함수가 어노테이션에서 연동되는 sql문이 실행되고 결과값을 리턴하게 됨 

 

    @GetMapping("/user/{id}")
    public UserProfile getUserProfile(@PathVariable("id") String id) {
        // UserProfile 객체 리턴하면 자동으로 JSON형태로 만들어줌
        //return userMap.get(id);

        //mapper에 정의된 getUserProfle이 호출되고 거기에 연동된 sql문 실행된 후 결과를 UserProfile로 리턴
        return mapper.getUserProfile(id);
    }

    @GetMapping("user/all")
    public List<UserProfile> getUserProfileList() {
        //맵에 있는 리스트를 array value로 리턴
        //return new ArrayList<UserProfile>(userMap.values());

        return mapper.getUserProfileList();
    }

    // put 같은 거는 브라우저말고 postman같은 툴을 쓰자
    @PutMapping("/user/{id}")
    // http 형태의 파라미터로 값 전달
    public void putUserProfile(@PathVariable("id") String id, @RequestParam("name") String name, @RequestParam("phone") String phone, @RequestParam("address") String address) {
        // 데이터 생성시 패스로 아이디 받고 , 파라미터로 나머지 값을 받네
        // UserProfile userProfile = new UserProfile(id, name, phone, address);
        //위에서 만든 객체 추가
        //userMap.put(id, userProfile);
        mapper.insertUserProfile(id, name, phone, address);
    }

    //수정
    @PostMapping("/user/{id}")
    public void postUserProfile(@PathVariable("id") String id, @RequestParam("name") String name, @RequestParam("phone") String phone, @RequestParam("address") String address) {
        //얘는 수정용임
//        UserProfile userProfile = userMap.get(id);
//        userProfile.setName(name);
//        userProfile.setPhone(phone);
//        userProfile.setAddress(address);
        mapper.updateUserProfile(id, name, phone, address);

    }

    @DeleteMapping("/user/{id}")
    public void deleteUserProfile(@PathVariable("id") String id) {
        //userMap.remove(id);
        mapper.deleteUserProfile(id);
    }

 

 

전체 코드 

https://github.com/suhyun96/SpringBoot/tree/main/RestAPI

 

GitHub - suhyun96/SpringBoot: 스프링 부트 공부한 내용 정리용

스프링 부트 공부한 내용 정리용. Contribute to suhyun96/SpringBoot development by creating an account on GitHub.

github.com

 

출처

https://youtu.be/QzHkJsALmyw

 

728x90