MyBatis

MyBatis 를 사용하면 DB 를 쉽게 다룰 수 있습니다.

 

설명

MyBatis 는 Java 애플리케이션에서 데이터베이스와 쉽게 상호작용할 수 있도록 도와주는 친구 입니다.

즉 자바 오브젝트와 SQL 사이의 자동 매핑 기능을 지원하는 ORM(Object Relational Mapping) 프레임워크 입니다.

 

왜 MyBatis 를 사용하나요?

1. 직접 SQL 작성 가능

SQL 쿼리를 직접 작성하기 때문에 복잡한 쿼리를 쉽게 제어할 수 있습니다.

2. 객체와 데이터베이스 매빙

데이터베이스에서 가져온 데이터를 Java 객체에 자동으로 변환해 줍니다.

또한 데이터베이스 컬럼과 Java 객체의 필드를 매핑해줍니다.

3. 설치와 사용이 간단

Spring 과 통합하여 편리하게 사용할 수 있습니다.

쿼리만 작성하면 나머지는 MyBatis 가 처리합니다.

JDBC 의 모든 기능을 Mybatis 가 대부분 제공하는 것도 장점입니다.

 

JDBC(Java Database Connectivity)
Java 애플리케이션에서 데이터베이스에 연결하고 SQL 문을 실행하여 데이터를 처리할 수 있도록 지원하는 Java API 입니다. Java 와 다양한 데이터베이스(Oracle, MySQL..) 를 연결하는 표준 인터페이스로, Java 애플리케이션과 데이터베이스 사이에서 다리 역할을 합니다.

대표적인 장점

MyBatis 를 사용하는 큰 장점은 동적 쿼리를 사용한 유연성 입니다.

동적 쿼리란, 실행 시점에 조건에 따라 SQL 쿼리를 동적으로 생성하는 것입니다.

이는 데이터베이스의 검색 조건이나 결괏값 등이 동적으로 변화할 때 유용하게 사용됩니다.

MyBatis 에서는 동적 쿼리를 작성하기 위해서 
<if>, <choose>, <when>, <otherwise>, <foreach> 등의 태그를 사용할 수 있습니다.

 

아래는 MyBatis 에서 동적 쿼리를 작성하는 예제입니다.

getUserList 메서드 호출 시 name, email 파라미터가 null 이 아니면,

해당 조건을 포함하는 SQL 쿼리를 동적으로 생성하고 조회합니다.

 

// xml 파일

<select id="getUserList" resultType="User">
  SELECT * FROM users
  <where>
    <if test="name != null"> // 동적 쿼리 
      AND name = #{name}
    </if>
    <if test="email != null"> // 동적 쿼리 
      AND email = #{email}
    </if>
  </where>
</select>

사용

우선 MyBatis 를 사용하는데 필요한 spring-core, spring-jdbc, mybatis, mybatis-spring 의존성이 필요합니다.

 

그리고 MyBatis 는 JDBC 로 DB 연결을 하기에 DB 연결 정보를 설정해야 합니다.

스프링 설정(XML,properties) 에 DB 연결 정보(DataSource) 등록

 

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
   <property name="driverClassName" value="com.mysql.jdbc.Driver"/> // mysql 드라이버
   <property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/> // mysql 사용
   <property name="username" value="username"/> // 아이디 
   <property name="password" value="password"/> // 비밀번호 
</bean>

 

그리고 MyBatis 설정을 XML 설정파일 생성 후 필요한 설정을 추가합니다.

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
   <property name="dataSource" ref="dataSource"/>
   <property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
   <constructor-arg ref="sqlSessionFactory"/>
</bean>

 

이후 MyBatis 매퍼 작성 후 등록을 해줍니다.

MyBatis Mapper 는 DB 쿼리와 <-> 자바 메서드() 를 매핑하는 역할입니다.

데이터베이스에 접근하기 위한 SQL 쿼리를 작성하고, 이를 실행하는 자바 메서드를 정의합니다.

 

쉽게 말해 "XML 에 SQL 쿼리들을 작성할 건데 그 SQL 이 연결될 메서드들을 정의할 파일을 만들자" 입니다.

@Mapper // 등록 
// 작성
public interface UserMapper {
   User getUserById(int id);
   void insertUser(User user);
   void updateUser(User user);
   void deleteUser(int id);
}
// Mapper 인터페이스와 연결될 XML 작성

<!-- user_mapper.xml -->

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

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

  <!-- 다른 메서드들에 대한 쿼리도 추가할 수 있다 -->
</mapper>

 

마지막으로 Mapper 인터페이스를 스프링 Bean 으로 등록하고 주입받아 사용하시면 됩니다.

@Service
public class UserService {
   private final UserMapper userMapper;

   public UserService(UserMapper userMapper) {
       this.userMapper = userMapper;
   }

   // 유저 조회
   public User getUserById(int id) {
       return userMapper.getUserById(id);
   }

   // 유저 등록
   public void insertUser(User user) {
       userMapper.insertUser(user);
   }

   // ... 다른 메서드들
}

'Java' 카테고리의 다른 글

제어자  (1) 2024.12.04
로깅(Logging)  (1) 2024.11.30
해시맵(HashMap)  (1) 2024.11.29
MVC구조 & Controller, Service, DAO, VO  (2) 2024.11.18
웹 서버와 WAS 의 차이  (1) 2024.11.17