* controller 부분이 바뀐다.


환경설정 >

1. 사이트 접속  - 다운로드

http://www.apache.org/

  • Struts


  • Apache Struts 2.3.8 GA  다운로드/압축해제


    2. 라이브러리 복사

    압축해제 후 \struts-2.3.4\apps 밑에 struts2-blank.war 압축풀고
    그밑에 \WEB-INF\lib의 라이브러리 복사해서 사용해도 된다.( 이예제 사용을 위해 ) 

    3. WEB-INF 밑에





















    ; classes폴더밑에 xml2개 복사. ( struts2-blank.war에서 )

    ; web.xml은 filter역할. 내용은 struts2-blank.war에서 web.xml내용 복사.

    ; 구성완료.



    (1) web.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

        <display-name>Struts Blank</display-name>

        <filter>
            <filter-name>struts2</filter-name>
            <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
        </filter>

        <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>/-</url-pattern>
        </filter-mapping>

        <welcome-file-list>
            <welcome-file>index.html</welcome-file>
        </welcome-file-list>

    </web-app>


    (2) struts.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">

    <struts>
        <package name="default" namespace="/" extends="struts-default">
        </package>

       <include file="example.xml"/>
    </struts>

    (3) example.xml
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
            "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
            "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts>
        <package name="example" namespace="/" extends="default">
            <!-- 액션매핑하기 -->
            <action name="test" class="test.action.MyTestAction">
                <result name="success">/view/result.jsp</result>
            </action>
           
        </package>
    </struts>

    MyBatis 사용 간한한 방명록 예제

    jdbc, MVC 모델 사용 예제와 비교해 보면 상당히 간단해 졌다. 





    (1) main.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>

    </head>

    <body>

    <a href="write.html">글등록</a><br/>

    <a href="board.do?cmd=list">글목록</a><br/>

    </body>

    </html>


    (2) write.html

    <!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>

    </head>

    <body>

    <form method="post" action="board.do?cmd=write">

    작성자<input type="text" name="writer"/><br/>

    이메일<input type="text" name="email"/><br/>

    제목<input type="text" name="title"/><br/>

    내용<br/>

    <textarea rows="5" cols="50" name="content"></textarea><br/>

    <input type="submit" value="등록"/>

    </form>

    </body>

    </html>



    (3) 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>

    </head>

    <body>

    <h1>방명록</h1>

    <table border="1" width="600">

    <tr>

    <th>글번호</th>

    <th>작성자</th>

    <th>이메일</th>

    <th>제목</th>

    <th>작성일</th>

    <th colspan="2"></th>

    </tr>

    <c:forEach var="vo" items="${list }">

    <tr>

    <td>${vo.num }</td>

    <td>${vo.writer }</td>

    <td>${vo.email }</td>

    <td>${vo.title }</td>

    <td>${vo.w_date }</td>

    <td><a href="javascript:location.href='board.do?cmd=detail&num=${ vo.num }'">상세보기</a></td>

    <td><a href="javascript:location.href='board.do?cmd=delete&num=${ vo.num }'">글삭제</a></td>

    </tr>

    </c:forEach>

    </table>

    <a href="write.html"><input type="button" value="입력"></a> 

    </body>

    </html>


    (4) detail.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>

    </head>

    <body>

    <form method="post" action="board.do?cmd=update">

    번호 <input type="text" name="num" value="${ vo.num }" disabled />

    <input type="hidden" name="num" value="${ vo.num }" />

    <br/>

    작성자<input type="text" name="writer" value="${ vo.writer }"/><br/>

    이메일<input type="text" name="email" value="${ vo.email }"/><br/>

    제목<input type="text" name="title" value="${ vo.title }"/><br/>

    내용<br/>

    <textarea rows="5" cols="50" name="content">${ vo.content }</textarea><br/>

    <input type="submit" name="btnupdate" value="수정"/>

    <input type="button" name="btnlist" value="목록" onclick="javascript:location.href='board.do?cmd=list'"/>

    </form>

    </body>

    </html>


    (5) SqlSessionFactoryService.java

    package test.orm;


    import java.io.IOException;

    import java.io.InputStream;

    import org.apache.ibatis.io.Resources;

    import org.apache.ibatis.session.SqlSessionFactory;

    import org.apache.ibatis.session.SqlSessionFactoryBuilder;


    public class SqlSessionFactoryService {

    private static SqlSessionFactory sqlSessionFactory;

    static{

    try{

    InputStream is = Resources.getResourceAsStream("test/orm/mybatis-config.xml");

    sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);

    }catch(IOException ie){

    System.out.println(ie.getMessage());

    }

    }


    public static SqlSessionFactory getSqlSessionFactory() {

    return sqlSessionFactory;

    }

    }


    (6)mybatis-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 type="test.vo.BoardVo" alias="board" />

    <!--  <typeAlias type="java.lang.Integer" alias="int"/> -->

    </typeAliases>

    <environments default="development">

    <environment id="development">

    <transactionManager type="JDBC" />

    <dataSource type="POOLED">

    <property name="driver" value="oracle.jdbc.OracleDriver" />

    <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />

    <property name="username" value="scott" />

    <property name="password" value="tiger" />

    </dataSource>

    </environment>

    </environments>

    <mappers>

    <mapper resource="test/orm/BoardMapper.xml" />

    </mappers>

    </configuration>



    (7) BoardMapper.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 namespace="test.orm.BoardMapper">

    <insert id="add" parameterType="board">

    insert into board values(board_seq.nextval,#{writer},#{email},#{title},#{content},sysdate)

    </insert>

    <delete id="delete" parameterType="int">

    delete from board where num=#{num}

    </delete>

    <update id="update" parameterType="board">

    update board set writer=#{writer},email=#{email},title=#{title},content=#{content} where num=#{num}

    </update>

    <select id="getlist" resultType="board">

    select * from board order by num desc

    </select>

    <select id="find" parameterType="int" resultType="board">

    select * from board where num=#{num}

    </select>

    </mapper>



    (8)BoardController.java

    package test.controller;


    import java.io.IOException;

    import java.util.List;

    import javax.servlet.ServletException;

    import javax.servlet.annotation.WebServlet;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    import test.dao.BoardDao;

    import test.vo.BoardVo;

    @WebServlet("/board.do")

    public class BoardController extends HttpServlet {

    @Override

    protected void service(HttpServletRequest request, HttpServletResponse response)

    throws ServletException, IOException {

    request.setCharacterEncoding("utf-8");

    String cmd = request.getParameter("cmd");

    if(cmd.equals("write")){

    write(request, response);

    }else if(cmd.equals("list")){

    list(request, response);

    }else if(cmd.equals("delete")){

    delete(request, response);

    }else if(cmd.equals("update")){

    update(request, response);

    }else if(cmd.equals("detail")){

    detail(request, response);

    }

    }

    public void delete(HttpServletRequest request, HttpServletResponse response)

    throws ServletException, IOException {

    String num=request.getParameter("num");

    BoardDao dao=new BoardDao();

    int n = dao.delete(Integer.parseInt(num));

    if (n>0){

    list(request, response);

    }

    }

    public void update(HttpServletRequest request, HttpServletResponse response)

    throws ServletException, IOException {

    String num=request.getParameter("num");

    String writer=request.getParameter("writer");

    String email=request.getParameter("email");

    String title=request.getParameter("title");

    String content=request.getParameter("content");

    BoardVo vo=new BoardVo(Integer.parseInt(num), writer, email, title, content,null);

    BoardDao dao=new BoardDao();

    int n = dao.update(vo);

    if(n>0){

    list(request, response);

    }

    }

    public void detail(HttpServletRequest request, HttpServletResponse response)

    throws ServletException, IOException {

    String num=request.getParameter("num");

    BoardDao dao=new BoardDao();

    BoardVo vo = dao.deatil(Integer.parseInt(num));

    if ( vo != null){

    request.setAttribute("vo", vo);

    request.getRequestDispatcher("/detail.jsp").forward(request, response);

    }else{

    response.sendRedirect("error.jsp");

    }

    }

    public void write(HttpServletRequest request, HttpServletResponse response)

    throws ServletException, IOException {

    //전송된 데이터를 얻어오기

    String writer=request.getParameter("writer");

    String email=request.getParameter("email");

    String title=request.getParameter("title");

    String content=request.getParameter("content");

    BoardVo vo=new BoardVo(0, writer, email, title, content,null);

    //데이터를 db에 저장하기

    BoardDao dao=new BoardDao();

    int n=dao.insert(vo);


    //뷰페이지로 이동하기

    if(n>0){

    response.sendRedirect("board.do?cmd=list");

    }else{

    response.sendRedirect("error.jsp");

    }

    }

    public void list(HttpServletRequest request, HttpServletResponse response)

    throws ServletException, IOException {

    BoardDao dao = new BoardDao();

    List<BoardVo> list = dao.getList();

    if(list != null){

    request.setAttribute("list", list);

    request.getRequestDispatcher("/list.jsp").forward(request, response);

    }else{

    response.sendRedirect("error.jsp");

    }

    }

    }




    (9)BoardDao.java

    package test.dao;


    import java.util.List;


    import org.apache.ibatis.session.SqlSession;

    import org.apache.ibatis.session.SqlSessionFactory;

    import test.orm.SqlSessionFactoryService;

    import test.vo.BoardVo;


    public class BoardDao {

    private SqlSessionFactory sqlSessionFactory;


    public BoardDao() {

    sqlSessionFactory = SqlSessionFactoryService.getSqlSessionFactory();

    }

    public int delete(int num){

    SqlSession session = null;

    try {

    session = sqlSessionFactory.openSession();

    int n = session.delete("delete", num);

    session.commit();

    return n;

    } finally {

    if (session != null)

    session.close();

    }

    }

    public int update(BoardVo vo){

    SqlSession session = null;

    try {

    session = sqlSessionFactory.openSession();

    int n = session.update("update", vo);

    session.commit();

    return n;

    } finally {

    if (session != null)

    session.close();

    }

    }

    public int insert(BoardVo vo) {

    SqlSession session = null;

    try {

    session = sqlSessionFactory.openSession();

    int n = session.insert("add", vo);

    session.commit();

    return n;

    } finally {

    if (session != null)

    session.close();

    }

    }

    public List<BoardVo> getList() {

    SqlSession session = null;

    try {

    session = sqlSessionFactory.openSession();

    return session.selectList("getlist");

    } finally {

    if (session != null)

    session.close();

    }

    }

    public BoardVo deatil(int num) {

    SqlSession session = null;

    try {

    session = sqlSessionFactory.openSession();

    BoardVo vo = session.selectOne("find",num);

    return vo;

    } finally {

    if (session != null)

    session.close();

    }

    }

    }



    (10) BoardVo.java

    package test.vo;


    import java.sql.Date;


    public class BoardVo {

    private int num;

    private String writer;

    private String email;

    private String title;

    private String content;

    private Date w_date; 

    public BoardVo(){}


    public String getEmail() {

    return email;

    }

    public void setEmail(String email) {

    this.email = email;

    }

    public int getNum() {

    return num;

    }

    public void setNum(int num) {

    this.num = num;

    }

    public BoardVo(int num, String writer, String email, String title,

    String content, Date w_date) {

    super();

    this.num = num;

    this.writer = writer;

    this.email = email;

    this.title = title;

    this.content = content;

    this.w_date = w_date;

    }

    public String getWriter() {

    return writer;

    }

    public void setWriter(String writer) {

    this.writer = writer;

    }

    public String getTitle() {

    return title;

    }

    public void setTitle(String title) {

    this.title = title;

    }

    public String getContent() {

    return content;

    }

    public void setContent(String content) {

    this.content = content;

    }

    public Date getW_date() {

    return w_date;

    }

    public void setW_date(Date w_date) {

    this.w_date = w_date;

    }

    }




    'WEB > MyBatis' 카테고리의 다른 글

    dynamic query : 동적쿼리  (0) 2013.05.04
    log4j.properties  (0) 2013.05.04
    2. java 에서 mybatis 사용한 예제  (0) 2013.04.24
    1. 라이브러리 다운 및 환경설정(xml)  (0) 2013.04.24

    EX> members테이블 조회, 입력, 수정 테스트


    소스구성>



    1. xml 파일 패키지 : orm.mybatis 패키지 밑에 config.xml, memberMapper.xml

    2. test.main 패키지 : TestMain.java

        test.vo 패키지 : MembersVo.java



    (1) 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>

        <environments default="development">

            <environment id="development">

                <transactionManager type="JDBC" />

                <dataSource type="POOLED">

                    <property name="driver" value="oracle.jdbc.OracleDriver" />

                    <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />

                    <property name="username" value="scott" />

                    <property name="password" value="tiger" />

                </dataSource>

            </environment>

        </environments>

        <mappers>

            <mapper resource="orm/mybatis/memberMapper.xml" />

        </mappers>

    </configuration>


    (2) memberMapper.xml

    : select 시 resultType 으로 vo클래스(getter,setter), map( hashmap,.. ) 이 가능하다. 

    ; select 절은 반드시 resultType()이 존재해야 함.

      select로 추출된 데이터를 resultType의 객체에 담고 이 객체를 다시 List에 담아 리턴한다.

    <?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 namespace="orm.mybatis.memberMapper">

        <insert id="add" parameterType="test.vo.MembersVo">

            insert into members values(#{id},#{pwd},#{email},#{phone},sysdate)

        </insert>

        <delete id="remove" parameterType="java.lang.String">

            delete from members where id=#{id}

        </delete>

        <update id="modify" parameterType="test.vo.MembersVo">

            update members set pwd=#{pwd},email=#{email},phone=#{phone} where id=#{id}

        </update>


        <select id="getlist" resultType="test.vo.MembersVo">

            select * from members

        </select>

        <select id="find" parameterType="String" resultType="test.vo.MembersVo">

            select * from members where id=#{id}

        </select>

        <select id="getInfo" parameterType="String" resultType="hashmap">

            select * from members

             where id=#{id}    

        </select>

    </mapper>



    (3) TestMain.java

    ; insert, delet하기

    package test.main;


    import java.io.IOException;

    import java.io.InputStream;


    import org.apache.ibatis.io.Resources;

    import org.apache.ibatis.session.SqlSession;

    import org.apache.ibatis.session.SqlSessionFactory;

    import org.apache.ibatis.session.SqlSessionFactoryBuilder;


    import test.vo.MembersVo;


    public class TestMain {

        public static void main(String[] args) {


            String res="orm/mybatis/config.xml";


            try{

                // mybatis환경 설정 파일을 읽어오기 위한 스트림 객체

                InputStream is = Resources.getResourceAsStream(res);


                //SqlSessionFactory 객체 얻어오기

                SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);


                //sql문장을 호출하는 sqlSession객체 얻어오기

                SqlSession session = factory.openSession();

                MembersVo vo = new MembersVo("batis2","1111","batis@co.kr","010", null);


                //insert("호출할 sql구문 id", 파라미터객체 );

                int n=session.insert("add", vo); //xml의 insert태그 id, 파라미터


                if(n>0){

                    //커밋하기

                    session.commit();

                    System.out.println("추가 성공");

                }else{

                    session.rollback();

                    System.out.println("추가 실패");

                }

                

                n = session.delete("remove", "batis");

                System.out.println("delete 처리건수:" + n);

                

                session.commit();

                

                //세션닫기

                session.close();

                

            }catch(IOException ie){

                System.out.println(ie.getMessage());

            }

        }

    }




    (4) select 예제 :  ( vo 클래스 , hashmap 사용 )


    package test.main;


    import java.io.IOException;

    import java.io.InputStream;

    import java.sql.Timestamp;

    import java.util.HashMap;

    import java.util.List;


    import org.apache.ibatis.io.Resources;

    import org.apache.ibatis.session.SqlSession;

    import org.apache.ibatis.session.SqlSessionFactory;

    import org.apache.ibatis.session.SqlSessionFactoryBuilder;

    import test.vo.MembersVo;


    public class TestMain1 {

        public static void main(String[] args) {


            String res="orm/mybatis/config.xml";


            try{

                InputStream is = Resources.getResourceAsStream(res);

                SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);

                SqlSession session = factory.openSession();

                List<MembersVo> list = session.selectList("getlist");

                

                for(MembersVo vo:list){

                    System.out.println("id:" + vo.getId() );

                    System.out.println("pwd:" + vo.getPwd() );

                    System.out.println("email:" + vo.getEmail() );

                    System.out.println("phone:" + vo.getPhone() );

                    System.out.println("regdate:" + vo.getregdate() );

                    System.out.println();

                }

                

                String findId="batis1";


                MembersVo vo1 = session.selectOne("find", findId);

                if(vo1 == null){

                    System.out.println("검색된 회원이 없어요!");

                }else{

                    System.out.println("id:" + vo1.getId() );

                    System.out.println("pwd:" + vo1.getPwd() );

                    System.out.println("email:" + vo1.getEmail() );

                    System.out.println("phone:" + vo1.getPhone() );

                    System.out.println("regdate:" + vo1.getregdate() );

                    System.out.println();

                }

                

                HashMap<String, Object> map = session.selectOne("orm.mybatis.memberMapper.getInfo", "batis1");

                // key : 칼럼명, value : 내용.

                String id = (String)map.get("ID");

                String pwd= (String)map.get("PWD");

                String email= (String)map.get("EMAIL");

                String phone= (String)map.get("PHONE");

                Timestamp regdate= (Timestamp)map.get("REGDATE");


                System.out.println("[[  정보 검색 (map 사용)  ]]");

                System.out.println("id:" +id );

                System.out.println("pwd:" +pwd );

                System.out.println("email:" +email );

                System.out.println("phone:" +phone );

                System.out.println("regdate:" +regdate );

                

                session.close();

                

            }catch(IOException ie){

                System.out.println(ie.getMessage());

            }

        }

    }






    (5) MembersVo.java 

    package test.vo;


    import java.sql.Date;


    public class MembersVo {

        private String id;

        private String pwd;

        private String email;

        private String phone;

        private Date regdate;

        

        public MembersVo(){}


        public MembersVo(String id, String pwd, String email, String phone,

                Date regdate) {

            super();

            this.id = id;

            this.pwd = pwd;

            this.email = email;

            this.phone = phone;

            this.regdate = regdate;

        }


        public String getId() {

            return id;

        }


        public void setId(String id) {

            this.id = id;

        }


        public String getPwd() {

            return pwd;

        }


        public void setPwd(String pwd) {

            this.pwd = pwd;

        }


        public String getEmail() {

            return email;

        }


        public void setEmail(String email) {

            this.email = email;

        }


        public String getPhone() {

            return phone;

        }


        public void setPhone(String phone) {

            this.phone = phone;

        }


        public Date getregdate() {

            return regdate;

        }


        public void setregdate(Date regdate) {

            this.regdate = regdate;

        }

    }



    'WEB > MyBatis' 카테고리의 다른 글

    dynamic query : 동적쿼리  (0) 2013.05.04
    log4j.properties  (0) 2013.05.04
    3. MyBatis 사용 간한한 방명록 예제  (0) 2013.04.24
    1. 라이브러리 다운 및 환경설정(xml)  (0) 2013.04.24

    1. MyBatis 관련 jar 다운받기.


    1) 사이트로 이동.

    http://blog.mybatis.org/


    - Google Code Project


    2) MyBatis Core Framework  --> 들어간다.



    3) 해당 버전 다운받는다


    4) 다운받아 압축푼다.


    - mybatis-3.1.1.jar파일을 WEB-INF/lib밑에 복사한다.(이클립스)





    2. 2개 이상의 xml파일이 생성된다. 

     - 환경설정 파일

     - sql mapper 파일 들



     EX1> 아래 샘플은 환경설정 xml과 sql mapper 로 구성된 mybatis 테스트 예제이다.


    (1) 환경설정 xml

    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>

        <environments default="development">

            <environment id="development">

                <transactionManager type="JDBC" />

                <dataSource type="POOLED">

                    <property name="driver" value="oracle.jdbc.OracleDriver" />

                    <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />

                    <property name="username" value="scott" />

                    <property name="password" value="tiger" />

                </dataSource>

            </environment>

        </environments>

        <!-- sql구문이 들어있는 sql Mapper 파일 포함 -->

        <mappers>

            <mapper resource="orm/mybatis/memberMapper.xml" />

        </mappers>

    </configuration>


    --> 파일이 없으면 에러 난다.



    (2) sql mapper xml파일

    sql mapper xml파일( 실행할 sql 내용이 들어있다.)

    조회는 select, 입력은 insert, 수정update,삭제 delete 등 해당 태그로 둘러싸고 기술한다.

    id는 유일하며, 파라미터가 존재하면 파라미터 타입에 기술한다.


    namespace : package명 파일명 으로 하는게 보편적인 방법. 

                     .으로 구분하며, 

                     config.xml(환경설정xml)에서

                      mapper resource에서는  / (경로)로 구분한다. 




    * members 테이블에 insert, delete 하는 예제.


    memberMapper.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 namespace="orm.mybatis.memberMapper">

        <insert id="add" parameterType="test.vo.MembersVo">

            insert into members values(#{id},#{pwd},#{email},#{phone},sysdate)

        </insert>

        <delete id="remove" parameterType="java.lang.String">

            delete from members where id=#{id}

        </delete>

    </mapper>


    --> 변수인 경우는 ${변수명}으로 표시해야 한다.

    --> test.vo.MembersVo : 파라미터가 여러개인 경우 vo클래스를 넘기는 경우

    -->java.lang.String : 파라미터가 문자 하나인 경우 






    ** mybatis 사이트 다운로드 에 가면 MyBatis-3-User-Guide.pdf  사용자 가이드 (영문판)이 있다. 참고 문서. 뒤에 ko붙은 한글판도 있다.


    예전에 ibatis였고 현재 MyBatis로 다운로드에 표시되어있다.



    'WEB > MyBatis' 카테고리의 다른 글

    dynamic query : 동적쿼리  (0) 2013.05.04
    log4j.properties  (0) 2013.05.04
    3. MyBatis 사용 간한한 방명록 예제  (0) 2013.04.24
    2. java 에서 mybatis 사용한 예제  (0) 2013.04.24

    필터(Filter)


    - 클라이언트의 요청을 중간에 가로채서 요청페이지로 가기전에 특정작업을 수행함.

     수행후 요청페이지로 갈수 있고 필터에서 다른페이지로 이동도 가능하다.


    - 만드는 방법

     Filter인터페이스를 상속받아 doFilter메소드에서 처리할 작업을 구현한다.

     web.xml 에 필터매핑을 설정한다.





    EX1> 한글 encoding




    web.xml

    <?xml version="1.0" encoding="UTF-8"?>

    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

      <display-name>day09_Filter</display-name>

      <welcome-file-list>

        <welcome-file>index.html</welcome-file>

      </welcome-file-list>

      <!-- //////////////// 필터 설정하기 ///////////////// -->

      <!-- 필터정의하기 -->

      <filter>

      <filter-name>encodingFilter</filter-name>

      <filter-class>test.filter.EncodingFilter</filter-class>

      <!-- 초기화 파라미터 설정하기 -->

      <init-param>

      <param-name>encoding</param-name>

      <param-value>euc-kr</param-value>

      </init-param>

      </filter>

      <!-- 필터매핑하기

        encodingFilter는 /하위 모든 페이지를 요청할때마다 자동 호출됨

       -->

      <filter-mapping>

      <filter-name>encodingFilter</filter-name>

      <url-pattern>/*</url-pattern>

      </filter-mapping>

      <!-- //////////////////////////////////////////////// -->

    </web-app>



    EncodingFilter.java

    package test.filter;


    import java.io.IOException;

    import javax.servlet.Filter;

    import javax.servlet.FilterChain;

    import javax.servlet.FilterConfig;

    import javax.servlet.ServletException;

    import javax.servlet.ServletRequest;

    import javax.servlet.ServletResponse;


    public class EncodingFilter implements Filter {

    private String encoding = null;

    @Override

    public void destroy() {

    System.out.println("destory메소드 호출");

    encoding=null;

    }

    //필터를 요청할때 마다 자동 호출됨.

    //클라이언트의 요청을 가로채서 해야 할일을 구현

    @Override

    public void doFilter(ServletRequest request, ServletResponse response,

    FilterChain chain) throws IOException, ServletException {

    System.out.println("dofilter메소드 호출");

    // 인코딩방식이 설정되어 있지 않은 경우

    if(request.getCharacterEncoding()==null){

    if(encoding!=null){

    //인코딩 설정하기

    request.setCharacterEncoding(encoding);

    }

    }

    // 다음 필터 수행하기. 다음에 수행할 필터가 있으면 필터를 수행하고

    // 더이상 수행할 필터가 없으면 사용자가 요청한 페이지로 이동한다.

    chain.doFilter(request, response);

    }

    //최초로 필터가 요청될때 딱 한번만 호출되는 메소드

    // doFilter 메소드가 수행되기 위한 준비작업, 초기화 작업

    @Override

    public void init(FilterConfig config) throws ServletException {

    // TODO Auto-generated method stub

    System.out.println("init메소드 호출");

    //web.xml에 설정된 초기화 파라미터값(설정할 인코딩 방식) 얻어오기.

    encoding=config.getInitParameter("encoding");

    }

    }



    insert.jsp

    <%@ page language="java" contentType="text/html; charset=EUC-KR"

        pageEncoding="EUC-KR"%>

    <!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=EUC-KR">

    <title>Insert title here</title>

    </head>

    <body>

    <form action="insertOk.jsp" method="post">

    이름<input type="text" name="name"/><br/>

    전화번호<input type="text" name="phone"/><br/>

    주소<input type="text" name="address"/><br/>

    <input type="submit" value="전송"/>

    </form>

    </body>

    </html>



    insertOk.jsp

    <%@ page language="java" contentType="text/html; charset=EUC-KR"

        pageEncoding="EUC-KR"%>

    <!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=EUC-KR">

    <title>Insert title here</title>

    <%

    String name=request.getParameter("name");

    String phone=request.getParameter("phone");

    String address=request.getParameter("address");

    %>

    </head>

    <body>

    <%=name %><br/>

    <%=phone %><br/>

    <%=address %><br/>

    <hr/>

    ${ param.name }<br/>

    ${ param.phone }<br/>

    ${ param.address }<br/>

    </body>

    </html>







    EX2> 로그아웃이 된 상태이면 회원질문게시판, 마이페이지로 이동하면 자동으로 로그인페이지로 이동하게 하는 예제

    - 로그인 필터.( member밑에 모든 페이지를 호출할때마다 필터 적용 )

    - 어노테이션 사용.





    web.xml에 filter설정없이 어노테이션 사용. ( LoginFilter.java파일에)


     LoginFilter.java

    package test.filter;


    import java.io.IOException;


    import javax.servlet.Filter;

    import javax.servlet.FilterChain;

    import javax.servlet.FilterConfig;

    import javax.servlet.ServletException;

    import javax.servlet.ServletRequest;

    import javax.servlet.ServletResponse;

    import javax.servlet.annotation.WebFilter;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    import javax.servlet.http.HttpSession;


    @WebFilter("/member/*")

    public class LoginFilter implements Filter {


    @Override

    public void destroy() {

    }


    @Override

    public void doFilter(ServletRequest req, ServletResponse resp,

    FilterChain chain) throws IOException, ServletException {

    //자식인 HttpServletRequest에 세션을 얻어오는 메소드가 있으므로 

    // 자식으로 형변환 하기.

    HttpServletRequest request = (HttpServletRequest)req;

    //세션객체 얻어오기

    HttpSession session = request.getSession();

    boolean login=false; // 로그인 되었는지에 대한 상태

    if(session!=null){

    //세션에서 id꺼내오기(로그인한 사용자는 세션에 id가 저장되어 있음)

    String id=(String)session.getAttribute("id");

    if(id!=null){//로그인한 사용자 라면

    login=true; // 로그인 상태를 true로 설정

    }

    }

    if(login){//로그인한 경우

    chain.doFilter(req, resp);

    }else{//로그인안한 경우

    HttpServletResponse response = (HttpServletResponse)resp;

    response.sendRedirect(request.getContextPath() + "/login/login.jsp");

    }

    }


    @Override

    public void init(FilterConfig config) throws ServletException {

    }

    }


    main.jsp

    <%@ page language="java" contentType="text/html; charset=EUC-KR"

        pageEncoding="EUC-KR"%>

    <!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=EUC-KR">

    <title>Insert title here</title>

    </head>

    <body>

    <a href="login/login.jsp">로그인하기</a><br/>

    <a href="member/board.jsp">회원질문게시판</a><br/>

    <a href="member/mypage.jsp">마이페이지</a><br/>

    </body>

    </html>




    login/login.jsp

    <%@ page language="java" contentType="text/html; charset=EUC-KR"

        pageEncoding="EUC-KR"%>

    <%

    String cp=request.getContextPath();  

    %>

    <!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=EUC-KR">

    <title>Insert title here</title>

    <style type="text/css">

    #msg{

    font-size: 10pt;

    color:red;

    }

    </style>

    </head>

    <body>

    <form action="loginOk.jsp" method="post">

    아이디:<input type="text" name="id"/><br/>

    비밀번호:<input type="password" name="pwd"/><br/>

    <div id="msg">${ requestScope.errMsg }</div>

    <input type="submit" value="로그인"/>

    <input type="reset" value="취소"/>

    </form>

    </body>

    </html>


    login/loginOk.jsp

    ; id: song   pwd: 1234 와 비교

    <%@ page language="java" contentType="text/html; charset=EUC-KR"

        pageEncoding="EUC-KR"%>

    <!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=EUC-KR">

    <title>Insert title here</title>

    </head>

    <body>

    <%

    String id=request.getParameter("id");

    String pwd=request.getParameter("pwd");

    if(id.equals("song") && pwd.equals("1234")){

    session.setAttribute("id", id);

    response.sendRedirect("../member/board.jsp");

    }else{

    %>

    <script type="text/javascript">

    alert("아이디 또는 비밀번호가 틀려요!");

    history.go(-1);

    </script>

    <%

    }

    %>

    </body>

    </html>


    login/logout.jsp

    <%@ page language="java" contentType="text/html; charset=EUC-KR"

        pageEncoding="EUC-KR"%>

    <!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=EUC-KR">

    <title>Insert title here</title>

    </head>

    <body>

    <%

    session.invalidate();

    %>

    로그아웃되셨습니다.<br/>

    <a href="<%=request.getContextPath() %>/main.jsp">메인으로 이동</a>

    </body>

    </html>


    member/board.jsp

    <%@ page language="java" contentType="text/html; charset=EUC-KR"

        pageEncoding="EUC-KR"%>

    <!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=EUC-KR">

    <title>Insert title here</title>

    </head>

    <body>

    <div style="text-align:right;width:900px">

    [${ id }]님 반갑습니다.

    <a href="../login/logout.jsp">로그아웃</a>

    <a href="../main.jsp">메인으로</a>

    </div>

    <h2>질문게시판</h2>

    게시판 ~~

    </body>

    </html>


    member/mypage.jsp

    <%@ page language="java" contentType="text/html; charset=EUC-KR"

        pageEncoding="EUC-KR"%>

    <!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=EUC-KR">

    <title>Insert title here</title>

    </head>

    <body>

    <div style="text-align:right;width:900px">

    [${ id }]님 반갑습니다.

    <a href="logout.jsp">로그아웃</a>

    <a href="../main.jsp">메인으로</a>

    </div>

    <h2>마이페이지</h2>

    회원님.정보입니다.~~

    </body>

    </html>




    'WEB > JSP' 카테고리의 다른 글

    MVC패턴(모델2방식)  (0) 2013.05.04
    아파치, 이클립스 설치  (0) 2013.05.04
    25. error page  (0) 2013.04.23
    24. 템플릿 페이지  (0) 2013.04.23
    23. include  (0) 2013.04.23

    + Recent posts