공통코드 테이블 설계 / 공통코드 테이블로 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 조회 이유
- selectbox에 변경이 일어날 때마다 수작업으로 모든 화면에서 수정하지 않기 위해서입니다.
- 관리자가 ‘코드 관리’ 화면에서 각 공통코드를 관리할 수 있습니다.
공통코드 조회 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 시 ‘전체’ 검색이 필요하지 않은 경우
공통코드 데이터 조회 방법
JOIN으로 공통코드 조회 방법
SELECT
CD1.CODE_NM as 컬럼명1Nm,
CD2.CODE_NM as 컬럼명2Nm,
FROM
테이블 A
LEFT OUTER JOIN 공통코드상세테이블 CD1
ON CD1.CODE_ID = '공통코드그룹명1' AND A.컬럼명1 = CD1.CODE AND CD1.USE_AT = 'Y'
LEFT OUTER JOIN 공통코드상세테이블 CD2
ON CD2.CODE_ID = '공통코드그룹명2' AND A.컬럼명2 = CD2.CODE AND CD2.USE_AT = 'Y'
WHERE
A.키컬럼 = '값';
JOIN으로 조회하면 쿼리가 더 복잡해질 수 있지만 성능 면에서 유리합니다.
서브쿼리로 공통코드 조회 방법
SELECT
(SELECT CODE_NM FROM comtccmmndetailcode WHERE CODE_ID = '공통코드그룹명1' AND CODE = A.SHC_LVL AND USE_AT = 'Y') AS 컬럼명1Nm,
(SELECT CODE_NM FROM comtccmmndetailcode WHERE CODE_ID = '공통코드그룹명2' AND CODE = A.SHC_YEAR AND USE_AT = 'Y') AS 컬럼명2Nm
FROM im_qstn_stndrd A
WHERE
A.키컬럼 = '값';
서브쿼리는 간결하지만 조회 행마다 반복 실행되므로, 대규모 데이터에서 성능 이슈가 발생할 수 있습니다.
Leave a comment