1.사원정보 관리(MVC)
- 검색키워드 : ename, dname, mgr(name), job 으로 검색 ename제외 나머지 콤보박스 형으로 선택
# combo box 형태로 검색어 만들기
1) dname으로 콤보박스 만들기
- dao 인터페이스에 메서드 선언 : public List<Dept> getDeptComb();
- mapper 처리 :
<select id="getDeptComb" resultType="dept">
select deptno, dname from dept100
</select>
- service단 처리 :
public List<Dept> getDeptComb(){
return dao.getDeptComb();
}
- controller 처리 :
@ModelAttribute("deptCom")
public List<Dept> getDeptComb(){
return service.getDeptComb();
}
- view단 처리 :
<select name="deptno" class="form-control mr-sm-2">
<option value="0">부서선택</option> // 숫자형 default 0
// model attribute로 선언한 모델명을 불러와서 forEach로 출력
<c:forEach var="dept" items="${deptCom}">
<option value="${dept.deptno }">${dept.dname}</option>
</c:forEach>
</select>
2) mgr(name) 관리자명으로 된 콤보박스 만들기
- dao 인터페이스 선언 :
public List<Code> getMgrComb();
// cf) public class Code{ private String key, private String val }
- mapper 처리 : // 관리자의 사원번호를 key값으로 관리자명을 val값으로
<select id="getMgrComb" resultType="code">
SELECT DISTINCT e.mgr key, m.ename val FROM emp100 e, emp100 m WHERE e.mgr=m.empno
</select>
- view단 처리 :
<select name="mgr" class="form-control mr-sm-2">
<option value="0">관리자선택</option> // 숫자형 default 0
<c:forEach var="mgr" items="${mgrCom}">
<option value="${mgr.key }">${mgr.val}</option>
</c:forEach>
</select>
3) job 직책명으로 된 콤보박스 만들기
- mapper 처리 :
<select id="getJobComb" resultType="string">
SELECT DISTINCT job FROM emp100
</select>
- view단 처리 :
<select name="job" class="form-control mr-sm-2">
<option value="">직책선택</option> // 문자형 default ""
<c:forEach var="job" items="${jobCom}">
<option>${job}</option>
</c:forEach>
</select>
- 사원정보 조회
- dao 인터페이스 : public List<Emp> getEmpList(Emp sch);
- mapper 처리 :
<select id="getEmpList" resultType="emp" parameterType="emp">
select e.empno, e.ename, d.dname, m.ename mename, e.job
from emp100 e, emp100 m, dept100 d
// outer join e.mgr과 m.empno가 매치되지 않을 때 e.mgr은 출력되고 m.empno는 null로 출력
where e.mgr = m.empno(+)
and d.deptno = e.deptno
and e.ename LIKE '%'||#{ename}||'%'
AND e.job like '%'||#{job}||'%'
// mybatis의 동적 쿼리 숫자형인 mgr, deptno의 데이터가 없을 때 (0일 때)는 쿼리문이 실행되지 않고, 검색 데이터가 있을 때만 쿼리문이 실행
<if test='mgr != 0'>
and e.mgr = #{mgr}
</if>
<if test='deptno != 0'>
and e.deptno=#{deptno}
</if>
order by e.deptno, e.mgr, e.job
</select>
- service 단 처리 :
public List<Emp> getEmpList(Emp sch){
if(sch.getEname()==null) sch.setEname("");
if(sch.getJob()==null) sch.setJob("");
return dao.getEmpList(sch);
};
- controller 단 처리 :
@RequestMapping("empListMy.do")
public String empList(@ModelAttribute("sch") Emp sch, Model d) {
d.addAttribute("empList",service.getEmpList(sch));
return "\\WEB-INF\\views\\a05_mvc\\a01_empList.jsp";
}
- view단 처리 : 검색처리가 되어도 작성했던 검색어가 남아있도록 설정
<input name="ename" value="${sch.ename }" class="form-control mr-sm-2" placeholder="사원명" />
<script type="text/javascript">
$(document).ready(function(){
$("[name=deptno]").val("${sch.deptno}");
$("[name=mgr]").val("${sch.mgr}");
$("[name=job]").val("${sch.job}");
});
</script>
// 출력된 결과가 나오는 table
<tbody>
<c:forEach var="emp" items="${empList}">
<tr><td>${emp.empno }</td><td>${emp.ename }</td><td>${emp.dname }</td>
<td>${emp.mename }</td><td>${emp.job }</td>
</tr>
</c:forEach>
</tbody>