-
[MyBatis] MyBatis?IT/코딩히스토리_BE 2025. 1. 12. 16:20
마이바티스는 개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크이다.
JDBC로 처리하는 상당부분의 코드와 파라미터 설정및 결과 매핑을 대신해준다.
마이바티스는 데이터베이스 레코드에 원시타입과 Map 인터페이스 그리고 자바 POJO 를 설정해서 매핑하기 위해
XML과 애노테이션을 사용할 수 있다.
(마이바티스3 문서: https://mybatis.org/mybatis-3/ko/index.html)
위에 설명은 마이바티스3 문서에서 나온 마이바티스에 대한 설명인데
한마디로 마이바티스라는 프레임워크를 사용하면 JDBC에서 사용했던 불편함을 개선할 수 있는 것이다.
즉, MyBatis는 자바 기반의 SQL 매퍼 프레임워크로, 개발자가 데이터베이스와 상호작용할 때 SQL을 직접 작성하면서도 번거로운 JDBC 코드(예: Connection, Statement 관리)를 단순화하도록 도와준다.
JAVA로 RDBMS를 연결해서 개발을 하면 JDBC라는 표준 API를 사용할 것이다.
그런데 이 JDBC로 사용하면 SQL을 실행할때마다 자원을 열고 닫고, SQL 코드가 JAVA코드안에서 작성되거나
호출하는 케이스가 늘어날수록 반복되는 코드가 늘어나고 지저분해진다.
마이바티스를 사용하면 SQL문을 XML로 분리할 수 있어 관리 측면에서 더 깔끔하고
HikariCP같은 커넥션풀 프레임워크와 연동해 SQL 실행시 자원을 열고 닫고하는 것도 해결하여 코드가 간결해지고
개발도 편하게 할 수 있다.
아래는 JDBC를 사용할때 예제 코드이다.
import java.sql.*; public class JdbcExample { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/testdb"; String username = "root"; String password = "password"; Connection connection = null; PreparedStatement statement = null; ResultSet resultSet = null; try { // 데이터베이스 연결, SQL을 실행하기 위해 이렇게 연결을 직접 해줘야함 connection = DriverManager.getConnection(url, username, password); // SQL 작성 및 실행 String sql = "SELECT id, name FROM users WHERE id = ?"; statement = connection.prepareStatement(sql); statement.setInt(1, 1); resultSet = statement.executeQuery(); // 결과 처리, 결과를 이렇게 직접 담아줘야함 while (resultSet.next()) { int id = resultSet.getInt("id"); String name = resultSet.getString("name"); System.out.println("ID: " + id + ", Name: " + name); } } catch (SQLException e) { e.printStackTrace(); } finally { // 자원 해제, 실행 후 이렇게 자원을 직접 해제해줘야함 try { if (resultSet != null) resultSet.close(); if (statement != null) statement.close(); if (connection != null) connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
- MyBatis(3.0 이상)를 사용했을때 예제 코드
<mapper namespace="com.example.mapper.UserMapper"> <select id="findById" parameterType="int" resultType="com.example.model.User"> SELECT id, name FROM users WHERE id = #{id} </select> </mapper>
@Mapper public interface UserMapper { User findById(int id); }
@Service public class UserService { @Autowired private UserMapper userMapper; public User getUserById(int id) { return userMapper.findById(id); // 매퍼 호출 } }
SQL, 호출객체, 비지니스 로직 등등을 분리해서 사용하니 더 간결해진 것을 알 수 있다.
'IT > 코딩히스토리_BE' 카테고리의 다른 글
[MyBatis] SqlSessionTemplate, 메퍼 인터페이스 (2) 2025.01.15 [MyBatis] SqlSession, SqlSessionFactory, SqlSessionTemplate (0) 2025.01.12 [SPRING BOOT] application.properties을 활용해 설정을 나누기 (0) 2024.01.24