반응형

오늘은 MyBatis를 활용하여 Oracle 데이터의 페이징 처리 기능을 구현하는 방법을 다룹니다. MyBatis는 SQL 작성이 자유롭고, XML 기반의 매핑 설정을 지원해 페이징 처리와 같은 작업을 효율적으로 처리할 수 있습니다.


1. MyBatis 환경 설정

(1) Maven 의존성 추가

pom.xml에 MyBatis와 Oracle JDBC 드라이버 의존성을 추가합니다.

<dependencies>
    <!-- MyBatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.11</version>
    </dependency>

    <!-- MyBatis-Spring -->
    <dependency>
        <groupId>org.mybatis.spring</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>2.0.7</version>
    </dependency>

    <!-- Oracle JDBC -->
    <dependency>
        <groupId>com.oracle.database.jdbc</groupId>
        <artifactId>ojdbc8</artifactId>
        <version>19.11.0.0</version>
    </dependency>
</dependencies>

(2) MyBatis 설정 파일

mybatis-config.xml 파일을 생성하여 MyBatis 환경 설정을 정의합니다.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
</configuration>

2. 데이터 조회 및 페이징 처리

(1) SQL 매퍼 파일 작성

EmployeeMapper.xml 파일을 생성하여 SQL 쿼리를 정의합니다.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.EmployeeMapper">

    <!-- 페이징 처리 SQL -->
    <select id="getPagedEmployees" resultType="com.example.domain.Employee">
        SELECT * FROM (
            SELECT a.*, ROWNUM rnum
            FROM (
                SELECT * FROM employees ORDER BY employee_id
            ) a
            WHERE ROWNUM &lt;= #{offset} + #{limit}
        )
        WHERE rnum &gt; #{offset}
    </select>
</mapper>

(2) 데이터 객체 생성

Employee.java 파일을 작성하여 데이터를 담을 객체를 생성합니다.

package com.example.domain;

public class Employee {
    private int employeeId;
    private String firstName;
    private String lastName;
    private String email;
    private double salary;

    // Getters and Setters
    public int getEmployeeId() {
        return employeeId;
    }

    public void setEmployeeId(int employeeId) {
        this.employeeId = employeeId;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }
}

(3) Mapper 인터페이스 생성

EmployeeMapper.java 파일을 작성합니다.

package com.example.mapper;

import com.example.domain.Employee;
import java.util.List;

public interface EmployeeMapper {
    List<Employee> getPagedEmployees(int offset, int limit);
}

(4) 서비스 로직 작성

EmployeeService.java 파일을 작성하여 비즈니스 로직을 구현합니다.

package com.example.service;

import com.example.domain.Employee;
import com.example.mapper.EmployeeMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class EmployeeService {

    @Autowired
    private EmployeeMapper employeeMapper;

    public List<Employee> getPagedEmployees(int offset, int limit) {
        return employeeMapper.getPagedEmployees(offset, limit);
    }
}

3. 테스트 코드 작성

페이징 처리가 제대로 작동하는지 확인하기 위해 테스트를 작성합니다.

package com.example;

import com.example.domain.Employee;
import com.example.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
public class TestRunner implements CommandLineRunner {

    @Autowired
    private EmployeeService employeeService;

    @Override
    public void run(String... args) throws Exception {
        List<Employee> employees = employeeService.getPagedEmployees(0, 10);

        for (Employee employee : employees) {
            System.out.println(employee.getFirstName() + " " + employee.getLastName());
        }
    }
}

4. 오늘의 요약

  • MyBatis를 사용하여 Oracle 데이터베이스와 연동하는 방법을 학습했습니다.
  • XML 매퍼를 사용하여 페이징 처리 쿼리를 정의하고, DAO 인터페이스와 연결했습니다.
  • Spring Framework와의 통합으로 서비스 로직을 간결하게 관리할 수 있었습니다.
반응형

+ Recent posts