위의 사진이 만드는 프로그램의 구조입니다.
처음 프로젝트를 만들었을 때 아래 9개의 폴더를 삭제합니다.
아마 처음에 egov를 설치하면 기본적으로 구조가 flat으로 되어있을 것입니다.
이를 hierarchical로 바꾸어 줍니다.
이제 설정을 바꾸어 줄 차례입니다.
폴더를 삭제하였으므로 mapper경로를 다시 설정합니다.
context-mapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
<!-- SqlSession setup for MyBatis Database Layer -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 설정파일 위치 -->
<property name="configLocation" value="classpath:/egovframework/sqlmap/example/sql-mapper-config.xml" />
<!-- query가 있는 xml 위치 -->
<property name="mapperLocations" value="classpath:/egovframework/sqlmap/mappers/*Mapper.xml" />
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>
</bean>
<!-- MapperConfigurer setup for MyBatis Database Layer with @Mapper("deptMapper") in DeptMapper Interface -->
<bean class="egovframework.rte.psl.dataaccess.mapper.MapperConfigurer">
<property name="basePackage" value="egovframework" />
</bean>
</beans>
sql-mapper-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<typeAlias alias="egovMap" type="egovframework.rte.psl.dataaccess.util.EgovMap"/>
<!--
<typeAlias alias="searchVO" type="egovframework.example.sample.service.SampleDefaultVO"/>
<typeAlias alias="sampleVO" type="egovframework.example.sample.service.SampleVO"/>
-->
</typeAliases>
</configuration>
두 VO를 삭제하였으므로 아래 두 줄은 주석처리 합니다.(삭제하셔도 상관없습니다.)
context-sqlmap.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
<!-- SqlMap setup for iBATIS Database Layer
<bean id="sqlMapClient" class="egovframework.rte.psl.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:/egovframework/sqlmap/example/sql-map-config.xml"/>
<property name="dataSource" ref="dataSource"/>
</bean>
-->
</beans>
주석처리 합니다.
dispatcher-servlet.xml
<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver" p:order="1"
p:viewClass="org.springframework.web.servlet.view.JstlView"
p:prefix="/WEB-INF/jsp/" p:suffix=".jsp"/>
jsp파일이 담기는 폴더를 삭제하였으므로 경로를 다시 설정합니다.
pom.xml에 다음 내용을 추가합니다.
log4jdbc, mysql, mariasql, dbcp 사용을 위해서 추가합니다.
<dependency>
<groupId>com.googlecode.log4jdbc</groupId>
<artifactId>log4jdbc</artifactId>
<version>1.2</version>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.31</version>
</dependency>
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>2.4.1</version>
</dependency>
context-datasource.xml
DB에 연결하기 위한 설정파일입니다.
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.0.xsd">
<!-- 테스트 실행용 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="org.mariadb.jdbc.Driver"/>
<property name="url" value="jdbc:mariadb://127.0.0.1:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="비밀번호"/>
</bean>
</beans>
이제 설정이 다 끝났습니다.
여기까지 하시고 clean을 하세요.
이제 Mapper.xml파일과 VO, Service, ServiceImpl, DAO, DAOImpl, Controller, Mapper 파일들을 만들 차례입니다.
Mapper.xml은 sql을 모아놓는 파일입니다.
아래 경로에 mappers폴더를 만들어 주세요.
이 폴더에 xml파일을 만들어 줍니다.
testMapper.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파일로 바꾸어 줍니다. -->
<mapper namespace="egovframework.example.sample.service.TestMapper">
<select id="selectTest" resultType="egovframework.example.sample.vo.TestVO">
SELECT * FROM stock
Limit 1000
</select>
</mapper>
파일을 만들고 저장하면 VO가 없다고 나옵니다 이를 위해 VO를 만들어 주어야 합니다.
아래 사진처럼 패키지와 class, interface를 생성합니다.
VO부터 구현합니다.
이는 데이터를 받는 형식으로 데이터의 결과값과 마찬가지로 만들어 주세요.
TestVO
getter setter 단축키는 alt + shift + s 키 입니다
package egovframework.example.sample.vo;
public class TestVO {
private String kind;
private String code;
private String barcode;
private String partname;
private String std;
private String qtybox;
private String box;
private String stock;
public String getKind() {
return kind;
}
public void setKind(String kind) {
this.kind = kind;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getBarcode() {
return barcode;
}
public void setBarcode(String barcode) {
this.barcode = barcode;
}
public String getPartname() {
return partname;
}
public void setPartname(String partname) {
this.partname = partname;
}
public String getStd() {
return std;
}
public void setStd(String std) {
this.std = std;
}
public String getQtybox() {
return qtybox;
}
public void setQtybox(String qtybox) {
this.qtybox = qtybox;
}
public String getBox() {
return box;
}
public void setBox(String box) {
this.box = box;
}
public String getStock() {
return stock;
}
public void setStock(String stock) {
this.stock = stock;
}
}
컨트롤러는 어떤 경로의 요청이 들어오면 어떠한 일을 처리하라고 말해주는 파일입니다.
TestController
package egovframework.example.sample.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import egovframework.example.sample.service.TestService;
import egovframework.example.sample.vo.TestVO;
@Controller
public class TestController {
@Autowired
private TestService testService;
@RequestMapping(value="/testList.do")
public String testListDo(TestVO testVo, Model model) throws Exception{
model.addAttribute("list", testService.selectTest(testVo));
return "testList";
}
}
서비스는 컨트롤러가 하는 일을 도와줍니다.
TestService
package egovframework.example.sample.service;
import java.util.List;
import egovframework.example.sample.vo.TestVO;
public interface TestService {
public List<TestVO> selectTest(TestVO testVo) throws Exception;
}
TestServiceImpl
package egovframework.example.sample.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import egovframework.example.sample.dao.TestDAO;
import egovframework.example.sample.service.TestService;
import egovframework.example.sample.vo.TestVO;
@Service
public class TestServiceImpl implements TestService{
@Autowired
private TestDAO testDao;
@Override
public List<TestVO> selectTest(TestVO testVo) throws Exception {
return testDao.selectTest(testVo);
}
}
다오는 직접 데이터를 가져오는 일을 합니다.
TestDAO
package egovframework.example.sample.dao;
import java.util.List;
import egovframework.example.sample.vo.TestVO;
public interface TestDAO {
public List<TestVO> selectTest(TestVO testVo) throws Exception;
}
TestDAOImpl
package egovframework.example.sample.dao.impl;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import egovframework.example.sample.dao.TestDAO;
import egovframework.example.sample.service.TestMapper;
import egovframework.example.sample.vo.TestVO;
@Repository
public class TestDAOImpl implements TestDAO {
@Autowired
private SqlSession sqlSession;
@Override
public List<TestVO> selectTest(TestVO testVo) throws Exception {
TestMapper mapper = sqlSession.getMapper(TestMapper.class);
return mapper.selectTest(testVo);
}
}
맵퍼 인터페이스는 mapper.xml에 적은 sql을 불러옵니다.
TestMapper
package egovframework.example.sample.service;
import java.util.List;
import egovframework.example.sample.vo.TestVO;
public interface TestMapper {
List<TestVO> selectTest(TestVO testVo) throws Exception;
}
TestList.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 아래줄이 있어야 jsp형식을 사용할 수 있습니다.-->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Board List</title>
<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/js/bootstrap.bundle.min.js" integrity="sha384-ygbV9kiqUc6oa4msXn9868pTtWMgiQaeYH7/t7LECLbyPA2x65Kgf80OJFdroafW" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.5.4/dist/umd/popper.min.js" integrity="sha384-q2kxQ16AaE6UbzuKqyBE9/u/KzioAlnx2maXQHiDX9d4/zp8Ok3f+M7DPm+Ib6IU" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/js/bootstrap.min.js" integrity="sha384-pQQkAEnwaBkjpqZ8RU1fF1AKtTcHJwFl3pblpTlHXybJjHpMYo79HY3hIi4NKxyj" crossorigin="anonymous"></script>
<style type="text/css">
a{
text-decoration: auto;
}
</style>
</head>
<body>
<br/>
<h1 class="text-center">Board List</h1>
<br/>
<br/>
<div class="container">
<table class="table table-hover table-striped text-center" style="border:1px solid;">
<colgroup>
<col width="20" />
<col width="10%" />
<col width="10%" />
<col width="20%" />
<col width="10%" />
<col width="10%" />
<col width="10%" />
<col width="10%" />
</colgroup>
<tbody>
<thead>
<tr>
<th>분류항복</th>
<th>코드</th>
<th>바코드</th>
<th>제품이름</th>
<th>용량</th>
<th>박스당 갯수</th>
<th>박스 수</th>
<th>낱개</th>
</tr>
</thead>
<!-- jstl 데이터베이스를 검색해 넘겨 받은 list 를 result 라는 이름으로 순차적으로 실행을 시키게 됨 java의 for문같이 순차적으로 실행시킴-->
<c:forEach items="${list }" var="result">
<tr>
<td><c:out value="${result.kind}" /></td>
<td><c:out value="${result.code}" /></td>
<td><c:out value="${result.barcode}" /></td>
<td><c:out value="${result.partname}" /></td>
<td><c:out value="${result.std}" /></td>
<td><c:out value="${result.qtybox}" /></td>
<td><c:out value="${result.box}" /></td>
<td><c:out value="${result.stock}" /></td>
</tr>
</c:forEach>
</tbody>
</table>
<hr/>
<div>
<br>
<ul class="pagination justify-content-center">
<li><a href="#" style="margin-right:5px;" class="text-secondary">◀</a></li>
<li><a href="#" style="margin-right:5px;" class="text-secondary">1</a></li>
<li><a href="#" style="margin-right:5px;" class="text-secondary">2</a></li>
<li><a href="#" style="margin-right:5px;" class="text-secondary">3</a></li>
<li><a href="#" style="margin-right:5px;" class="text-secondary">4</a></li>
<li><a href="#" style="margin-right:5px;" class="text-secondary">5</a></li>
<li><a href="#" style="margin-right:5px;" class="text-secondary">▶</a></li>
</ul>
</div>
<a class="btn btn-outline-info" style="float:right">글쓰기</a>
</div>
<br>
</body>
</html>
여기까지 하면 화면에 결과가 출력되는 것을 확인 할 수 있습니다.
정리하자면 spring은 각 항목에 DI를 걸어주고, mybatis는 sql과 java코드를 분리해주는 역할을 합니다.
참조 : https://haenny.tistory.com/67
https://ivory-room.tistory.com/63?category=875739
'BACK END > java spring(egov)' 카테고리의 다른 글
6. get방식으로 클라이언트로부터 받은 정보 DB저장 (0) | 2022.04.05 |
---|---|
5. DB 데이터을 엑셀 형태로 내보내기 (0) | 2022.03.31 |
4. spring 검색창으로 원하는 항목 찾기 (0) | 2022.03.30 |
2. spring mysql DB연결(maria DB) (0) | 2022.03.23 |
1. spring(egov) 설치 및 세팅 (0) | 2022.03.22 |