Spring/Spring

Spring + SIA ๊ทธ๋ฃน์Šคํ„ฐ๋””(3์žฅ) :) mybatis3 ๊ธฐ๋ณธ CRUD๋ฅผ ์ดํ•ดํ•œ๋‹ค.

euncheol kim 2022. 5. 22. 14:02

๐Ÿ‘จ‍๐Ÿ‘จ‍๐Ÿ‘ฆ‍๐Ÿ‘ฆ SpringInAction Group Study [์ด์ฑ„๋ฏผ, ๊ถŒํƒœ๊ตฌ, ์ตœ์žฌํ˜ธ, ๊ณฝํ˜„๊ธฐ, ๊น€์€์ฒ ]

group - GIT : https://github.com/euncheol-kim/SpringInActionGroupStudy

 

์ด์ฑ„๋ฏผ ๋‹˜ : https://github.com/CokeLee777

๊ถŒํƒœ๊ตฌ ๋‹˜ : https://github.com/Hashtae9

์ตœ์žฌํ˜ธ ๋‹˜ : https://github.com/jaero0725

๊ณฝํ˜„๊ธฐ ๋‹˜ : https://github.com/nicebyy

๊น€์€์ฒ  (๋ณธ์ธ): https://github.com/euncheol-kim

 

์ž‘์„ฑ์ž : ๊น€์€์ฒ 

 




goal

jdbc ํ”„๋ ˆ์ž„์›Œํฌ์ธ mybatis์™€ Database(mySQL)์„ ์ด์šฉํ•ด ๊ธฐ๋ณธ์ ์ธ CRUD๋ฅผ ์ดํ•ดํ•œ๋‹ค.

  • mybatis ํ”„๋กœ์ ํŠธ ์„ค๋ช…
  • mybatis_2 ํ”„๋กœ์ ํŠธ ์„ค๋ช…
  • mybatis์ด๋ก 

 

 

 


Euncheol-Kim ์›๊ฒฉ๋ธŒ๋žœ์น˜ ์‹ค์Šต ํ”„๋กœ์ ํŠธ ํŒŒ์ผ ๊ตฌ์„ฑ

ํ”„๋กœ์ ํŠธ๋ช… ์„ค๋ช…
mybatis class ๋‚ด๋ถ€์—์„œ์˜ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ/์‚ญ์ œ/์ˆ˜์ •/์ €๊ฑฐ์˜ RestAPI (JDBC ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์•„๋‹˜)
mybatis_2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ๋ฐ mabatis๋ฅผ ์ด์šฉํ•œ RestAPI CRUD

 

์‹ค์ŠตํŒŒ์ผ ํŒŒ์ผ GIT

GIT

 

GitHub - euncheol-kim/SpringInActionGroupStudy: SpringInAction ์Šคํ„ฐ๋”” ์ €์žฅ์†Œ์ž…๋‹ˆ๋‹ค.

SpringInAction ์Šคํ„ฐ๋”” ์ €์žฅ์†Œ์ž…๋‹ˆ๋‹ค. Contribute to euncheol-kim/SpringInActionGroupStudy development by creating an account on GitHub.

github.com

 

 

1. ํŒŒ์ผ๋ช… : mybatis


[1] ๊ฐœ์š”


Database๋ฅผ ์—ฐ๊ฒฐํ•˜์ง€ ์•Š๊ณ  class ๋‚ด๋ถ€์—์„œ์˜ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ / ์‚ญ์ œ / ์ˆ˜์ • / ์ œ๊ฑฐ์˜ RestAPI๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

 

[2] ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ์‹œ ์ข…์†์„ฑ ์„ค์ •


  • Spring Web
  • Spring Data jdbc
  • lombok
  • Spring Boot DevTools
  • MySQL Driver

 

[3] ์„ค์ •๊ตฌ์„ฑ


ํŒจํ‚ค์ง€ ํŒŒ์ผ๋ช… ์„ค๋ช…
src/main/java/resources application.properties mysql๋“œ๋ผ์ด๋ฒ„ ์„ค์ • ๋ฐ mysql ์—ฐ๊ฒฐ
  pom.xml jdbc์˜์กด์„ฑ์„ค์ •
