728x90

--JSP로 CRUD 구현 (board)

 

 

JNDI기술(Java Naming and Directory Interface)

DBCP방식

 

Board board = new Board(); //하나의 로우를 하나의 보드객체로 매핑

board.setSeq(rs.getInt("seq"));

board.setTitle(rs.getString("title"));

board.setWriter(rs.getString("writer"));

board.setContents(rs.getString("contents"));

board.setRegdate(rs.getString("regdate"));

board.setHitcount(rs.getInt("hitcount"));

=>mybatis에서 한줄

 

※※Mybatis

sql의 질의 결과와 자바의 객체를 매핑하기

-SQL Mapping Framework : 자바클래스와 SQL 구문의 매핑

-Object Relational Mapping(ORM) : 처음부터 도메인 객체와 DB 매핑, sql 불필요, 완벽한 설계가 되어있어야 함 ex>JPA, Hibernate(난이도 최상)

 

파이널 끝나고 Spring boot할 때 JPA도 같이 하자!

 

SPRING을 이용하면 DAO없이도 사용가능함

 

*SPRING배우는 3단계

  1. SDS를 사용하지 않고

  2. SDS를 사용하여

  3. Spring boot 와 msa를 사용해서

 

BoardCommand :

BoardDTO

BoardVO -> db에서 가져온 것을 객체로서 매핑하기 위한 객체

 

--Framework vs Library

라이브러리는 지침서가 없음. 사용자에 따라 다 다르게도 사용. 필요한 기능을 빼서 각자 사용. 가이드라인이 없음

프레임워크는 골격과 뼈대, 틀이 있음. 아파트가 가지고 있는 골격은 유지, 필요한 것들을 선택할 수 있게 만듦, spring mvc형태대로 골격을 무시해서는 안됨. (골격&가이드가 존재)

 

이기종간의 데이터 주고받기 : 프레임워크의 기본형식 - XML

 

configuration 설정파일

 

DAO(마이바티스만 호출)  - MYBATIS - >질의 & 자바객체로 매핑

