1. 유효성 검사
사용자의 입력에 대한 유효성 검증등을 위해서 사용하게 된다.
- Validator을 구현한 BoardValidator 클래스 생성
package com.multicampus.view.board;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
import com.multicampus.biz.board.vo.BoardVO;
public class BoardValidator implements Validator{
public boolean supports(Class<?> arg0) {
// TODO Auto-generated method stub
return false;
}
public void validate(Object target, Errors errors) {
// TODO Auto-generated method stub
BoardVO board = (BoardVO)target;
//null 이거나, 공백이거나, 빈문자열이면 message.propertites 에 정의해 놓은 board.title를 적용 시켜라
ValidationUtils.rejectIfEmpty(errors, "title","board.title");
ValidationUtils.rejectIfEmpty(errors, "writer","board.writer");
if(board.getContent().length()<=10){
errors.rejectValue("content", "board.content");
}
}
}
- addBoard controller.java
public String addBoard(BoardVO vo, BindingResult result) throws Exception {
new BoardValidator().validate(vo, result);
if(result.hasErrors()){
System.out.println(result.toString());
return "addBoard.jsp";
}
// 파일 업로드
MultipartFile uploadFile = vo.getUploadFile();
if(uploadFile != null && uploadFile.getOriginalFilename().length() > 0){
String fileName = uploadFile.getOriginalFilename();
byte[] fileData = uploadFile.getBytes();
FileOutputStream output = new FileOutputStream
("C:/DEV/work/BoardWeb-Annotation/WebContent/uploadFiles/" + fileName);
output.write(fileData);
}
boardService.addBoard(vo);
return "getBoardList.do";
}
-addBoard.jsp
<%@page contentType="text/html; charset=EUC-KR"%>
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>새글등록</title>
</head>
<body>
<center>
<h3>새글 등록하기............<a href='logout.do'>LOG-OUT</a></h3>
<hr>
<form action="addBoard.do" method="post" enctype="multipart/form-data">
<table border="1" cellpadding="0" cellspacing="0">
<tr>
<td>제목</td><td align="left"><input type="text" name="title"/>
<form:errors path="boardVO.title"/></td>
</tr>
<tr>
<td>작성자</td><td align="left"><input type="text" name="writer" size="10"/>
<form:errors path="boardVO.writer"/></td>
</tr>
<tr>
<td>내용</td><td align="left"><textarea name="content" cols="40" rows="10">
</textarea><form:errors path="boardVO.content"/></td>
</tr>
<tr>
<td>파일</td><td align="left"><input type="file" name="uploadFile"/></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value=" 새글 등록 "/></td>
</tr>
</table>
</form>
<hr>
</center>
</body>
</html>
2. ibatis 를 활용한 DB연동
-resources 폴더에 sql-map-config.xml 파일을 등록한다. 이 파일이 ibatis의 환경 설정 파일이다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<properties resource="database.properties" />
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${driver}" />
<property name="JDBC.ConnectionURL" value="${url}" />
<property name="JDBC.Username" value="${username}" />
<property name="JDBC.Password" value="${password}" />
</dataSource>
</transactionManager>
<sqlMap resource="mappings/user-mapping.xml" />
<sqlMap resource="mappings/board-mapping.xml" />
</sqlMapConfig>
- database.properties 접속 정보가 들어있는 properties 파일
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:xe
username=hr
password=hr
-resources / mappings 폴더에 sql문 mapping 을 위한 명령어들을 정의해 놓는다.
다음은 게시판 관련 sql 문들이 들어 있는 board-mapping.xml 설정 파일이다.
자세히 보면 기존에는 '?'로 값을 대입시켰던 부분을 #변수명#으로 대치시키고 있다.
그리고 typeAlias 라는 태그를 사용하여 parameterClass 쓰를 c에서 #define 시키듯이 사용하고 있다.
parameterClass는 sql문에 데이터를 삽입 시키기 위해 사용하는 클래스이다.
마지막으로 get 메소드를 보게되면 데이터의 리턴이 일어나기 때문에 resultClass 를 사용하고 있다.
따라서 get 메소드에는 무조건 resultClass를 사용해야 함을 잊지 말기를~
% 주의 사항
sql 명령어 mapping 을 위해 사용하게 되는 mapping 파일에서 각각의 명령어들의 id는 유니크해야만 한다.
이것은 mappings 폴더 안에 있는 파일들은 각각 유니크한 id를 가져야 한다는것을 의미한다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap>
<typeAlias alias="board" type="com.multicampus.biz.board.vo.BoardVO" />
<insert id="addBoard" parameterClass="board">
insert into
board(seq,title, writer, content)
values((select nvl(max(seq), 0)+1 from board),#title#,#writer#,#content#)
</insert>
<update id="updateBoard" parameterClass="board">
update board set
title=#title#, content=#content# where seq=#seq#
</update>
<delete id="deleteBoard" parameterClass="board">
delete board where
seq=#seq#
</delete>
<select id="getBoard" parameterClass="board" resultClass="board">
select * from board where
seq=#seq#
</select>
<select id="getBoardList" parameterClass="board" resultClass="board">
select * from board
where title like '%'||#searchKeyword#||'%' order by seq desc
</select>
</sqlMap>
- ibatis를 사용하고 있는 BoardDAO
package com.multicampus.biz.board.impl;
import java.sql.SQLException;
import java.util.List;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.multicampus.biz.board.vo.BoardVO;
import com.multicampus.biz.util.SqlMapClientFactoryBean;
public class BoardDAO {
private SqlMapClient ibatis;
public BoardDAO() {
//생성자 메소드를 통해서 밑에 정의한 SqlMapClientFactoryBean을 통해 객체를 할당 받고 있다.
ibatis = SqlMapClientFactoryBean.getSqlMapClientInstance();
}
public void addBoard(BoardVO vo) throws SQLException{
ibatis.insert("addBoard",vo);
}
public void updateBoard(BoardVO vo) throws SQLException{
ibatis.update("updateBoard",vo);
}
public void deleteBoard(BoardVO vo) throws SQLException{
ibatis.delete("deleteBoard",vo);
}
public BoardVO getBoard(BoardVO vo) throws SQLException{
return (BoardVO) ibatis.queryForObject("getBoard",vo);
}
@SuppressWarnings("unchecked")
public List<BoardVO> getBoardList(BoardVO vo) throws SQLException{
return ibatis.queryForList("getBoardList", vo);
}
}
- ibatis 객체 생성을 위해 정의한 SqlMapClientFactoryBean.java 클래스
package com.multicampus.biz.util;
import java.io.Reader;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
public class SqlMapClientFactoryBean {
private static SqlMapClient sqlMapClient = null;
static {
try {
if (sqlMapClient == null) {
// reader를 통해 sql-map-config.xml 환경 설정 파일을 불러들이고 있다.
Reader reader = Resources.getResourceAsReader("sql-map-config.xml");
sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static SqlMapClient getSqlMapClientInstance() {
return sqlMapClient;
}
}
'공부방 > Spring' 카테고리의 다른 글
스프링 쿼츠 (Spring Quartz) 스케쥴러에 배치(Batch) 파일 등록하기 (0) | 2013.07.05 |
---|---|
Http 응답상태 코드 (0) | 2013.03.12 |
교육 4일차 정리 (0) | 2013.03.07 |
교육 3일차 정리 (0) | 2013.03.06 |
교육 2일차 정리 (0) | 2013.03.05 |