본문 바로가기

백/전자정부프레임워크

전자정부프레임워크 2 - 프로젝트 만들어보기

2023.07.13 - [백/전자정부프레임워크] - 전자정부 프레임워크 소개 및 설치, 사용

프로젝트 생성 및 테스트

톰캣에서 아까 프로젝트(egov_01)빼고 이것만 추가

dis 검색해서 prefix 경로 /로 바꾸기
만들어

 

이거 복사해서 노트패드로 가져가서 소문자 변환

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="deptWriteSave.do" method="post">
		<table>
			<tr>
				<th>부서번호</th>
				<td><input type="text" name="deptno"></td>
			</tr>
			<tr>
				<th>부서이름</th>
				<td><input type="text" name="dname"></td>
			</tr>
			<tr>
				<th>부서위치</th>
				<td><input type="text" name="loc"></td>
			</tr>
			<tr align="center">
				<td colspan="2">
					<button type="submit">저장</button>
				</td>
			</tr>
		</table>
	</form>
</body>
</html>

이제 컨트롤러 만들러- 이름은 DeptController

 

당연히 위치는 samplecontroller있는 곳에

컨트롤러 어노테이션 달아주고, sl4j는.. 없다!

=>pom.xml에 추가해줘야함

		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.24</version>
			<scope>provided</scope>
		</dependency>

맨아래에추가해줌

package egovframework.example.sample.web;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import lombok.extern.slf4j.Slf4j;

@Controller
@Slf4j
public class DeptController {
	
	@RequestMapping(value = "/deptWrite.do")
	public String deptWrite() {
		return "dept/deptWrite";
	}
	
	@ResponseBody
	@RequestMapping(value = "/deptWriteSave.do")
	public String deptWriteSave(String deptno, String dname) {
		log.info("부서번호 : "+deptno);
		log.info("부서이름 : "+dname);
		return "writeSave";
	}
}


이제 vo를 추가해보자(service패키지에 추가하면됨)

package egovframework.example.sample.service;

import lombok.Getter;
import lombok.Setter;

@Setter
@Getter
public class DeptVO {
	private int deptno;
	private String dname;
	private String loc;
	
}

이제 객체가 생겼으니 객체에 담아서 사용하자


db연결


lib에

ojdbc 추가

pom.xml

        <!-- 오라클 설정 start -->
        <repository>
        	<id>codelds</id>
        	<url>https://code.lds.org/nexus/content/groups/main-repo</url>
        </repository>
        <!-- 오라클 설정 end -->
        
    </repositories>

	<dependencies>
        <!-- 오라클 설정 start -->
		<dependency>
			<groupId>ojdbc</groupId>
			<artifactId>ojdbc</artifactId>
			<version>6-11</version>
			<scope>system</scope>
			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/ojdbc6.jar</systemPath>
		</dependency>
		<dependency>
			<groupId>commons-dbcp</groupId>
			<artifactId>commons-dbcp</artifactId>
			<version>1.4</version>
		</dependency>
        <!-- 오라클 설정 end -->

repository와 dependencies 사이에 넣어줌

여기를 찾아보세요

테스트 실행용 hsql지우고 밑에 주석처리 된 오라클 복사해와서 name, password, url 끝 xe로 바꾸기

이렇게!

dao만들자

serviceimpl 패키지에 만들면된다

boot는  dao를 mapper어노테이션으로 썼지만 전자정부는 repository로 씀

sample DAO를 보면 알수 있음

EgovAbstractDAO=> 전자정부가 제공하는 것, 그대로 extend해서 사용하면됨

저렇게 sample을 옆에 띄워놓고 형식 보면서 만들면됨

package egovframework.example.sample.service.impl;

import org.springframework.stereotype.Repository;

import egovframework.example.sample.service.DeptVO;
import egovframework.rte.psl.dataaccess.EgovAbstractDAO;

//@Repository("deptDAO"): 스프링 컨테이너가 관리하는 빈(스프링이 관리하는 객체)
@Repository("deptDAO")
public class DeptDAO extends EgovAbstractDAO {
	
	public String inserDept(DeptVO vo) throws Exception {
		return (String) insert("deptDAO.insertDept", vo);
	}

	
}

