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과의 통합을 통해 웹 애플리케이션 개발을 더욱 효율적으로 할 수 있습니다. 이 예제 코드를 기반으로 필요한 기능을 추가하고 개발 환경에 맞게 설정을 조정해보세요.