공통코드 테이블 설계 / 공통코드 테이블로 selectbox option 조회 방법

공통코드 테이블 설계

공통코드그룹 테이블 예시

제약조건 컬럼명 데이터 타입 기본값 설명
PK cd VARCHAR(10) 공통코드그룹CD
name VARCHAR(255) 공통코드그룹명
del_yn CHAR(1) 'N' 삭제 여부

공통코드 테이블 예시

제약조건 컬럼명 데이터 타입 기본값 설명
PK cd VARCHAR(10) 공통코드CD
name VARCHAR(255) 공통코드명
FK group_cd VARCHAR(10) 공통코드그룹CD
sort INT 1 정렬순서
use_yn char(1) 'Y' 사용여부
del_yn CHAR(1) 'N' 삭제 여부

공통코드 테이블 조회 방법

공통코드 테이블로 selectbox option 조회 이유

  1. selectbox에 변경이 일어날 때마다 수작업으로 모든 화면에서 수정하지 않기 위해서입니다.
  2. 관리자가 ‘코드 관리’ 화면에서 각 공통코드를 관리할 수 있습니다.

공통코드 조회 Controller 예시

import com.chunjae.archive_cms.common.code.CodeService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import java.util.Map;

@Slf4j
@Controller
@RequestMapping("/content")
public class ContentController {

  @Autowired
  private CodeService codeService;

  @GetMapping("")
  public String getListPage(Model model) throws Exception {
      model.addAttribute("contentTypeList", codeService.getCodeListByGroupId("2"));
      return "content/list";
  }
}

공통코드 Service 예시

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Slf4j
@RequiredArgsConstructor
@Service("codeService")
public class CodeService {
    @Autowired
    private CodeMapper codeMapper;

    public String getCodeByName(String group_cd, String name) throws Exception {
        Map<String, Object> paramMap = new HashMap<>();
        paramMap.put("group_cd", group_cd);
        paramMap.put("name", name);
        return codeMapper.getCodeByName(paramMap);
    }

    public Map<String,Object> getCode(String group_cd, String code) throws Exception {
        Map<String,Object> paramMap = new HashMap<>();
        paramMap.put("group_cd", group_cd);
        paramMap.put("code", code);
        return codeMapper.getCode(paramMap);
    }

    public List<Map<String,Object>> getCodeListByGroupId(String group_cd) throws Exception {

        Map<String,Object> map = new HashMap<>();
        map.put("group_cd", group_cd);
        return codeMapper.getCodeListByGroupId(map);
    }
}

공통코드 Mapper 예시

import org.apache.ibatis.annotations.Mapper;

import java.util.List;
import java.util.Map;

@Mapper
public interface CodeMapper {

    String getCodeByName(Map<String, Object> paramMap);

    Map<String,Object> getCode(Map<String, Object> paramMap);

    List<Map<String,Object>> getCodeListByGroupId(Map<String, Object> paramMap);
}

공통코드 Mapper.xml 예시

<?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.chunjae.archive_cms.common.code.CodeMapper">

    <select id="getCodeByName" parameterType="java.util.HashMap" resultType="java.lang.String">
        SELECT
            cd
        FROM
            tb_code
        WHERE
            group_cd = #{group_cd}
        AND name = #{name}
    </select>

    <select id="getCode" parameterType="java.util.HashMap" resultType="java.util.HashMap">
        SELECT
            cd,
            group_cd,
            name,
            sort,
            delete_yn
        FROM
            tb_code
        WHERE
            group_cd = #{group_cd}
        AND
            cd = #{cd}
    </select>

    <select id="getCodeListByGroupId" resultType="hashmap" parameterType="map">
        SELECT
            cd,
            group_cd,
            name,
            sort,
            delete_yn
        FROM
            tb_code
        WHERE
            group_cd = #{group_cd}
    </select>
</mapper>

JSP selectbox option 조회

<select name="contentType" id="contentType">
  <option value="">전체</option>
  <c:forEach items="${contentTypeList}" var="type">
    <option value="${type.cd}">${type.name}</option>
  </c:forEach>
</select>

JSP에서 JSTL로 selectbox option을 채우는 예시입니다.

selectbox 선택 처리 예시

<select id="contentType" name="contentType">
	<option value="all" <c:if test="${param.contentType == '' or empty param.contentType}">selected</c:if>>전체</option>
	<c:forEach items="${contentTypeList}" var="type">
		<option value="${type.cd}" <c:if test="${type.cd eq param.contentType}">selected</c:if>>${type.name}</option>
	</c:forEach>
</select>

'전체' option 삭제하는 경우

  • insert 시 selectbox가 필수 조건인 경우
  • select 시 ‘전체’ 검색이 필요하지 않은 경우

Leave a comment