<부서관리>
부서관리 프로그램 제작으로 기본처리를 목적으로 제작했다.
{프로그램 목록}
1. deptWrite.do // 등록 화면
2. deptWriteSave.do // 등록 처리
3. deptList.do // 목록 화면
4. deptDetail.do // 상세 화면
5. deptUpdate.do // 수정 처리
6. deptDelete.do // 삭제 처리
{파일 목록}
1. DeptService.java // 명세처리 역할(인터페이스 파일)
2. DeptServiceImpl.java // 구현처리(인터페이스 파일을 상속 받아 오버라이딩한다.)
3. DeptDAO.java // 데이터베이스 연결 역할 (SQL 파일과 연결하기 위해 SQL의 ID값과 전달값을 세팅한다.)
4. Dept_SQL.xml // 실행 SQL을 기록한다. iBatis 구조 또는 myBatis 구조로 되어있다.
5. DeptController.java // 웹 주소 매핑, 서비스 실행, 화면출력 등을 담당하는 Main 격에 해당하는 파일이다.
6. DeptVO.java // 정보담기 역할을 하는 파일로 정보 전달에 필요한 변수 및 GET,SET 메소드가 세팅된다.
{구성 이미지}
- 패키지 이름은 각자 다를 수 있으나 기본적으로 아래와 같은 위치에서 배치가 되어야한다.
{상세 내용 보기}
1. DeptService - 명세역할(인터페이스)
package egovframework.example.sample.service;
import java.util.List;
/*자바는 Class와 Interface 두가지가 존재한다!!!*/
/*실행을 하면 메모리에 올라간다! 객체로 생성되지만 인터페이스는 그냥 글자로써 존재한다!*/
/*추상화라는 것은 명세라는 의미를 가진다!*/
public interface DeptService {
/* 데이터 베이스 항목들을 작성한다! */
/* 데이터베이스와 연관되어 있는 것은 이곳에다가 추가해야한다! */
/* 명세 역할을 하는 메소드를 작성한다! */
public String InsertDept(DeptVO vo) throws Exception;
/*명세처리를 우선 먼저 해야한다!!!!*/
public List<?> SelectDeptList(DeptVO vo) throws Exception;
/* Service는 SQL를 실행되게끔 하는 내용이다! */
/* 여기서 중요한 부분은 리턴타입인데, VO이다! */
/* 리턴타입은 결과론적으로 어떤 것들이 전달될 것인가이다! */
/* 매개변수는 SQL로 전달시켜서 조건식에 대입시키게될 요소이다! */
public DeptVO selectDeptDetail(int deptno) throws Exception;
/* 메소드가 정상적으로 실행되고 나서 반환되는 값이 int라는 말이다! */
/* Delete같은 경우에는,데이터베이스에서 출력이 되거나 그러한 존재가 아니다! */
/* 여기서 Integer는 insert,update,delete와 같이 처리가 아닌 처리가 되는 부분은 결과물을 리턴해준다! */
/* 결과물이라는 것은 몇개를 삭제했는지이다! */
/* deptno로 인해 갯수가 넘어가기 때문에,Integer로 리턴해준다! */
public int deleteDept(int deptno) throws Exception;
/*
* 여기서 Integer는 SqlDeveloper에서 가져오는 것이 아니라 iBatis라는 구조에서 실행을 시키는데 그쪽에서 가져오는것이다!
*/
public int updateDept(DeptVO vo) throws Exception;
}
2. DeptVO
package egovframework.example.sample.service;
public class DeptVO {
/* 해당 변수에 다이렉트로 도달하지 못하도록 private라는 접근제어자를 사용한다! */
private String deptno;
private String dname;
private String loc;
public String getDeptno() {
return deptno;
}
public void setDeptno(String deptno) {
this.deptno = deptno;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public String getLoc() {
return loc;
}
public void setLoc(String loc) {
this.loc = loc;
}
}
3. DeptServiceImpl - 구현역할(인터페이스 파일을 상속받아 구현)
package egovframework.example.sample.service.impl;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import egovframework.example.sample.service.DeptService;
import egovframework.example.sample.service.DeptVO;
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
/*Impl은 구현체이다!*/
/*혼자서는 사용이 불가능하여, 연결이 되어야 구현을 할 수 있다!*/
/*추상화된 것을 상속받는다!*/
/*Controller에서 인식하는 용도이다!*/
@Service("deptService")
public class DeptServiceImpl extends EgovAbstractServiceImpl implements DeptService{
/* 추상클래스나 인터페이스를 상속받게 되면 강제적으로 의무가 주어지는데 그것은 바로! */
/* 명세에 해당되는 것들은 모조리 구현이 되어야 한다! */
/* 접근제어자와 타입과 메서드 그리고 매개변수가 모두 동일해야 한다! */
/* DeptServiceImple 마우스 위에 올려서 자동완성 시킨다! */
/* 프레임워크에서 어떠한 클래스를 사용하기 위해서는 Annotation를 꼭 사용해줘야한다! */
/* 프레임워크 - 소프트웨어 개발에 있어 하나의 뼈대 역할을 한다. */
@Resource(name = "deptDAO")
private DeptDAO deptDAO;
/* Override는 다형성이다! */
/* 부모클래스에 있는 것들을 덮어쓴다는 말이다! */
/* 다형성 - 오버라이딩(상속), 오버로딩(같은 클래스) */
/* 객체지향의 4대 요소 : 추상화, 다형성, 상속, 캡슐화 */
/* 여기서 캡슐화는 public를 의미한다 */
@Override
public String InsertDept(DeptVO vo) throws Exception {
return deptDAO.insertDept(vo);
}
/* Override - 상속관계에서 설정되는데,부모클래스 내용의 똑같은 메소드를 만든다! */
@Override
public List<?> SelectDeptList(DeptVO vo) throws Exception {
return deptDAO.selectDeptList(vo);
}
@Override
public DeptVO selectDeptDetail(int deptno) throws Exception {
return deptDAO.selectDeptDetail(deptno);
}
@Override
public int deleteDept(int deptno) throws Exception {
return deptDAO.deleteDept(deptno);
}
/* 메소드 이름과 return 값에 있는 DAO의 이름은 동일하지 않아도 된다! */
@Override
public int updateDept(DeptVO vo) throws Exception {
return deptDAO.updateDept(vo);
}
}
4. DeptDAO - DB연결 역할
package egovframework.example.sample.service.impl;
import java.util.List;
import org.springframework.stereotype.Repository;
import egovframework.example.sample.service.DeptVO;
import egovframework.rte.psl.dataaccess.EgovAbstractDAO;
/*Service라는 항목은 반드시 만들어야 하는 요소들에 대한 정의!*/
/*예를 들어, 팀의 리더라던지 이런 항목들을 뽑는다!*/
/*Impl는 항목들을 실제 구현하는 것이다! --- 프로그램 구현(프로그램 작성)*/
/*데이터베이스를 연결해야 한다! DeptServiceImple.java에서 Dept_SQL.xml로 곧바로 가지 못한다!*/
/*DAO를 거쳐가야 한다!*/
/*DAO는 SQL를 가기위한 중간단계인 것이다!*/
/*DAO - DB연결*/
@Repository("deptDAO")
public class DeptDAO extends EgovAbstractDAO{
public String insertDept(DeptVO vo){
return (String)insert("deptDAO.insertDept", vo);
/* insert("deptDAO.insertDept", vo)해당 메소드는 상위 클래스인 EgovAbstractDAO에 있는 메소드이다! */
/* deptDAO.insertDept 대신에 1이나 2 등 사용해도된다.. */
/* 예를들어, 1로 했다면 SQL.xml id값에 1로 해줘야한다! */
}
public List<?> selectDeptList(DeptVO vo) {
return (List<?>)list("deptDAO.selectDeptList");
/* 목록같은 데이터들을 조회해줄때 list 메소드를 사용한다! select(x) */
}
public DeptVO selectDeptDetail(int deptno) {
return (DeptVO)select("deptDAO.selectDeptDetail", deptno);
}
public int deleteDept(int deptno) {
return (int)delete("deptDAO.deleteDept", deptno);
/* SQL의 id값에 사용될 수 있게 DAO의 이름과 메소드 이름을 정해준다! */
}
/* DAO는 sql과 연동을 위한 목적을 지니고 있다!!!!!! */
/* sql에서 사용하는 id값을 세팅을 하고 sql에서 필요한 데이터를 전달시켜주는 역할을 한다!!! */
public int updateDept(DeptVO vo) {
return (int)update("deptDAO.updateDept", vo);
}
}
5. DeptController
package egovframework.example.sample.web;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import egovframework.example.sample.service.DeptService;
import egovframework.example.sample.service.DeptVO;
@Controller
public class DeptController {
@Resource(name = "deptService")
private DeptService deptService;
@RequestMapping(value = "/deptWrite.do")
public String deptWrite() {
return "dept/deptWriter";
}
//@RequestMapping(value = "/deptWriteSave.do")
//public String InsertDept(DeptVO vo) {
/* InsertDept라고 메서드 이름을 정한 이유는 저장을 하기위한 것이구나라고 알기쉽게 표현하기 위해서다 ^^ */
//System.out.println(vo.getDeptno());
//System.out.println(vo.getDname());
//System.out.println(vo.getLoc());
//return "";
//}
@RequestMapping(value = "/deptWriteSave.do")
public String InsertDept(DeptVO vo) throws Exception{
System.out.println(vo.getDeptno());
System.out.println(vo.getDname());
System.out.println(vo.getLoc());
String result = deptService.InsertDept(vo);
if(result == null) { //저장 ok
System.out.println("저장완료");
}else {
System.out.println("저장실패");
}
return "";
}
@RequestMapping(value = "/deptList.do")
public String selectDeptList(DeptVO vo, ModelMap model) throws Exception {
/*ModelMap이라는 클래스는 이 자체가 매개체이다!*/
/* 데이터를 jsp로 전달해주는 역할이다! */
/* ModelMap으로 태워서 return으로 화면에 전달하면 자동적으로 데이터를 전달하게 된다! */
List<?> list = deptService.SelectDeptList(vo);
/* ?는 어떤 타입이 와도된다는 말이다! */
/* 여기서 list 변수는 데이터를 들고 있는 변수이다! */
model.addAttribute("resultList",list);
/*첫번째 매개변수 : jsp에 들어갈 변수이름을 정해야함*/
/*두번째 매개변수 : 실데이터가 들어간 변수*/
System.out.println("list값:" + list);
return "dept/deptList";
/* select의 진행순서 */
/*Controller -> DeptService -> DeptServiceImpl -> DeptDAO -> Dept_SQL 여기서 컨트롤로 바로 가는것이 아니라!*/
/*역으로 */
/*-> DeptDAO -> DeptService -> DeptServiceImpl -> Controller*/
}
@RequestMapping(value = "/deptDetail.do")
public String selectDeptDetail(int deptno, ModelMap model) throws Exception {
DeptVO vo = deptService.selectDeptDetail(deptno);
/* Dept_SQL.xml 파일에서 deptVO로 담아서 매개변수에 담아오는것이기 때문에 DeptVO의 변수 vo로 담아준다! */
System.out.println("부서번호 : " + vo.getDeptno());
model.addAttribute("deptVO", vo);
/*1)jsp에 쓸 내용 */
/*2)실제 담긴 데이터의 변수*/
return "dept/deptDetail";
}
@RequestMapping(value = "/deptDelete.do")
public String deleteDept(int deptno) throws Exception {
int result = deptService.deleteDept(deptno);
if(result == 1) {
System.out.println("삭제완료");
}else {
System.out.println("삭제실패");
}
return "";
}
@RequestMapping(value = "/deptModifyWrite.do")
public String selectDeptModify(int deptno, ModelMap model) throws Exception{
/* 1. 상세정보를 가지고 와서 먼저 뿌려줘야한다! */
/*상세보기와 동일하기 때문에 Service를 안만들어줘도 된다!*/
/* Serivce라고 하는 것은 궁극적으로 SQL까지 도달하여 동작시키기 위해서이다! */
/* SQL이 돌아간 순간 DeptVO.class 파일의 변수들에게 set으로 담기게 된다! */
DeptVO vo = deptService.selectDeptDetail(deptno);
model.addAttribute("vo", vo);
/* return에는 jsp주소를 적는다! */
return "dept/deptModifyWrite";
}
@RequestMapping(value = "/deptModifySave.do")
public String updateDept(DeptVO vo) throws Exception{
int result = deptService.updateDept(vo);
if(result == 1) {
System.out.println("수정완료");
}else {
System.out.println("수정실패");
}
return "";
}
}
6. Dept_SQL.xml - iBatis 구성에 맞게 세팅
<sqlMap namespace="DeptSpace">
<!-- namespace는 고유해야한다! -->
<typeAlias alias="egovMap" type="egovframework.rte.psl.dataaccess.util.EgovMap"/>
<typeAlias alias="deptVO" type="egovframework.example.sample.service.DeptVO"/>
<!-- 실제 VO가 존재하는 경로! -->
<!-- 여기서 id값은 DAO설정한 id값과 일치해야한다! -->
<insert id="deptDAO.insertDept">
insert into dept(deptno, dname, loc) values(#deptno#,#dname#,#loc#)
<!-- ##은 iBATIS의 변수이다! -->
<!-- VO를 통해 계속 넘어오는 변수이다! -->
</insert>
<!-- id값은 DAO의 return에 있는 메소드의 매개변수와 맞춰준다! -->
<select id="deptDAO.selectDeptList" resultClass="egovMap">
<!-- insert는 출력물이 아니다!
select는 출력물이며 java파일로 List형태로 전달이 되는데,
resultClass는 SQL결과를 egovMap이라는 클래스에 담아서 전달을 시키겠다는 것이다! -->
<!-- egovMap은 무엇일까? <typeAlias alias="egovMap" type="egovframework.rte.psl.dataaccess.util.EgovMap"/> -->
select deptno,dname,loc from dept
<!-- 여기서 세미콜론(;)을 넣게되면 오류가 난다! -->
<!-- iBatis 문법을 따라야한다! -->
</select>
<!-- resultMap이란,SQL문에서 받아올 클래스를 의미한다! -->
<!-- resultMap의 이름은 DEPT_SQL.xml 파일의 alias를 적어준다! -->
<!-- SQL에서 조건에 맞는 데이터들이 출력이 될텐데,그 내용을 resultClass로 deptVO에 담겠다는 말이다! -->
<select id="deptDAO.selectDeptDetail" resultClass="deptVO"> select deptno, dname, loc from dept where deptno = #deptno# </select>
<!-- DAO에 입력한 return값을 입력해준다! -->
<!-- Controller라던지, Service라던지 다시 던져주지 않고 바로 실행만 하고 끝나기 때문에 id값만 사용하고 끝낸다! -->
<delete id="deptDAO.deleteDept"> delete from dept where deptno=#deptno# </delete>
<update id="deptDAO.updateDept"> update dept set dname=#dname#, loc=#loc# where deptno=#deptno# </update>
</sqlMap>
7. sql_map_config.xml (Dept_SQL.xml 파일 등록하는 곳)
'전자정부프레임워크' 카테고리의 다른 글
전자정부프레임워크[최종소스 첨부]_(4)코드관리 프로그램, 새로운 패키지, AJAX 이용한 등록, 일반게시판, 회원관리 (0) | 2023.01.27 |
---|---|
전자정부프레임워크_(2)오라클 연결 (0) | 2023.01.27 |
전자정부프레임워크_(1)설치 및 설정 (0) | 2023.01.22 |