[[ Dynamic query ]]

- 동적으로 조건이 변해야 하는 경우 Mybatis에서 사용 예제
- 두가지 : 
 (1) select 로 하나만 선택하는 경우
 (2) checkbox로 여러개 선택하는 경우



(1)  main.jsp

검색( select ) ,검색2 (checkbox)










<%@ 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="MemberCon?cmd=list1">검색</a><br/>
<a href="MemberCon?cmd=list2">검색2</a><br/>
</body>
</html>



(2) list1.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>
<div><!-- 조회된 목록이 보여질 div -->
    <table border="1" width="600">
        <tr>
            <th>아이디</th><th>비밀번호</th><th>이메일</th>
            <th>전화번호</th><th>가입일</th>
        </tr>
        <c:forEach var="vo" items="${list }">
            <tr>
                <td>${vo.id }</td>
                <td>${vo.pwd }</td>
                <td>${vo.email }</td>
                <td>${vo.phone }</td>
                <td>${vo.regdate }</td>
            </tr>
        </c:forEach>
    </table>
</div>
<div>
    <form method="post" action="MemberCon?cmd=list1">
        <select name="field">
            <option value="id">아이디</option>
            <option value="email">이메일</option>
            <option value="phone">전화번호</option>
        </select>
        <input type="text" name="keyword"/>
        <input type="submit" value="검색"/>
    </form>
</div>
</body>
</html>



(3) list2.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>
<div>
    <table border="1" width="600">
        <tr>
            <th>아이디</th><th>비밀번호</th><th>이메일</th>
            <th>전화번호</th><th>가입일</th>
        </tr>
        <c:forEach var="vo" items="${list }">
            <tr>
                <td>${vo.id }</td>
                <td>${vo.pwd }</td>
                <td>${vo.email }</td>
                <td>${vo.phone }</td>
                <td>${vo.regdate }</td>
            </tr>
        </c:forEach>
    </table>
</div>
<div>
    <form method="post" action="MemberCon?cmd=list2">
        <input type="checkbox" name="chkId" value="id" checked="checked">아이디
        <input type="checkbox" name="chkEmail" value="email" >이메일
        <input type="checkbox" name="chkPhone" value="phone" >전화번호
        <input type="text" name="keyword"/>
        <input type="submit" value="검색"/>
    </form>
</div>
</body>
</html>


---------------------------------------------------------------------------------











  : lib에 jar파일 복사
----------------------------------------------------------------------------------
















 : controller, Dao, vo, sqlsession생성, xml, log4j 기본파일
----------------------------------------------------------------------------------

(1) test.orm.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>
   
    <!--////   접속할 DB서버에 대한 정보 설정  ////-->
    <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="test/orm/BoardMapper.xml" />
    </mappers>
</configuration>




(2) test.orm.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">
    <!--
        where id like '%aa%'   
        where ${field} like '%'||#{keyword}||'%'
        ${}는 미리 컴파일 됨.컬럼명등은 ?로 쓸수 없으므로 ${}로 처리해야 함
     -->
    <select id="findList1" resultType="test.vo.MembersVo"
                                        parameterType="hashmap">
        select * from members
        <if test="field != null">
            where ${field} like '%'||#{keyword}||'%'
       </if>
    </select>
    <!--
        String ss =" select * from members ";
        if(id!=null){
            ss+="where id=keyword";
        }
        if(pwd!=null){
            ss+="or pwd=keyword";
        }
      이와 같이 경우
     -->
    <select id="findList2" parameterType="hashmap"
                           resultType="test.vo.MembersVo">
        select * from members
        <where>
            <!--
                where 다음에 if문에 해당하는 조건이 하나라도 있으면 select뒤에 where가 붙는다.
                or는 붙이며, 이전 항목이 없으면 자동으로 빼고 실행한다.
             -->
            <if test="id!=null">
                id=#{keyword}
           </if>
            <if test="email!=null">
               or email=#{keyword}
            </if>
            <if test="phone!=null">
               or phone=#{keyword}
            </if>
        </where>
    </select>
</mapper>




(3) test.orm.SqlSessionFactoryService
;
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멤버변수를 초기화할때는 static블록을 사용한다.(생성자x)
    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;
    }
}



(4) test.vo.MembersVo
; getter, setter

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;
    }
   
}



