반응형
오늘은 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 <= #{offset} + #{limit}
)
WHERE rnum > #{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와의 통합으로 서비스 로직을 간결하게 관리할 수 있었습니다.
반응형
'개발 > 전자정부프레임워크' 카테고리의 다른 글
MyBatis에서 반복문 처리 - <foreach> 태그 (0) | 2024.12.31 |
---|---|
MyBatis의 동적 SQL 사용법 (0) | 2024.12.31 |
Spring Security 커스터마이징 (Custom UserDetailsService 구현) (0) | 2024.12.30 |
Spring Security와 데이터베이스 연동하기 (0) | 2024.12.30 |
Spring Security를 활용한 인증 및 권한 관리 기초 (0) | 2024.12.30 |