[JSP/Mybatis] 방명록 만들기(1)

heubanufi·2024년 4월 2일

JSP/Servlet

목록 보기
2/4

MyBatis(마이바티스) 이용한 데이타베이스 연동 프로그램 작성 순서

  1. JDBC 라이브러리 등록(사용할 DB)
    -WebContent > WEB-INF > lib > ojdbc6.jar 또는 ojdbc8.jar

  2. MyBatis 라이브러리 등록(사용할 버전)
    -WebContent > WEB-INF > lib > mybatis-3.5.5.jar

  3. MyBatis 환경설정(config) XML 파일 작성
    -DB연결정보, 매핑파일 위치정보, MyBatis 설정정보 등

  4. MyBatis 매핑 XML 파일 작성(매퍼: Mapper)
    -프로그램상에서 사용하는 SQL 문장 작성

  5. MyBatis 설정 정보(config)를 읽어서 사용할
    SqlSessionFactory 객체 생성하는 소스 작성

    • 실제 사용은 SqlSession 객체를 사용
    • SqlSession 객체를 생성해주는 역할은 SqlSessionFactory 가 한다.
  6. Mapper에 등록된 SQL문을 호출해서 사용
    5-1. Mapper 파일에 사용할 SQL문 작성
    5-2. Mapper에 등록한 SQL 문을 호출 사용
    - SqlSession 객체 생성
    - SqlSession 객체에 있는 메소드 호출
    (selectOne, selectList, insert, update, delete ..)
    - SQL문 실행 결과에 대한 처리


폴더 구조

src

com.mystudy.mybatis

DBService.java
GuestbookVO.java
config.xml
mapper.xml

sql > guestbook.txt

WebContent

css > guestbook.css

guestbook

list.jsp
onelist.jsp
write.jsp
write_ok.jsp
update.jsp
update_ok.jsp
delete.jsp
delete_ok.jsp

WEB-INF

jstl-1.2.jar
mybatis-3.5.15.jar
ojdbc6.jar


config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<typeAliases>
		<typeAlias type="com.mystudy.mybatis.GuestbookVO" alias="guestBookVO"/>
	</typeAliases>

  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
        <property name="url" value="jdbc:oracle:thin:@localhost:0000:xe"/>
        <property name="username" value="mystudy"/>
        <property name="password" value="pw"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
   	<mapper resource="com/mystudy/mybatis/mapper.xml"/>
  </mappers>
</configuration>

mapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="guestbook">
<!-- selecg 태그 3개 속성 id, parameterType, resultType
id: 사용할 명칭(필수항목), 현재 매퍼에서 유일한 이름 사용
resultType: 조회 결과값 저장하기 위한 데이터 타입(1개 데이터에 대한 타입지정)
parameterType: 전달 받은 파라미터 데이터의 타입 지정(선택적)
 -->
  <select id="all" resultType="com.mystudy.mybatis.GuestbookVO">
   	SELECT IDX, NAME, SUBJECT, CONTENT, EMAIL, PWD, REGDATE
   	FROM GUESTBOOK
   	ORDER BY IDX DESC
  </select>
  
  <select id="one" parameterType="int" resultType="guestbookVO">
   	SELECT IDX, NAME, SUBJECT, CONTENT, EMAIL, PWD, REGDATE
   	FROM GUESTBOOK
   	WHERE IDX = #{idx}
   
   </select>
  
  <!-- TYPE 별칭 사용 -->
  <insert id="insert" parameterType="guestbookVO">
  	INSERT INTO GUESTBOOK (IDX, NAME, SUBJECT, CONTENT, EMAIL, PWD, REGDATE)
  	VALUES(GUESTBOOK_SEQ.NEXTVAL, #{name}, #{subject}, #{content}, #{email}, #{pwd}, SYSDATE)
  </insert>
  
  <!-- 수정처리용 SQL -->
  <update id="update" parameterType="guestbookVO">
  	UPDATE GUESTBOOK
  	SET SUBJECT = #{subject}, CONTENT=#{content}, EMAIL = #{email}
  	WHERE IDX = #{idx}
  </update>
  
  <!-- 삭제처리용SQL -->
  <delete id="delete" parameterType="guestbookVO">
  	DELETE FROM GUESTBOOK
  	WHERE IDX = #{idx}
  </delete>
  
</mapper>

DBService.java

package com.mystudy.mybatis;

import java.io.IOException;
import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

//MyBatis 사용해서 작업할 sqlSession을 만들어줄 SqlSessionFactory 객체를 생성하기 위한 클래스
public class DBService {
	private static SqlSessionFactory factory;
	
	//static 초기화 구문
	static {
		try {
//			SqlSessionFactoryBuilder factoryBuilder = new SqlSessionFactoryBuilder();
//			Reader reader = Resources.getResourceAsReader("com/mystudy/mybatis/config.xml");
//			factory = factoryBuilder.build(reader);
			
			factory = new SqlSessionFactoryBuilder()
					.build(Resources.getResourceAsReader("com/mystudy/mybatis/config.xml"));
		} catch (IOException e) {
			e.printStackTrace();
		}

	}
	
	public static SqlSessionFactory getFactory() {
		return factory;
	}
	
	
}

GuestbookVO.java

package com.mystudy.mybatis;

import java.sql.Date;

public class GuestbookVO {
	private int idx;
	private String name;
	private String subject; 
	private String content;
	private String email; 
	private String pwd; 
	private Date regdate;
	public int getIdx() {
		return idx;
	}
	public void setIdx(int idx) {
		this.idx = idx;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSubject() {
		return subject;
	}
	public void setSubject(String subject) {
		this.subject = subject;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public Date getRegdate() {
		return regdate;
	}
	public void setRegdate(Date regdate) {
		this.regdate = regdate;
	}
	@Override
	public String toString() {
		return "GuestbookVO [idx=" + idx + ", name=" + name + ", subject=" + subject + ", content=" + content
				+ ", email=" + email + ", pwd=" + pwd + ", regdate=" + regdate + "]";
	}
	
	
}

SQL guestbook

CREATE TABLE GUESTBOOK(
    IDX NUMBER(5) PRIMARY KEY,
    NAME VARCHAR2(30),
    SUBJECT VARCHAR2(150),
    CONTENT VARCHAR2(4000),
    EMAIL VARCHAR2(100),
    PWD VARCHAR2(30),
    REGDATE DATE DEFAULT SYSDATE
);

CREATE SEQUENCE GUESTBOOK_SEQ NOCACHE;

INSERT INTO GUESTBOOK
    (IDX, NAME, SUBJECT, CONTENT, EMAIL, PWD, REGDATE)
VALUES(GUESTBOOK_SEQ.NEXTVAL, '홍일동', '제목1', '내용1', 'hong1@test.com', '1111', SYSDATE);

INSERT INTO GUESTBOOK
    (IDX, NAME, SUBJECT, CONTENT, EMAIL, PWD, REGDATE)
VALUES(GUESTBOOK_SEQ.NEXTVAL, '홍이동', '제목2', '내용2', 'hong2@test.com', '2222', SYSDATE);
INSERT INTO GUESTBOOK
    (IDX, NAME, SUBJECT, CONTENT, EMAIL, PWD, REGDATE)
VALUES(GUESTBOOK_SEQ.NEXTVAL, '홍삼동', '제목3', '내용3', 'hong3@test.com', '3333', SYSDATE);
COMMIT;

SELECT * FROM GUESTBOOK;

0개의 댓글