mySQL์˜์กด์„ฑ์„ค์ •

 

  • pom.xml
 <!-- mySQL JDBC ์ข…์†์„ฑ -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>

<!-- mySQL์ข…์†์„ฑ -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

 

  • application.properties
# Load the mysql driver (Database ์ข…๋ฅ˜๋งˆ๋‹ค ์šฐ์ธก์— ๋“ค์–ด๊ฐ€๋Š” ๋‚ด์šฉ์ด ์ƒ์ด)
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# Connect the mysql database (Database ์ข…๋ฅ˜๋งˆ๋‹ค ์šฐ์ธก์— ๋“ค์–ด๊ฐ€๋Š” ๋‚ด์šฉ์ด ์ƒ์ด)
spring.datasource.url=jdbc:mysql://localhost:3306/user?serverTimezone=UTC&characterEncoding=UTF-8

# mysql username
spring.datasource.username=root 

# mysql password
spring.datasource.password=1234



* ์„ค์ •์„ํ•˜๋ฉฐ ํ•ด๊ฒฐ์ด ๋˜์ง€ ์•Š์•˜๋˜ ๊ถ๊ธˆ์ฆ

mysql์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์‹ค์Šต์ด๋ผ pom.xml์˜ mysql dependency ์‚ญ์ œ application.properties์˜ jdbc๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋‚ด์šฉ์„ ์‚ญ์ œํ•˜๊ณ  ์‹คํ–‰ํ–ˆ๋”๋‹ˆ error๊ฐ€ ๋‚˜์™”์Šต๋‹ˆ๋‹ค.


์ œ๊ฐ€ ์ƒ๊ฐํ•˜๊ธฐ์—” mysql๊ณผ ๊ด€๋ จ๋œ ๋‚ด์šฉ์˜ ์˜์กด์„ฑ์„ ์ง€์›Œ์ฃผ๊ณ  ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ, ๋ฌธ์ œ ์—†์ด ๋™์ž‘ํ•ด์•ผํ•˜๋Š” ๊ฒƒ ์•„๋‹Œ๊ฐ€์š”?

 

 

 

[4] mybatis์˜ ํŒŒ์ผ ๊ตฌ์„ฑ


ํŒจํ‚ค์ง€ ํŒŒ์ผ ์„ค๋ช…
src/main/java/com.example.mybatis UserController.java RestFull CRUD์˜ ๊ธฐ๋Šฅ์„ ๋‹ด์€ ํŒŒ์ผ
src/main/java/mybatis.model User Model

 

  • User.java
package mybatis.model;

import lombok.Data;
import lombok.RequiredArgsConstructor;

@Data // lombok annotation : ๋ณ€์ˆ˜์— ๋Œ€ํ•œ getter & setter์ƒ์„ฑ
public class User {
    private String id;
    private String name;
    private String phone;
    private String address;

    public User(String id, String name, String phone, String address) {
        super();
        this.id = id;
        this.name = name;
        this.phone = phone;
        this.address = address;
    }
}

 

  • UserController.java
package com.example.mybatis;

import mybatis.model.User;
import org.springframework.web.bind.annotation.*;

import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


// RestAPI ์ƒ์„ฑ - class๋‚ด๋ถ€์—์„œ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ/์‚ญ์ œ/์ˆ˜์ •/์ œ๊ฑฐ

@RestController
public class UserController {
    private Map<String, User> userMap;

    @PostConstruct // ์ดˆ๊ธฐํ™” ์ง„ํ–‰
    public void init() {
        userMap = new HashMap<String, User>();
        userMap.put("1", new User("1", "ํ™๊ธธ๋™", "111-1111", "์„œ์šธ์‹œ ๊ฐ•๋‚จ๊ตฌ ๋Œ€์น˜1๋™"));
        userMap.put("2", new User("2", "ํ™๊ธธ์ž", "111-1112", "์„œ์šธ์‹œ ๊ฐ•๋‚จ๊ตฌ ๋Œ€์น˜2๋™"));
        userMap.put("3", new User("3", "ํ™๊ธธ์ˆœ", "111-1113", "์„œ์šธ์‹œ ๊ฐ•๋‚จ๊ตฌ ๋Œ€์น˜3๋™"));
    }

