1. RoleDao 인터페이스 정의
데이터베이스에서 역할(Role) 정보를 가져오기 위한 DAO 인터페이스를 작성합니다.
package com.thhh.dao.role;
import com.thhh.pojo.Role;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
public interface RoleDao {
// 시스템 내의 모든 역할 목록을 조회하는 메서드
List<Role> fetchRoleList(Connection connection) throws SQLException;
}
2. RoleDaoImpl 구현체 작성
JDBC를 이용하여 실제 데이터베이스 쿼리를 실행하고 결과를 객체 리스트로 변환하는 클래스입니다.
package com.thhh.dao.role;
import com.thhh.dao.BaseDao;
import com.thhh.pojo.Role;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class RoleDaoImpl implements RoleDao {
@Override
public List<Role> fetchRoleList(Connection connection) throws SQLException {
PreparedStatement pStatement = null;
ResultSet resultSet = null;
List<Role> roleEntries = new ArrayList<>();
if (connection != null) {
String sql = "SELECT * FROM smbms_role";
Object[] queryParams = {};
resultSet = BaseDao.executeQuery(sql, queryParams, connection, pStatement, resultSet);
while (resultSet.next()) {
Role roleModel = new Role();
roleModel.setId(resultSet.getInt("id"));
roleModel.setRoleCode(resultSet.getString("roleCode"));
roleModel.setRoleName(resultSet.getString("roleName"));
roleEntries.add(roleModel);
}
// 리소스 해제 (Connection은 Service 계층에서 관리)
BaseDao.close(null, pStatement, resultSet);
}
return roleEntries;
}
}
3. RoleService 인터페이스 및 구현체
비즈니스 로직 계층에서 DAO를 호출하여 데이터를 처리합니다. 커넥션 관리와 예외 처리가 포함됩니다.
package com.thhh.service.role;
import com.thhh.dao.BaseDao;
import com.thhh.dao.role.RoleDao;
import com.thhh.dao.role.RoleDaoImpl;
import com.thhh.pojo.Role;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
public class RoleServiceImpl implements RoleService {
private RoleDao repository;
public RoleServiceImpl() {
this.repository = new RoleDaoImpl();
}
@Override
public List<Role> getRoleList() {
Connection conn = null;
List<Role> results = null;
try {
conn = BaseDao.getConnection();
results = repository.fetchRoleList(conn);
} catch (SQLException e) {
e.printStackTrace();
} finally {
BaseDao.close(conn, null, null);
}
return results;
}
}
4. 서블릿(Servlet)에서의 쿼리 처리 로직
사용자 관리 페이지에서 검색 조건(이름, 역할)과 페이징 처리를 포함하여 데이터를 조회하는 서블릿 메서드입니다.
public void query(HttpServletRequest req, HttpServletResponse resp) {
// 1. 클라이언트 파라미터 수집
String searchName = req.getParameter("queryname");
String searchRoleStr = req.getParameter("queryUserRole");
String pageIndexStr = req.getParameter("pageIndex");
int targetRole = 0;
int itemsPerPage = 5;
int activePage = 1;
// 2. 파라미터 유효성 검사 및 기본값 설정
if (searchName == null) searchName = "";
if (searchRoleStr != null && !searchRoleStr.isEmpty()) {
targetRole = Integer.parseInt(searchRoleStr);
}
if (pageIndexStr != null) {
activePage = Integer.parseInt(pageIndexStr);
}
// 3. 페이징 처리를 위한 PageSupport 유틸리티 활용
UserService userService = new UserServiceImpl();
int totalUserCount = userService.getUserCount(searchName, targetRole);
PageSupport paging = new PageSupport();
paging.setPageSize(itemsPerPage);
paging.setTotalCount(totalUserCount);
paging.setCurrentPageNo(activePage);
int maxPageCount = paging.getTotalPageCount();
// 4. 페이지 범위 제한 처리
if (activePage < 1) {
activePage = 1;
} else if (activePage > maxPageCount) {
activePage = maxPageCount;
}
// 5. 비즈니스 로직 수행 (사용자 목록 및 역할 목록 조회)
List<User> userList = userService.getUserList(searchName, targetRole, activePage, itemsPerPage);
List<Role> roleList = new RoleServiceImpl().getRoleList();
// 6. 결과 데이터를 Request Scope에 저장
req.setAttribute("userList", userList);
req.setAttribute("roleList", roleList);
req.setAttribute("queryUserName", searchName);
req.setAttribute("queryUserRole", targetRole);
req.setAttribute("totalPageCount", maxPageCount);
req.setAttribute("totalCount", totalUserCount);
req.setAttribute("currentPageNo", activePage);
// 7. JSP 페이지로 포워딩
try {
req.getRequestDispatcher("userlist.jsp").forward(req, resp);
} catch (ServletException | IOException e) {
e.printStackTrace();
}
}
5. 핵심 구현 사항 요약
이 기능의 핵심은 사용자 관리 화면에서 검색 필터로 사용될 역할 목록(roleList)을 동적으로 가져오는 것과, 검색 조건에 따른 사용자 페이징 목록(userList)을 동시에 처리하는 것입니다.
- 프론트엔드로부터
queryname,queryUserRole,pageIndex세 가지 주요 값을 전달받습니다. PageSupport클래스를 통해 전체 데이터 수 대비 현재 페이지의 위치를 계산합니다.- 조회된 데이터와 페이징 정보를 다시
HttpServletRequest의 속성으로 담아 JSP로 전달하여 화면을 갱신합니다.