하나의 mapper file  <configuration><mappers>  : mybatis-config.xml(이것만 있으면 질의 및 자바객체로 매핑 : DAO가 이를 필요로함.  mybatis-config.xml을 알아야만 DAO에서 mybatis를 호출할 수 있음.

SQL Session Factory 객체 - mybatis-config.xml기본바탕

 

**mybatis 활용하기!

  1. mybatis-config.xml 잘 작성하기

  2. mappers안에 잘 정리하기(mapping XML)

  3. dao에서 mybatis를 잘 호출해주기

 

하나의 로우기준 resultType = "Author"

LIST로 자동으로 리턴해줌

유즈빈 ( 전제조건 : 폼의 input name, 자바객체의 변수이름이 일치해야 한다.)

Mapping XML : 전제조건(객체의 멤버변수이름과 SQL질의문에 있는 컬럼의 이름명이 일치하면 가능함)

*이름이 다를시 : 1. AS 별칭방법 사용, 2. result map사용 : 설정된 내용으로 매핑이 되도록

프레임워크 - 반자동화 툴(알아서 해줌) : MYBATIS, SPRING

 

sqlSessionFactory

SqlSession의 CRUD메소드

-selectOne()

-selectList()

-insert()

-update()

-delete()

jQuery, MyBatis : 투자 대비 효율이 아주 좋음

Andorid, Angula : 투자 대비 효율이 안 좋음, 기존 버전과 호환이 안좋음

 

 

자바앱에서 데이터를 넣으면 자동COMMIT이 되는데

DB - SQL developer에서 commit안하면 데이터 불러와지지 않음

 

 

 

STEP 1. JSP로 CRUD구현(boardDAO)

  • board 테이블 생성

  • board.java 직렬화

public class Board implements Serializable

  • board.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="kosta.mapper.BoardMapper">

<cache />

<insert id="insertBoard" parameterType="Board">

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

</insert>

<select id="listBoard" parameterType="java.util.Map" resultType="Board" >

select * from board

<if test="area != null">

<where>

<!-- where (title LIKE %aa% OR writer LIKE %aa% 조건이3개 이므로 여러개일때-->

<foreach collection="area" item = "item" separator="OR" open ="(" close=")" >

${item} LIKE #{searchKey}

</foreach>

</where>

</if>

order by seq desc

</select>

<select id = "detailBoard"  parameterType="int" resultType="Board">

select * from board where seq= #{seq}

</select>

<update id = "updateBoard" parameterType="Board">

update board set title=#{title},writer=#{writer},contents=#{contents} where seq=#{seq}

</update>

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

delete from board where seq = #{seq}

</delete>

</mapper>

  • mabatis-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="kosta.bean.Board" alias = "Board"/>

<typeAlias type="kosta.bean.Search" alias = "Search"/>

</typeAliases>

<environments default="development">

<environment id="development">

<transactionManager type="JDBC"/>

<dataSource type="JNDI">

<property name="data_source" value="java:comp/env/jdbc/oracle"/>

</dataSource>

</environment>

</environments>

<mappers>

<mapper resource="kosta/mapper/Board.xml"/>

</mappers>

</configuration>

  • boardMapper.java

package kosta.mapper;

 

import java.util.List;

import java.util.Map;

 

import kosta.bean.Board;

import kosta.bean.Search;

 

public interface BoardMapper {

int insertBoard(Board board);

List<Board> listBoard(Map map); //추상클래스의 메소드 안의 변수는 없다.

int updateBoard(Board board);

int deleteBoard(int seq);

Board detailBoard(int seq);

}

  • BoardDAO

package kosta.bean;

 

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.util.ArrayList;

import java.util.List;

 

import javax.naming.Context;

import javax.naming.InitialContext;

import javax.sql.DataSource;

 

public class BoardDAO {

private static BoardDAO dao = new BoardDAO(); // static 변수 : 한번만 선언

 

public static BoardDAO getInstance() { // 이 메소드만 호출하면 dao객체 가져옴

return dao;

}

//data source = connection full객체

//JNDI를 이용하기 위한 객체

// DBCP방식(Connection방식을 미리 많이 만들어 놓음)으로 Connection객체 구하기

public static Connection getConnection() { //커넥션풀에서 객체하나 가져올 수 있음/싱글톤방식

DataSource ds = null;

try {

Context ctx = new InitialContext();

ds = (DataSource) ctx.lookup("java:comp/env/jdbc/oracle");

return ds.getConnection(); // data소스에 있는 getConnection, 메소드 getConnection이 아님

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

 

public Board detailBoard(int seq) {

Connection conn = null;

PreparedStatement pstmt = null;

ResultSet rs = null;

String sql = "select * from board where seq=?";

Board board = new Board();

 

try {

conn = getConnection();

pstmt = conn.prepareStatement(sql);

pstmt.setInt(1, seq);

rs = pstmt.executeQuery();

 

if (rs.next()) {

board.setSeq(rs.getInt("seq"));

board.setTitle(rs.getString("title"));

board.setWriter(rs.getString("writer"));

board.setContents(rs.getString("contents"));

board.setRegdate(rs.getString("regdate"));

board.setHitcount(rs.getInt("hitcount"));

}

 

} catch (Exception e) {

e.printStackTrace();

}

return board;

}

 

public List<Board> listBoard() {

Connection conn = null;

PreparedStatement pstmt = null;

ResultSet rs = null; //실제 데이터값들 = 결과값

List<Board> list = null;

 

String sql = "select * from board order by seq desc";

 

try {

conn = getConnection();

pstmt = conn.prepareStatement(sql);

rs = pstmt.executeQuery();// 질의된 결과를 rs에 담음

list = new ArrayList<Board>();

// row 하나 -> if

// row 여러개 -> while

 

while (rs.next()) { // 데이터 로우들을 보드객체에 하나하나씩 담아서 배열 출력

Board board = new Board(); //하나의 로우를 하나의 보드객체로 매핑

board.setSeq(rs.getInt("seq"));

board.setTitle(rs.getString("title"));

board.setWriter(rs.getString("writer"));

board.setContents(rs.getString("contents"));

board.setRegdate(rs.getString("regdate"));

board.setHitcount(rs.getInt("hitcount"));

 

list.add(board);

}

 

} catch (Exception e) {

e.printStackTrace();

}

return list;

}

 

public int insert(Board board) {

Connection conn = null;

PreparedStatement pstmt = null;

String sql = "insert into board values(board_seq.nextval,?,?,?,sysdate,0)";

int re = -1;

 

String url = "jdbc:oracle:thin:@localhost:1521:XE";

String user = "kosta202";

String password = "1234";

 

try {//개별 connection을 이용하겠다

// 1단계 : JDBC 드라이버 로딩

Class.forName("oracle.jdbc.driver.OracleDriver");

 

// 2단계 : Connection객체 생성(DB서버와 웹서버를 연결)

conn = DriverManager.getConnection(url, user, password);

 

// 3단계 : PreparedStatement객체 생성(데이터 주고받기)

pstmt = conn.prepareStatement(sql);

pstmt.setString(1, board.getTitle()); //?값 초기화

pstmt.setString(2, board.getWriter());

pstmt.setString(3, board.getContents());

 

re = pstmt.executeUpdate(); // 업데이트 한만큼 넘겨줌 (하나 업뎃하면 1 return)

 

} catch (Exception e) {

e.printStackTrace();

}

 

return re;

}

 

public int update(Board board) {

int re = -1;

Connection conn = null;

PreparedStatement pstmt = null;

String sql = "update board set title=?,writer=?,contents=? where seq=?";

try {

conn = getConnection();

pstmt = conn.prepareStatement(sql);

 

pstmt.setString(1, board.getTitle());

pstmt.setString(2, board.getWriter());

pstmt.setString(3, board.getContents());

pstmt.setInt(4, board.getSeq());

re=pstmt.executeUpdate();

 

} catch (Exception e) {

e.printStackTrace();

}

return re;

}

 

  public int deleteBoard(int seq) {

      Connection conn=null;

      PreparedStatement pstmt = null;

      int re = -1;

      String sql="delete from board where seq=?";

 

      try {

        conn=getConnection();

        pstmt=conn.prepareStatement(sql);

     

       

        pstmt.setInt(1,seq);

        re=pstmt.executeUpdate();

       

       

      } catch (Exception e) {

        e.printStackTrace();

      }

      return re;

  }

 

 

// public Board getRecordById(int seq){ 

//     Board board=null; 

//     try{ 

//         Connection conn=getConnection(); 

//         PreparedStatement pstmt=conn.prepareStatement("select * from register where id=?"); 

//         pstmt.setInt(1,seq); 

//         ResultSet rs=pstmt.executeQuery();

//        

//         while(rs.next()){ 

//             board=new Board(); 

//             board.setSeq(rs.getInt("seq"));

//             board.setTitle(rs.getString("title")); 

//             board.setContents(rs.getString("contents")); 

//             board.setWriter(rs.getString("writer"));   

//             board.setRegdate(rs.getString("regdate")); 

//         } 

//     }catch(Exception e){e.printStackTrace();} 

//     return board; 

// } 

}

  • 각각의 테이블

 

 

 

STEP2. MYBATIS로 CRUD구현(boardDAO2)

  • board 테이블 생성

  • board.java 직렬화

  • board.xml

  • mabatis-config.xml

  • boardMapper.java

  • BoardDAO2

package kosta.bean;

import java.io.InputStream;

import java.util.List;

import java.util.Map;

 

import javax.websocket.Session;

 

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 kosta.mapper.BoardMapper;

 

public class BoardDAO2 {

 

      private static BoardDAO2 dao = new BoardDAO2();

     

      public static BoardDAO2 getInstance() {

        return dao;

      }

 

      public SqlSessionFactory getSqlSessionFactory() {

        String resource = "mybatis-config.xml";

        InputStream in = null;

       

        try {

            in = Resources.getResourceAsStream(resource);

        } catch (Exception e) {

            e.printStackTrace();

        }

        return new SqlSessionFactoryBuilder().build(in);

      }

     

     

     

     

      public List<Board> listBoard(Map map) {

        SqlSession sqlSession = getSqlSessionFactory().openSession();

        List<Board> list = null;

       

        try {

            list = sqlSession.getMapper(BoardMapper.class).listBoard(map);

            //list=sqlSession.selectList("kosta.mapper.BoardMapper.listBoard");

     

        } catch (Exception e) {

            e.printStackTrace();

        }finally {

            if(sqlSession!=null) {

              sqlSession.close();

            }

        }

        return list;

      }

     

      public Board detailBoard(int seq){

        SqlSession sqlSession = getSqlSessionFactory().openSession();

        Board board = new Board();

        try {

              board = sqlSession.selectOne("kosta.mapper.BoardMapper.detailBoard", seq);

        } catch (Exception e) {

            e.printStackTrace();

        }finally {

            if(sqlSession!=null) {

              sqlSession.close();

            }

        }

        return board;

      }

     

      public int insertBoard(Board board) {

        int re=-1;

        SqlSession sqlSession = getSqlSessionFactory().openSession();

        try {

            re = sqlSession.getMapper(BoardMapper.class).insertBoard(board);

            if(re>0) {

              sqlSession.commit(); 

            }else {

              sqlSession.rollback();

            }

        } catch (Exception e) {

            e.printStackTrace();

        }finally {

            if(sqlSession!=null) {

              sqlSession.close();

            }

        }

        return re;

      }

     

     

      public int updateBoard(Board board) {

        int re=-1;

        SqlSession sqlSession = getSqlSessionFactory().openSession();

        try {

            re = sqlSession.getMapper(BoardMapper.class).updateBoard(board);

            if(re>0) {

              sqlSession.commit(); 

            }else {

              sqlSession.rollback();

            }

        } catch (Exception e) {

            e.printStackTrace();

        }finally {

            if(sqlSession!=null) {

              sqlSession.close();

            }

        }

        return re;

       

      }

     

      public int deleteBoard(int seq) {

        int re=-1;

        SqlSession sqlSession = getSqlSessionFactory().openSession();

 

          //board = sqlSession.getMapper(BoardMapper.class).detailBoard(seq);

            //board = sqlSession.selectOne("kosta.mapper.BoardMapper.detailBoard", seq);

       

        try {

            re = sqlSession.getMapper(BoardMapper.class).deleteBoard(seq);

            if(re>0) {

              sqlSession.commit(); 

            }else {

              sqlSession.rollback();

            }

        } catch (Exception e) {

            e.printStackTrace();

        }finally {

            if(sqlSession!=null) {

              sqlSession.close();

            }

        }

        return re;

       

      }

     

 

     

     

}

 

 

  • 각각의 테이블

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90

+ Recent posts