    @GetMapping("/user/{id}") // id๊ฐ’์„ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ๋ฐ˜ํ™˜
    public User getUser(@PathVariable("id") String id) {
        return userMap.get(id);
    }

    @GetMapping("/user/all") // ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๋ฐ˜ํ™˜
    public List<User> getUserList() {
        return new ArrayList<User>(userMap.values()); // https://docs.oracle.com/javase/8/docs/api/java/util/Map.html -> Map์˜ ๋ฐ์ดํ„ฐ๋“ค์„ ArrayList๋กœ ๋ฐ”๊พผ๋‹ค.
    }

    @PutMapping("/user/{id}") //๋ฐ์ดํ„ฐ ์ƒ์„ฑ
    public void putUser(@PathVariable("id") String id, @RequestParam("name") String name, @RequestParam("phone") String phone, @RequestParam("address") String address){
        User user = new User(id, name, phone, address);
        userMap.put(id, user);
    }

    @PostMapping("/user/{id}") //๋ฐ์ดํ„ฐ ์ˆ˜์ •
    public void postUser(@PathVariable("id") String id, @RequestParam("name") String name, @RequestParam("phone") String phone, @RequestParam("address") String address){
        User user = userMap.get(id);
        user.setName(name);
        user.setPhone(phone);
        user.setAddress(address);
    }

    @DeleteMapping("/user/{id}") //๋ฐ์ดํ„ฐ ์‚ญ์ œ
    public void deleteUser(@PathVariable("id") String id){
        userMap.remove(id);
    }

}

 

  • @PathVariable

(ex) -> @PathVariable "id" String id

์‚ฌ์šฉ์ž ์ž…๋ ฅ("id"์— ํ•ด๋‹น)์„ id๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„์™€ ๋‚ด๋ถ€์ ์œผ๋กœ ์ฒ˜๋ฆฌ

 

  • @RequestParam

(ex) -> @RequestParam("address") String address

๊ฐ์ฒด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.



2. ํŒŒ์ผ๋ช… : mybatis_2


[1] ๊ฐœ์š”


mysql์„ spring๊ณผ ์—ฐ๊ฒฐํ•˜์—ฌ mybatis framework๋ฅผ ํ†ตํ•ด CRUD๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.

  • mybatis frameowrk = ORM framework (๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ๋งคํ•‘ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ์ˆ )
  • mabatis๋Š” ์ž๋ฐ” ์˜ค๋ธŒ์ ํŠธ์™€ SQL์‚ฌ์ด์˜ ์ž๋™ ๋งคํ•‘ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•œ๋‹ค.

 

[2] ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ์‹œ ์ข…์†์„ฑ ์„ค์ •


  • Spring Web
  • Spring Data jdbc
  • lombok
  • Spring Boot DevTools
  • MySQL Driver

 

[3] ์„ค์ •๊ตฌ์„ฑ


ํŒจํ‚ค์ง€ ํŒŒ์ผ๋ช… ์„ค๋ช…
src/main/java/resources application.properties mysql๋“œ๋ผ์ด๋ฒ„ ์„ค์ • ๋ฐ mysql ์—ฐ๊ฒฐ
  pom.xml jdbc์˜์กด์„ฑ์„ค์ •
mySQL์˜์กด์„ฑ์„ค์ •

 

  • pom.xml
 <!-- mySQL JDBC ์ข…์†์„ฑ -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>

<!-- mySQL์ข…์†์„ฑ -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

 

  • application.properties <enviroment>
# Load the mysql driver (Database ์ข…๋ฅ˜๋งˆ๋‹ค ์šฐ์ธก์— ๋“ค์–ด๊ฐ€๋Š” ๋‚ด์šฉ์ด ์ƒ์ด)
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# Connect the mysql database (Database ์ข…๋ฅ˜๋งˆ๋‹ค ์šฐ์ธก์— ๋“ค์–ด๊ฐ€๋Š” ๋‚ด์šฉ์ด ์ƒ์ด)
spring.datasource.url=jdbc:mysql://localhost:3306/user?serverTimezone=UTC&characterEncoding=UTF-8

# mysql username
spring.datasource.username=root 

# mysql password
spring.datasource.password=1234

 



[4] mybatis_2์˜ ํŒŒ์ผ ๊ตฌ์„ฑ

