my batis 예제

MyBatis는 자바 어플리케이션에서 데이터베이스를 조작하기 위한 ORM(Object-Relational Mapping) 프레임워크입니다. 이번 글에서는 MyBatis로 간단한 CRUD(Create, Read, Update, Delete) 작업을 수행하는 예제를 살펴보겠습니다.

환경 설정

먼저, MyBatis를 사용하기 위해 프로젝트에 다음과 같은 의존성을 추가해야 합니다. 이 예제에서는 Gradle을 사용하지만, Maven을 사용하는 경우에도 비슷한 설정을 수행할 수 있습니다.

dependencies {
    implementation 'org.mybatis:mybatis:3.5.7'
    implementation 'org.mybatis:mybatis-spring:2.0.6'
    implementation 'org.springframework:spring-jdbc:5.3.8'
    implementation 'org.springframework:spring-tx:5.3.8'
    ...
}

데이터베이스 연결 정보를 설정하기 위해 application.properties 파일에 다음과 같이 설정합니다.

spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_example
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

매퍼 파일 작성

매퍼 파일은 SQL 쿼리를 작성하는 XML 파일입니다. 이 예제에서는 User 테이블을 다루는 매퍼 파일을 작성하겠습니다.

<mapper namespace="com.example.mapper.UserMapper">
    <select id="getAllUsers" resultType="com.example.model.User">
        SELECT * FROM user
    </select>

    <select id="getUserById" resultType="com.example.model.User" parameterType="int">
        SELECT * FROM user WHERE id = #{id}
    </select>

    <insert id="insertUser" parameterType="com.example.model.User">
        INSERT INTO user (name, email, phone) VALUES (#{name}, #{email}, #{phone})
    </insert>

    <update id="updateUser" parameterType="com.example.model.User">
        UPDATE user SET name = #{name}, email = #{email}, phone = #{phone} WHERE id = #{id}
    </update>

    <delete id="deleteUser" parameterType="int">
        DELETE FROM user WHERE id = #{id}
    </delete>
</mapper>

DAO 클래스 작성

DAO(Data Access Object) 클래스는 MyBatis와 데이터베이스 간의 연결을 담당하는 역할을 합니다. 이 예제에서는 Spring과 MyBatis를 함께 사용하기 때문에 @Repository 어노테이션을 붙여 Spring Bean으로 등록합니다.

@Repository
public class UserDao {

    @Autowired
    private SqlSessionFactory sqlSessionFactory;

    public List<User> getAllUsers() {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            return session.selectList("com.example.mapper.UserMapper.getAllUsers");
        }
    }

    public User getUserById(int id) {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            return session.selectOne("com.example.mapper.UserMapper.getUserById", id);
        }
    }

    public void insertUser(User user) {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            session.insert("com.example.mapper.UserMapper.insertUser", user);
            session.commit();
        }
    }

    public void updateUser(User user) {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            session.update("com.example.mapper.UserMapper.updateUser", user);
            session.commit();
        }
    }

    public void deleteUser(int id) {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            session.delete("com.example.mapper.UserMapper.deleteUser", id);
            session.commit();
        }
    }
}

서비스 및 컨트롤러 작성

Spring의 서비스(Service)와 컨트롤러(Controller) 클래스를 작성하여 MyBatis를 사용해 데이터베이스 작업을 수행합니다. 이 예제에서는 UserService와 UserController를 작성하겠습니다.

@Service
public class UserService {

    @Autowired
    private UserDao userDao;

    public List<User> getAllUsers() {
        return userDao.getAllUsers();
    }

    public User getUserById(int id) {
        return userDao.getUserById(id);
    }

    public void insertUser(User user) {
        userDao.insertUser(user);
    }

    public void updateUser(User user) {
        userDao.updateUser(user);
    }

    public void deleteUser(int id) {
        userDao.deleteUser(id);
    }
}

@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/")
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }

    @GetMapping("/{id}")
    public User getUserById(@PathVariable int id) {
        return userService.getUserById(id);
    }

    @PostMapping("/")
    public void insertUser(@RequestBody User user) {
        userService.insertUser(user);
    }

    @PutMapping("/")
    public void updateUser(@RequestBody User user) {
        userService.updateUser(user);
    }

    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable int id) {
        userService.deleteUser(id);
    }
}

실행 및 테스트

위의 설정과 코드를 모두 작성한 후 애플리케이션을 실행하고, API를 테스트할 수 있습니다. 예를 들어, POST 요청을 통해 새로운 사용자를 추가해보겠습니다.

POST /users/
Content-Type: application/json

{
  "name": "John Doe",
  "email": "john.doe@example.com",
  "phone": "1234567890"
}

성공적으로 요청이 처리되면 HTTP 상태 코드 200을 받을 수 있습니다.

마치며

이번 예제에서는 MyBatis를 사용하여 간단한 CRUD 작업을 수행하는 방법을 살펴보았습니다. MyBatis의 강력한 쿼리 기능과 Spring과의 통합을 통해 웹 애플리케이션 개발을 더욱 효율적으로 할 수 있습니다. 이 예제 코드를 기반으로 필요한 기능을 추가하고 개발 환경에 맞게 설정을 조정해보세요.

#Java #MyBatis