예제 작성 주요 순서
Project 생성
DB 세팅
mybatis 세팅
driver 세팅
jar 세팅
config.spring.context 패키지 세팅
dao 패키지 생성
service 패키지 생성
vo 패키지 생성
dao > VisitDAO.java 클래스 내용 추가
service > VisitService.java 클래스 내용 추가
mybitis.mapper > visit.xml 에서 sql문 작성
config.mybatis > mybatis-config.xml에서 sql문이 적힌 파일(visit.xml)을 불러오는 코드 작성
controller > ViewPath 인터페이스 생성
controller > VisitController 생성
servlet-context.xml 세팅
Spring Legacy Project
Spring Legacy Project 생성
Project name: SpringVisit
Templates: Spring MVC Project
top-level package 생성
com.myspring.visit
DB 세팅
기 생성한 id로 로그인
conn spring01/spring
user : spring01
password : spring
https://developernew.tistory.com/177
Spring Mybatis 기본 세팅 1 DB, Driver 세팅
Mybitis Spring Legacy Project 생성 SpringMybatis 스프링 레가시 프로젝트 > Spring MVC Project 생성 com.increpas.db DB 세팅 12C부터 사용자용 계정을 만들 때 c##을 붙여 만들어주어야 한다 => 계정 룰 삭제 alter session
developernew.tistory.com
샘플 일련번호 관리 객체 생성
create sequence seq_visit_idx;
샘플 테이블 생성: 방명록
create table visit (
idx int, --일련번호
name varchar2(100) not null, --작성자
content varchar2(2000) not null, --내용
pw varchar2(100) not null, --비밀번호
ip varchar2(100) not null, --IP
regdate date --작성일시
);
샘플데이터 입력
insert into visit values( seq_visit_idx.nextVal,
'일길동',
'내가 1등이닷~~~',
'1234',
'127.0.0.1',
sysdate
);
insert into visit values( seq_visit_idx.nextVal,
'일길동',
'아쉽네 2등이닷~~~',
'1234',
'127.0.0.1',
sysdate
);
select * from visit order by idx desc;
mybatis 세팅
src/main/resources에 하위 4개 패키지 생성
config.spring.context
root-context.xml파일을 config.context에 4개 복사해 넣고 파일명 명명
context-1-datasource.xml
context-2-mybatis.xml
context-3-dao.xml
context-4-service.xml
config.spring.mvc
servlet-context.xml파일을 복사해 넣기
config.mybatis / config.mybatis.mapper
아래 파일을 해당 패키지 안에 넣기
src > main > webapp > WEB-INF > Spring > web.xml
1) 한글 필터 삽입
https://developernew.tistory.com/175
Spring 한글 필터 설정 방법
: web.xml > 필터 설정 코드 붙여넣기 encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding utf-8 encodingFilter /*
developernew.tistory.com
2) root-context.xml 경로 변경
<!-- <param-value>/WEB-INF/spring/root-context.xml</param-value> -->
<param-value>classpath*:config/spring/context/context-*.xml</param-value>
3) servlet-context.mxl 경로 변경
<!-- <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> -->
<param-value>classpath:config/spring/mvc/servlet-context.xml</param-value>
드라이버 & jar 세팅
로그인정보 세팅(mac 연동)
src/main/resources > config.spring.context > context-1-datasource.xml
context-1-datasource.xml의 Namespaces탭의 context를 체크해 주면 코드 오류가 사라진다
src/main/resources > config.mybatis > mybatis-config.xml
<mappers></mappers> 내부에 dept를 삽입 : sql문 사용을 위해
<mapper resource="config/mybatis/mapper/dept.xml"/>
pom.xml 세팅
1.
<dependencies></dependencies>태그 안에 복사한 jar 코드 삽입
- Ojdbc8
- Commoms DBCP
- MyBatis
- MyBatis Spring
- Spring JDBC
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>21.1.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.14.RELEASE</version>
</dependency>
2.
pom.xml에서 자바 버전 11로 고치고
spring framework 버전 4.3.14.RELEASE로 // SPRING JDBC 다운받은 버전과 일치시킴
<java-version>11</java-version>
<org.springframework-version>4.3.14.RELEASE</org.springframework-version>
Project > Properties > Project Facts
세팅한 버전에 맞추어 Web Model과 JAVA 버전 세팅
config.spring.context 패키지 세팅
src/main/resources > config.spring.context > context-1-datasource.xml
복사한 코드를 context-1-datasource.xml에 입력
<context:property-placeholder location="classpath:config/mybatis/db.properties"/>
<bean id="ds" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>
<property name="defaultAutoCommit" value="false"></property>
<property name="maxTotal" value="10"></property>
</bean>
src/main/resources > config.spring.context > context-2-mybatis.xml
복사한 코드를 context-2-mybatis.xml에 입력
<bean id="factoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="ds" />
<property name="configLocation"
value="classpath:config/mybatis/mybatis-config.xml"/>
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="factoryBean" />
</bean>
서비스 패키지 생성
src/main/java > dao > VisitDAO.java
dao 패키지를 생성하여 VisitDAO 자바 클래스 생성
src/main/java > service > VisitService.java
service 패키지를 생성하여 VisitService 자바 클래스 생성
src/main/resources > config.spring.context > context-3-dao.xml
// bean생성
<bean id="deptDAO" class="dao.VisitDAO">
<property name="sqlSession" ref="sqlSession" />
</bean>
src/main/resources > config.spring.context > context-4-service.xml
//bean 생성
<bean id="visitService" class="service.VisitService">
<constructor-arg ref="visitDAO" />
</bean>
파일 구동을 위한 세팅
src/main/java > vo > VisitVO.java
vo 패키지를 생성해 VisitVO 자바 클래스 생성
src/main/java > dao > VisitDAO.java
// dao에서 기능 구현
public List<VisitVO> selectList(){
return sqlSession.selectList("visit.selectList");
}
public VisitVO selectOne(int idx) {
return sqlSession.selectOne("visit.selectOne",idx);
}
public int insert(VisitVO vo) {
return sqlSession.insert("visit.insert",vo);
}
public int update(VisitVO vo) {
return sqlSession.update("visit.update",vo);
}
public int delete(int idx) {
return sqlSession.delete("visit.delete",idx);
}
src/main/resources > config.mybatis.mapper > visit.xml
// mapper의 .xml에서 sql문 작성
<mapper namespace="visit">
<select id="selectList" resultType="visit">
select * from visit order by idx desc
</select>
<select id="selectOne" resultType="visit">
select * from visit where idx=#{idx}
</select>
<insert id="insert" parameterType="visit">
insert into visit values(seq_visit_idx.nextval,#{name},#{content},#{pwd},#{ip},sysdate)
</insert>
<update id="update" parameterType="visit">
update visit set name=#{name},content=#{content},pwd=#{pwd},ip=#{ip},regdate=sysdate where idx=#{idx}
</update>
<delete id="delete" parameterType="int">
delete visit where idx=#{idx}
</delete>
</mapper>
src/main/java > service > VisitService.java
VisitDAO에 작성되어 있는 메소드를 끌어와 return
public List<VisitVO> selectList(){
return visitDAO.selectList();
}
public VisitVO selectOne(int idx) {
return visitDAO.selectOne(idx);
}
public int insert(VisitVO vo) {
return visitDAO.insert(vo);
}
public int update(VisitVO vo) {
return visitDAO.update(vo);
}
public int delete(int idx) {
return visitDAO.delete(idx);
}
src/main/resources > config.mybatis > mybatis-config.xml
// sql문을 읽을 수 있게 세팅 : sql문을 작성한 파일을 불러온다
<mapper resource="config/mybatis/mapper/visit.xml"/>
// typeAlias 추가 : 등록해놓고 손쉽게 쓰기 위해서
<typeAliases>
<typeAlias type="vo.VisitVO" alias="visit"/>
</typeAliases>
구동 클래스 생성
src/main/java > common > ViewPath.java 인터페이스 생성
ViewPath.java 자바 인터페이스 생성 후 경로 변수 생성
public static final String VISIT = "/WEB-INF/views/visit/";
src/main/java > controller > VisitController.java 생성
@Controller
public class VisitController {
private VisitService visitService;
public VisitController(VisitService visitService) {
this.visitService=visitService;
}
@RequestMapping({"/", "/list"})
public String list(Model model) {
List<VisitVO> list = visitService.selectList();
model.addAttribute("list", list);
return ViewPath.VISIT + "list.jsp";
}
// model에다가 List<VisitVO>를 생성해 똑같이 순서대로 담고 저장
@RequestMapping("/insert_form")
public String insertForm() {
return ViewPath.VISIT + "insert_form.jsp";
}
@RequestMapping("/insert")
public String insert(VisitVO vo,HttpServletRequest request) {
String ip = request.getRemoteAddr();
vo.setIp(ip);
String content = vo.getContent();
vo.setContent(content.replaceAll("\r\n", "<br>"));
int res = visitService.insert(vo);
if(res != 0) {
return "redirect:list";
}else {
return "redirect:insert_form";
}
}
@RequestMapping("/update_form")
public String updateForm(Model model,int idx) {
VisitVO vo = visitService.selectOne(idx);
String content = vo.getContent();
vo.setContent(content.replaceAll("<br>", "\r\n"));
model.addAttribute("vo", vo);
// update와 유사하나 정보를 받아서 넘겨야 하므로 model정보를 받아온다
// model.addAttribute에 vo를 담아주고 update는 동일하게 vo 정보 필요
return ViewPath.VISIT + "update_form.jsp";
}
@RequestMapping("/update")
public String update(VisitVO vo,HttpServletRequest request) {
String ip = request.getRemoteAddr();
vo.setIp(ip);
String content = vo.getContent();
vo.setContent(content.replaceAll("\r\n", "<br>"));
int res = visitService.update(vo);
if(res != 0) {
return "redirect:/list";
}else {
return "redirect:update_form";
}
}
@RequestMapping("/delete")
public String update(int idx) { // delete만 parameter값이 int이다
visitService.delete(idx);
return "redirect:list";
}
}
src/main/resources > config.spring.mvc > servlet-context.xml
서블렛 xml beans 생성
view page 생성
visit > insert_form.jsp 생성
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>Insert title here</title>
<script type="text/javascript">
function send(f)
{
var name = f.name.value;
var content = f.content.value;
var pw = f.pw.value;
if(name==''){
alert('작성자 이름을 입력하세요');
f.name.focus();
return ;
}
if(content==''){
alert('내용을 입력하세요');
f.content.focus();
return;
}
if(pw==''){
alert('비밀번호를 입력하세요');
f.pw.focus();
return;
}
f.action = 'insert';
f.submit();//전송
}
</script>
</head>
<body>
<form method="post">
<table border="1" align="center">
<caption>::::방명록쓰기::::</caption>
<tr>
<th>작성자</th>
<td><input name="name"></td>
</tr>
<tr>
<th>내용</th>
<td>
<textarea name="content" rows="5" cols="50"></textarea>
</td>
</tr>
<tr>
<th>비밀번호</th>
<td><input type="password" name="pw"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="button" value="글쓰기"
onclick="send(this.form);" >
<input type="button" value="목록보기"
onclick="location.href='list'">
</td>
</tr>
</table>
</form>
</body>
</html>
visit > list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ 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>Insert title here</title>
<link rel="stylesheet"
href="${ pageContext.request.contextPath }/resources/css/visit.css">
<script type="text/javascript">
function modify(f) {
var pw = f.pw.value;
var c_pw = f.c_pw.value;
if(pw != c_pw){
alert("비밀번호가 다릅니다.");
return;
}
f.method = "post";
f.action = "${pageContext.request.contextPath}/update_form"
f.submit();
}
function del(f) {
var pw = f.pw.value;
var c_pw = f.c_pw.value;
if(pw != c_pw){
alert("비밀번호가 다릅니다.");
return;
}
if(confirm('정말 삭제하시겠습니까?')==false){
return;
}
f.method = "post";
f.action = "${pageContext.request.contextPath}/delete"
f.submit();
}
</script>
</head>
<body>
<%-- 현재 ContextPath : ${ pageContext.request.contextPath }<br> --%>
<div id="main_box">
<h1>::::방명록 리스트::::</h1>
<div align="center">
<input type="button" value="글쓰기" onclick="javascript:location.href='${pageContext.request.contextPath}/insert_form'">
</div>
<c:forEach var="vo" items="${ list }">
<div class="visit_box">
<div class="type_content">
${ vo.content }<br>
</div>
<div class="type_name">작성자:${ vo.name } (${ vo.ip })</div>
<div class="type_regdate">작성일자:${ vo.regdate }</div>
<div>
<form>
<input type="hidden" name="idx" value="${ vo.idx }">
<input type="hidden" name="pw" value="${ vo.pw }">
비밀번호(${ vo.pw }):<input type="password" name="c_pw">
<input type="button" value="수정" onclick="modify(this.form);">
<input type="button" value="삭제" onclick="del(this.form);">
</form>
</div>
</div>
</c:forEach>
</div>
</body>
</html>
visit > update_form.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>Insert title here</title>
<script type="text/javascript">
function send(f)
{
var name = f.name.value;
var content = f.content.value;
var pw = f.pw.value;
if(name==''){
alert('작성자 이름을 입력하세요');
f.name.focus();
return ;
}
if(content==''){
alert('내용을 입력하세요');
f.content.focus();
return;
}
if(pw==''){
alert('비밀번호를 입력하세요');
f.pw.focus();
return;
}
f.action = 'update';
f.submit();//전송
}
</script>
</head>
<body>
<form method="post">
<input type="hidden" name="idx" value="${ vo.idx }">
<table border="1" align="center">
<caption>::::방명록수정::::</caption>
<tr>
<th>작성자</th>
<td><input name="name" value="${ vo.name }"></td>
</tr>
<tr>
<th>내용</th>
<td>
<textarea name="content" rows="5" cols="50">
${ vo.content }</textarea>
</td>
</tr>
<tr>
<th>비밀번호</th>
<td><input type="password" name="pw" value="${ vo.pw }"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="button" value="수정하기"
onclick="send(this.form);" >
<input type="button" value="목록보기"
onclick="location.href='list'">
</td>
</tr>
</table>
</form>
</body>
</html>
'Backend > Spring' 카테고리의 다른 글
Spring Mybatis 기본 세팅 2 서비스 패키지, 컨트롤러 생성 (0) | 2023.05.26 |
---|---|
Spring Mybatis 기본 세팅 1 DB, Driver 세팅 (0) | 2023.05.23 |
Spring 서버 구동 방식 (0) | 2023.05.23 |
Spring 한글 필터 설정 방법 (0) | 2023.05.23 |
Spring 기본 routine : logic Parameter 구동 방식 (0) | 2023.05.18 |