ํŒจํ‚ค์ง€ ํŒŒ์ผ ์„ค๋ช…
src/main/java/com.example.mybatis UserController.java RestFull CRUD์˜ ๊ธฐ๋Šฅ์„ ๋‹ด์€ ํŒŒ์ผ
src/main/java/mybatis.model User Model
src/main/java/mapper UserMapper mybatis framework๋ฅผ ์ด์šฉํ•ด ๊ตฌ์„ฑํ•œ interface



  • User.java <typeAlias ์„ค์ •>
package mybatis.model;

import lombok.Data;

@Data // lombok annotation : ๋ณ€์ˆ˜์— ๋Œ€ํ•œ getter & setter์ƒ์„ฑ
public class User {
    private String id;
    private String name;
    private String phone;
    private String address;

    public User(String id, String name, String phone, String address) {
        super();
        this.id = id;
        this.name = name;
        this.phone = phone;
        this.address = address;
    }
}

 

  • UserMapper.java <mapper๋“ฑ๋ก>
package com.example.mybatis_2.mapper;

import mybatis.model.User;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper //Mapper ์ธํ„ฐํŽ˜์ด์Šค
public interface UserMapper {

    @Select("SELECT * FROM User WHERE id=#{id}")
    User getUser(@Param("id") String id); //์ „๋‹ฌ๋œ id๋ฅผ ๊ฐ€์ง€๊ณ  database์—์„œ ์กฐํšŒ๋ฅผํ•ด์„œ User ๊ฐ์ฒด๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” api
    // @Param์–ด๋…ธํ…Œ์ด์…˜ ๋•๋ถ„์— ๋งค๊ฐœ๋ณ€์ˆ˜ id๊ฐ€ #{id}์— ๋งคํ•‘์ด ๋œ๋‹ค.

    @Select("SELECT * FROM User")
    List<User> getUserList();

    @Insert("INSERT INTO User VALUES(#{id}, #{name}, #{phone}, #{address})")
    int insertUser(@Param("id") String id, @Param("name") String name, @Param("phone") String phone, @Param("address") String address);

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

    @Delete("DELETE FROM User WHERE id=#{id}")
    int deleteUser(@Param("id") String id);
}
  • @Mapper

๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(RDBMS)๋ฅผ ์ž๋ฐ”์˜ ๊ฐ์ฒด ์ง€ํ–ฅ ๋ชจ๋ธ๋กœ ๋งคํ•‘ํ•˜๊ฒŒ ๋„์™€์ฃผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋‹ค.

 

  • #{....}

์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ๊ฐ’์„ ๊ฐ์ฒด์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋งคํ•‘์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

 

  • @Param

(ex) -> @Select("SELECT * FROM User WHERE id=#{id}")
User getUser(@Param("id") String id);

@Param์–ด๋…ธํ…Œ์ด์…˜ ๋•๋ถ„์— ๋งค๊ฐœ๋ณ€์ˆ˜ id๊ฐ€ #{id}์— ๋งคํ•‘์ด ๋œ๋‹ค.

 

  • UserController.java
package com.example.mybatis_2;

import com.example.mybatis_2.mapper.UserMapper;
import mybatis.model.User;
import org.springframework.web.bind.annotation.*;
import java.util.List;

@RestController
public class UserController {
    private UserMapper mapper;

    public UserController(UserMapper mapper) {
        this.mapper = mapper;
    }

    @GetMapping("/user/{id}")
    public User getUser(@PathVariable("id") String id) {
        return mapper.getUser(id);
    }

    @GetMapping("/user/all")
    public List<User> getUserList() {
        return mapper.getUserList();
    }

    @PutMapping("/user/{id}") //๋ฐ์ดํ„ฐ ์ƒ์„ฑ
    public void putUser(@PathVariable("id") String id, @RequestParam("name") String name, @RequestParam("phone") String phone, @RequestParam("address") String address){
        mapper.insertUser(id, name, phone, address);
    }

    @PostMapping("/user/{id}") //๋ฐ์ดํ„ฐ ์ˆ˜์ •
    public void postUser(@PathVariable("id") String id, @RequestParam("name") String name, @RequestParam("phone") String phone, @RequestParam("address") String address){
        mapper.updateUser(id, name, phone, address);
    }

