MyBatis란? Java SQL 분리 장점

MyBatis는 java 언어 개발에서 주로 사용하는 오픈소스 SQL 매핑 프레임워크입니다. 자바 코드와 SQL 구문을 분리하기 위해 사용합니다. XML 또는 annotation을 통해 SQL 구문을 구성하고 이를 자바 객체와 매핑합니다.

 

mybatis는 JAR(Java Archive) 형태로 제공됩니다. mybatis jar 파일을 프로젝트 라이브러리에 포함시키면 사용할 수 있습니다. Maven이나 Gradle 같은 빌드 도구를 사용하면 의존성을 추가하면 jar 파일이 프로젝트에 포함됩니다.

 

[Maven - pom.xml]

<dependencies>
  <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.7</version>
  </dependency>
</dependencies>

 

 

[Gradle - build.gradle]

dependencies {
  implementation 'org.mybatis:mybatis:3.5.7'
}

 

MyBatis

mybatis 로고 이미지

 

Java 코드 SQL 쿼리 분리 장점

자바 코드와 SQL 쿼리를 분리하는 이유는 여러 장점이 있기 때문입니다.

 

1. 코드가 깔끔해지고 가독성에 좋습니다. 다른 사람이 코드를 읽기도 편합니다.

 

2. 유지보수에 좋습니다. 코드 수정이 필요할 때도 쿼리와 코드가 분리되어 있으면 다른 부분에 미치는 영향을 줄일 수 있습니다. 예를 들어, 데이터베이스 스키마 변경이나 다른 DBMS 변경 시 자바 코드는 건드리지 않고 XML 매퍼 파일만 수정할 수 있습니다.

 

3. 재사용성이 향상됩니다. 별도로 정의한 SQL 쿼리를 여러 코드에서 재사용할 수 있습니다. 코드 중복을 줄이고 일관성을 유지합니다.

 

예시) INSERT 쿼리

데이터를 삽입하는 insert 쿼리를 수행하는 경우 아래와 같이 XML 매퍼 파일에 SQL 구문을 아래와 같이 정의할 수 있습니다.

 

[XML 매퍼 파일]

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

 

[자바 코드]

User user = new User(1, "John", 25);
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
  sqlSession.insert("com.example.UserMapper.insertUser", user);
  sqlSession.commit();
} finally {
  sqlSession.close();
}
  • sqlSessionFactory : SqlSessionFactory 타입의 객체로 MyBatis 설정 파일을 기반으로 SqlSession 인스턴스를 생성합니다.
  • com.example.UserMapper.insertUser : SQL 매핑을 찾기 위해 사용됩니다. com.example.UserMapper 부분은 XML 매퍼 파일의 네임스페이스(namespace)를 나타내며, insertUser 부분은 XML 매퍼 파일 내에서 정의한 SQL 매핑의 아이디(id)를 나타냅니다.

 

예시) SELECT 쿼리

같은 방법으로 CRUD를 모두 구현할 수 있습니다. select의 경우 아래와 같이 구현할 수 있습니다.

 

[XML 매퍼 파일]

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

 

[자바 코드]

int userId = 1;
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
  User user = sqlSession.selectOne("com.example.UserMapper.selectUser", userId);
  System.out.println(user);
} finally {
  sqlSession.close();
}
반응형

댓글

Designed by JB FACTORY