JDBC 라이브러리 등록(사용할 DB)
-WebContent > WEB-INF > lib > ojdbc6.jar 또는 ojdbc8.jar
MyBatis 라이브러리 등록(사용할 버전)
-WebContent > WEB-INF > lib > mybatis-3.5.5.jar
MyBatis 환경설정(config) XML 파일 작성
-DB연결정보, 매핑파일 위치정보, MyBatis 설정정보 등
MyBatis 매핑 XML 파일 작성(매퍼: Mapper)
-프로그램상에서 사용하는 SQL 문장 작성
MyBatis 설정 정보(config)를 읽어서 사용할
SqlSessionFactory 객체 생성하는 소스 작성
Mapper에 등록된 SQL문을 호출해서 사용
5-1. Mapper 파일에 사용할 SQL문 작성
5-2. Mapper에 등록한 SQL 문을 호출 사용
- SqlSession 객체 생성
- SqlSession 객체에 있는 메소드 호출
(selectOne, selectList, insert, update, delete ..)
- SQL문 실행 결과에 대한 처리
DBService.java
GuestbookVO.java
config.xml
mapper.xml
list.jsp
onelist.jsp
write.jsp
write_ok.jsp
update.jsp
update_ok.jsp
delete.jsp
delete_ok.jsp
jstl-1.2.jar
mybatis-3.5.15.jar
ojdbc6.jar
<?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>
<?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>
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;
}
}
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 + "]";
}
}
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;