    @DeleteMapping("/user/{id}") //๋ฐ์ดํ„ฐ ์‚ญ์ œ
    public void deleteUser(@PathVariable("id") String id){
        mapper.deleteUser(id);
    }

}
  • @PathVariable

mabatis ํ”„๋กœ์ ํŠธ์— ์„ค๋ช…




3. mybatis3 framework ์ด๋ก 


[1] mybatis3 ๋ž€?


๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ข€ ๋” ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ

  • ๊ธฐ์กด JDBC(์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๊ฒฐ๋˜์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธํ„ฐํŽ˜์ด์Šค)๋ฅผ ์กฐ๊ธˆ ๋” ์‰ฝ๊ณ  ์œ ์—ฐํ•˜๊ณ  ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ๋˜์—ˆ๋‹ค.

 

 

[2] mybatis3 ์˜ ์žฅ์ 


  • ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ์™€ SQL์ฟผ๋ฆฌ์˜ ๋ถ„๋ฆฌ๋กœ ์ฝ”๋“œ์˜ ๊ฐ„๊ฒฐ์„ฑ ๋ฐ ์œ ์ง€๋ณด์ˆ˜์„ฑ ํ–ฅ์ƒ
  • ๋น ๋ฅธ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ ์ƒ์‚ฐ์„ฑ์ด ํ–ฅ์ƒ๋œ๋‹ค.

 

 

[3] mybatis3 ๊ตฌ์กฐ


image

 

 

mybatis3์˜ ๊ตฌ์„ฑ

image



mybatis3์˜ ๊ตฌ์„ฑ์€ ๊ดœํžˆ ๋ง๋งŒ ์–ด๋ ค์šด๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
typeAlias, enviroment, mapper ์„ค๋ช…์— ํ•ด๋‹น๋˜๋Š” ์ฝ”๋“œ๋“ค์ด๋‹ˆ ํ™•์ธํ•˜์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

 

 

 


์Šคํ„ฐ๋””๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ๋‚˜์™”๋˜ ์งˆ๋ฌธ

1. mybatis_2 ํ”„๋กœ์ ํŠธ์—์„œ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—†๋Š” id๋กœ ์š”์ฒญํ–ˆ์„ ๋•Œ์˜ ๊ฒฐ๊ณผ?

- ๋นˆ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์ถœ๋ ฅ๋œ๋‹ค.

- ๋งŒ์•ฝ ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค๋ฉด NullPointerException ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

@Slf4j
@RestController
public class UserController {
    private UserMapper mapper;

    public UserController(UserMapper mapper) {
        this.mapper = mapper;
    }

    @GetMapping("/user/{id}") // ํŠน์ • ๋ฐ์ดํ„ฐ ์กฐํšŒ
    public User getUser(@PathVariable("id") String id) {
        User a = mapper.getUser(id);
        log.info("user a={}", a.getId());

        return mapper.getUser(id);
    }
    
    ...
    ...
    ์ดํ•˜์ƒ๋žต
    ...
    ...
    ...

 

2.  mybatis_2 ํ”„๋กœ์ ํŠธ์—์„œ, @Select์— Insert๋ฌธ์„ ๋„ฃ๊ฒŒ ๋˜๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?

 

- UserMapper.javaํŒŒ์ผ์„ ์งˆ๋ฌธ์˜ ํ† ๋Œ€๋กœ ์ž‘์„ฑ

@Mapper //Mapper ์ธํ„ฐํŽ˜์ด์Šค
public interface UserMapper {

    @Insert("SELECT * FROM User WHERE id=#{id}")
    User getUser(@Param("id") String id); //์ „๋‹ฌ๋œ id๋ฅผ ๊ฐ€์ง€๊ณ  database์—์„œ ์กฐํšŒ๋ฅผํ•ด์„œ User ๊ฐ์ฒด๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” api
    // @Param์–ด๋…ธํ…Œ์ด์…˜ ๋•๋ถ„์— ๋งค๊ฐœ๋ณ€์ˆ˜ id๊ฐ€ #{id}์— ๋งคํ•‘์ด ๋œ๋‹ค.

	...
	...
	์ดํ•˜์ƒ๋žต
	...

 

-๊ฒฐ๊ณผ๊ฐ’ : unexpected error ๋ฐœ์ƒ