이제 XML만들기

전자정부는 MYBATIS 이전 IBATIS사용

그럼 저 경로에 xml이 있겟지

 

ibatis 문법에 맞는 샘플 쿼리들이 있음

이제 컨피그 설정파일에

<sqlMap resource="egovframework/sqlmap/example/sample/Dept_SQL.xml"/> 추가
저 sample을 복사해서 dept_sql만들자
저 위치에 있어야 sqlmap이 찾아가겟죠!??!

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd">

<!-- <sqlMap namespace="Sample"> -->
<!-- 고유한 이름, 안에서 사용하진 않는다 -->
<sqlMap namespace="Dept">

   <typeAlias  alias="egovMap" type="egovframework.rte.psl.dataaccess.util.EgovMap"/>
   <!-- type="" : 리턴타입 alias="deptVO" 로 받아서 처리 -->
   <typeAlias  alias="deptVO" type="egovframework.example.sample.service.DeptVO"/>


<!-- 	deptDAO.insertDept : dao에서 호출되는 이름과 매칭 -->
   <insert id="deptDAO.insertDept">
<!--    		##: dao에서 넘어오는 vo -->
<!--    		"deptDAO.insertDept", vo -->
      <![CDATA[
         INSERT INTO dept 
            (deptno
            ,dname
            ,loc )
         VALUES ( 
         	 #deptno#
            ,#dname#
            ,#loc# )
      ]]>
   </insert>


</sqlMap>

Dept_SQL 일단 바꾼 부분만 적음

 앨리아스 중복되지않게 주의! sample그대로쓰면 중복되서 오류남

이제 서비스쪽가서 

생성

아까처럼

기본 제공하는 sample이랑 비교하면서 복사해서 사용하기

package egovframework.example.sample.service;

public interface DeptService {
//	접근 지정자 없으므로 default임
	String insertDept(DeptVO vo) throws Exception;
}

impl도 똑같은 방식으로,

EgovAbstractServiceImpl extends 해야함

package egovframework.example.sample.service.impl;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import egovframework.example.sample.service.DeptService;
import egovframework.example.sample.service.DeptVO;
import egovframework.example.sample.service.EgovSampleService;
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;


//@Service("deptService"): 컨트롤러에서 deptService로 연결
@Service("deptService")
public class DeptServiceImpl extends EgovAbstractServiceImpl implements DeptService {

//	@Resource(name = "deptDAO") : deptDAO 이름으로 dao 사용(ibatis방식, mybatis는 매퍼)
	@Resource(name = "deptDAO")
	private DeptDAO deptDAO;
	
	@Override
	public String insertDept(DeptVO vo) throws Exception {
		return deptDAO.inserDept(vo);
	}
	
}

이제 컨트롤러로 고고

package egovframework.example.sample.web;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import egovframework.example.sample.service.DeptService;
import egovframework.example.sample.service.DeptVO;
import egovframework.example.sample.service.EgovSampleService;
import lombok.extern.slf4j.Slf4j;

@Controller
@Slf4j
public class DeptController {
	
//	@Resource(name = "deptService") : DeptServiceImpl에 @Service로 연결
	@Resource(name = "deptService")
	private DeptService deptService;
	
	@RequestMapping(value = "/deptWrite.do")
	public String deptWrite() {
		return "dept/deptWrite";
	}
	
	@RequestMapping(value = "/deptWriteSave.do")
//	public String deptWriteSave(String deptno, String dname, String loc) {
	public String deptWriteSave(DeptVO vo) throws Exception {
//		log.info("부서번호 : "+deptno);
//		log.info("부서이름 : "+dname);
		log.info("부서번호 : "+vo.getDeptno());
		log.info("부서이름 : "+vo.getDname());
		log.info("부서위치 : "+vo.getLoc());
		
		String result = deptService.insertDept(vo);
		log.info("@# result ===>"+ result);
		
		return "";
	}
}

이대로 실행하면 dbcp2 이런 버그가 난다 => 전자정부프레임워크 고유 버그

context-datasource.xml에 가서

'2' 를 빼줌

이제 잘 들어감

부서번호 크기 2니까 2자리수이상못넣음