본문 바로가기
개발지식

마이바티스의 고급 기능 - 다이나믹 SQL, 결과 매핑, 트랜잭션 관리

by hunovator 2024. 2. 11.
반응형

마이바티스는 초보자뿐만 아니라 고급 사용자에게도 다양한 고급 기능을 제공합니다. 이러한 기능들을 활용하면 더욱 효율적이고 유연한 데이터베이스 액세스 코드를 작성할 수 있습니다.

1. 다이나믹 SQL 기능

다이나믹 SQL은 조건에 따라 SQL 쿼리를 동적으로 생성할 수 있는 기능을 말합니다. 이는 복잡한 쿼리를 작성할 때 매우 유용합니다. 예를 들어, WHERE 절에 여러 조건이 있고 이 중 일부는 선택적으로 적용되어야 하는 경우가 있습니다. 이런 경우 다이나믹 SQL을 사용하여 필요한 조건만 포함된 쿼리를 생성할 수 있습니다. 이를 통해 불필요한 코드 중복을 피하고 가독성을 높일 수 있습니다.


2. 결과 매핑 기능은 데이터베이스 결과를 자바 객체에 매핑

예를 들어, 데이터베이스의 열 이름과 자바 객체의 필드 이름이 다를 경우에도 매핑을 할 수 있습니다. 또한, 한 테이블에서 여러 개의 객체를 매핑하거나 복잡한 상속 구조를 처리할 수도 있습니다. 이를 통해 데이터베이스와 자바 객체 간의 변환 작업을 간소화하고 코드의 유지보수성을 높일 수 있습니다.


3. 트랜잭션 관리 기능은 데이터베이스 트랜잭션을 관리기능.

마이바티스는 자동으로 트랜잭션을 커밋 또는 롤백할 수 있으며, 필요에 따라 트랜잭션 경계를 설정할 수도 있습니다. 이를 통해 데이터베이스 작업의 일관성과 안전성을 보장할 수 있습니다.

 

4. 예제 

<!-- mybatis-config.xml -->
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/>
                <property name="username" value="username"/>
                <property name="password" value="password"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/example/mappers/ExampleMapper.xml"/>
    </mappers>
</configuration>
<!-- ExampleMapper.xml -->
<mapper namespace="com.example.mappers.ExampleMapper">
    <select id="selectAll" resultType="com.example.model.Example">
        SELECT * FROM example_table
    </select>
</mapper>
// ExampleMapper.java
package com.example.mappers;

import com.example.model.Example;
import java.util.List;

public interface ExampleMapper {
    List<Example> selectAll();
}
// Example.java (POJO)
package com.example.model;

public class Example {
    private int id;
    private String name;
    // Getters and setters
}
// Main.java
package com.example;

import com.example.mappers.ExampleMapper;
import com.example.model.Example;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.Reader;

public class Main {
    public static void main(String[] args) {
        try {
            Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            SqlSession session = sqlSessionFactory.openSession();
            ExampleMapper mapper = session.getMapper(ExampleMapper.class);
            List<Example> examples = mapper.selectAll();
            for (Example example : examples) {
                System.out.println("ID: " + example.getId() + ", Name: " + example.getName());
            }
            session.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


마이바티스의 이러한 고급 기능들은 데이터베이스 액세스 코드를 더욱 간결하고 유연하게 만들어줍니다. 이를 적절히 활용하면 복잡한 데이터베이스 작업도 쉽게 처리할 수 있으며, 코드의 가독성과 유지보수성을 높일 수 있습니다. 따라서 마이바티스를 사용하는 개발자라면 이러한 고급 기능들을 숙지하고 적극적으로 활용해야 합니다.

반응형