ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 교육5일차 정리
    공부방/Spring 2013. 3. 8. 11:20

    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
Designed by Tistory.