(5) test.dao.MembersDao
;

package test.dao;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import test.orm.SqlSessionFactoryService;
import test.vo.MembersVo;

public class MembersDao {
    private SqlSessionFactory sqlSessionFactory;
    public MembersDao(){
        sqlSessionFactory=SqlSessionFactoryService.getSqlSessionFactory();
    }
    public List<MembersVo> getList(Map<String,String> map){
        SqlSession sqlSession=null;
        try{
            sqlSession=sqlSessionFactory.openSession();
            return sqlSession.selectList("findList1",map);
        }finally{
            if(sqlSession!=null) sqlSession.close();
        }
    }
    public List<MembersVo> getList1(HashMap<String,String> map){
        SqlSession sqlSession = null;
        try{
            sqlSession=sqlSessionFactory.openSession();
            return sqlSession.selectList("findList2", map);
        }finally{
            if(sqlSession!=null) sqlSession.close();
        }
    }
}



(6) test.controller.MemberController

;

package test.controller;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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.MembersDao;
import test.vo.MembersVo;

@WebServlet("/MemberCon")
public class MemberController extends HttpServlet{
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        String cmd=req.getParameter("cmd");
        if(cmd.equals("list1")){
            list1(req,resp);
        }else if(cmd.equals("list2")){
            list2(req,resp);
        }
    }
    // 체크박스로 선택된 조건 ( 여러개 인 경우 )
    protected void list2(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // 전송된 체크박스의 value값들 얻어오기.
        // 체크가 안된것은 null이 들어온다.
        String id = req.getParameter("chkId");
        String email = req.getParameter("chkEmail");
        String phone = req.getParameter("chkPhone");
        String keyword=req.getParameter("keyword");
       
        //검색조건을 HashMap에 담기.
        HashMap<String,String> map=new HashMap<>();
        map.put("id", id);
        map.put("email", email);
        map.put("phone", phone);
        map.put("keyword", keyword);
       
        // dao를 통해서 조건에 해당하는 데이터 얻어오기.
        MembersDao dao = new MembersDao();
        List<MembersVo> list=dao.getList1(map);
       
        //결과값을 가지고 뷰페이지로 이동하기.
        req.setAttribute("list", list);
        req.getRequestDispatcher("/list2.jsp").forward(req, resp);
    }
    // 셀렉트로 선택한 조건 ( 하나 )
    protected void list1(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        //검색필드 얻어오기
        String field=req.getParameter("field");
        //검색어 얻어오기
        String keyword=req.getParameter("keyword");
        //검색조건을 HashMap에 담기
        Map<String,String> map=new HashMap<>();
        map.put("field",field);
        map.put("keyword",keyword);
       
        //DAO를 통해서 DB에서 조회하기
        MembersDao dao=new MembersDao();
        List<MembersVo> list=dao.getList(map);
       
        //결과값을 가지고 뷰페이지로 이동하기
        req.setAttribute("list",list);
        req.getRequestDispatcher("/list1.jsp").forward(req, resp);
    }
}



(7) log4j.properties
; 로그 확인용

# \uC804\uC5ED \uB85C\uAE45 \uC124\uC815
log4j.rootLogger=ERROR, stdout
# MyBatis \uB85C\uAE45 \uC124\uC815...
log4j.logger.org.apache.ibatis=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.logger.java.sql.ResultSet=TRACE
# Console \uCD9C\uB825...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n



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

log4j.properties  (0) 2013.05.04
3. MyBatis 사용 간한한 방명록 예제  (0) 2013.04.24
2. java 에서 mybatis 사용한 예제  (0) 2013.04.24
1. 라이브러리 다운 및 환경설정(xml)  (0) 2013.04.24



# 전역 로깅 설정

log4j.rootLogger=ERROR, stdout

# MyBatis 로깅 설정...

log4j.logger.org.apache.ibatis=DEBUG

log4j.logger.java.sql.Connection=DEBUG

log4j.logger.java.sql.Statement=DEBUG

log4j.logger.java.sql.PreparedStatement=DEBUG

log4j.logger.java.sql.ResultSet=TRACE

# Console 출력...

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n



---------------------------------------------------------------

DEBUG --> TRACE로 변경하면 

resultset결과까지 로그로 나타난다.

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

+ Recent posts