SMBMS 슈퍼마켓 관리 시스템의 역할 목록 조회 기능 구현

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로 전달하여 화면을 갱신합니다.

태그: java JDBC Servlet DAO SMBMS

8월 3일 19:34에 게시됨