[java] MyBatis와 RESTful API 연동하기

개요

이 블로그 포스트에서는 MyBatis와 RESTful API를 함께 사용하는 방법에 대해 알아보겠습니다. MyBatis는 Java 어플리케이션과 데이터베이스 간의 연동을 단순하게 만들어주는 ORM(Object-Relational Mapping) 프레임워크입니다. RESTful API는 웹 서비스를 위한 아키텍처 스타일로, HTTP 프로토콜을 사용하여 클라이언트와 서버 간의 통신을 수행합니다.

MyBatis 설정

먼저, MyBatis 설정을 진행해야 합니다. 프로젝트의 pom.xml 파일에 MyBatis와 JDBC 드라이버 의존성을 추가해주세요.

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.6</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.26</version>
    </dependency>
</dependencies>

그리고, MyBatis의 설정 파일인 mybatis-config.xml을 작성해야 합니다. 아래는 예시입니다.

<configuration>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC" />
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.cj.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/mydatabase" />
        <property name="username" value="root" />
        <property name="password" value="password" />
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="com/example/mappers/MyMapper.xml" />
  </mappers>
</configuration>

RESTful API 구현

이제 RESTful API를 구현해보겠습니다. Spring Framework를 사용하여 간단한 CRUD(Create, Read, Update, Delete) API를 만들어보겠습니다.

@RestController
@RequestMapping("/api")
public class MyController {
    
    @Autowired
    private MyService myService;
    
    @GetMapping("/mydata")
    public List<MyData> getAllData() {
        return myService.getAllData();
    }
    
    @PostMapping("/mydata")
    public MyData createData(@RequestBody MyData myData) {
        return myService.createData(myData);
    }
    
    @PutMapping("/mydata/{id}")
    public MyData updateData(@PathVariable Long id, @RequestBody MyData myData) {
        return myService.updateData(id, myData);
    }
    
    @DeleteMapping("/mydata/{id}")
    public void deleteData(@PathVariable Long id) {
        myService.deleteData(id);
    }
}

위의 코드에서 MyService는 비즈니스 로직을 처리하는 서비스 클래스입니다. 이 클래스의 구현은 데이터베이스와의 상호작용을 포함하게 됩니다.

MyBatis와 연동

이제 MyBatis와 RESTful API를 연동해보겠습니다. MyBatis를 사용하여 데이터베이스와의 상호작용을 수행합니다.

@Repository
public class MyRepository {

    @Autowired
    private SqlSessionFactory sqlSessionFactory;

    public List<MyData> getAllData() {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            return session.selectList("com.example.mappers.MyMapper.getAllData");
        }
    }

    public MyData createData(MyData myData) {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            session.insert("com.example.mappers.MyMapper.createData", myData);
            session.commit();
        }
        
        return myData;
    }

    public MyData updateData(Long id, MyData myData) {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            myData.setId(id);
            session.update("com.example.mappers.MyMapper.updateData", myData);
            session.commit();
        }
        
        return myData;
    }

    public void deleteData(Long id) {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            session.delete("com.example.mappers.MyMapper.deleteData", id);
            session.commit();
        }
    }
}

위의 코드에서는 SqlSessionFactory를 주입받아 MyBatis를 사용하여 데이터베이스와의 상호작용을 수행합니다.

마무리

이렇게 MyBatis와 RESTful API를 함께 사용하여 웹 애플리케이션을 개발할 수 있습니다. MyBatis를 사용하여 데이터베이스와의 상호작용을 단순화하고, RESTful API를 통해 클라이언트와 서버 간의 통신을 수행할 수 있습니다. 이를 통해 좀 더 효율적이고 유지보수 가능한 코드를 작성할 수 있습니다.

참고 문서