Mybatis란?
Mybatis는 자바 오브젝트와 SQL사이의 자동 매핑 기능을 지원하는 ORM(Object relational Mapping)프레임워크이다.
※ 사용이유
1) DB연동을 담당하는 JAVA 코드를 1~2줄로 줄일수있음 [가독성]
2) SQL 문은 JAVA 코드에서 분리하여 XML 파일로 별도 관리 가능 [응집도 ↑]
※ 동작방법
1) XML 파일에 저장된 SQL 문을 실행
2) 실행의 결과를 VO(JAVA객체)에 자동으로 매핑까지 수행함
1. 플러그인 설치
이클립스 상단의 Help -> Eclipse Marketplace-> mybatis 검색 후 검은새가 보이는 하기 2가지 플러그인을 설치 한다.
설치할 때는 전부 동의를 누르면 이클립스가 재실행된다.
2. pom.xml에 라이브러리 파일 설정
pom.xml 설정에 하기 Mybatis 관련 라이브러리 추가를 해준다.
<!--Mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.ibatis</groupId>
<artifactId>ibatis-core</artifactId>
<version>3.0</version>
</dependency>
pom.xml에 저장 후 Maven Dependencies에 mybatis, ibatis jar 2개가 추가되었으면 성공!
3. DB 연동에 필요한 SQL 문을 XML 파일에 저장
src/main/resources 하위에 mappings라는 패키지를 생성 후
해당 패키지 안에 SQL문들을 저장한 파일을 넣어주는데
파일 이름은 보통 "테이블 명"-mapping.xml 가준으로 만들어 준다.
xml 파일 생성 시 -> new -> mybatis
플러그인을 설치하였지만 xml 파일 생성 시 mybatis가 뜨지 않아 상단에 스키마 설정을 해두니 연결이 되었다.
'namespace'
-> 클래스의 패키지와 유사한 용도로 MyBtis 내에서 원하는 SQL문을 찾아서 실행할 때 동작한다.
'resultType'
-> select류에 사용, 쿼리문 수행 후 메서드 반환타입이 String이나 객체를 반환할 수 있도록 지정하는 속성으로
어떤 타입으로 반환할것이라는 반환 유형을 정해준다. 해당 value값은 sql-map-config.xml 과 연관됨
'resultMap'
-> xml내에서 직접 타입을 지정해줄 수 있다.
property에는 db에서 뽑은 값을 사용하고 싶을때 사용되는 이름 선언, column에는 실제 db컬럼명을 매핑한다.
'CDATA'
-> XML파서가 '<', '>' 가 사용되면 태그로 인식해버려서 제대로 출력이 되지 않기때문에 이를 막기 위해서는 CDATA를 사용한다.
참조 블로그 : https://parkjuwan.tistory.com/156
<?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="BoardDAO">
<resultMap type="board" id="boardResult">
<id property="bid" column="Bid"/>
<result property="title" column="TITLE"/>
<result property="writer" column="WRITER"/>
<result property="content" column="CONTENT"/>
</resultMap>
<insert id="insertBoard">
INSERT INTO BOARD(BID,TITLE,WRITER,CONTENT) VALUES((SELECT NVL(MAX(BID),0)+1 FROM BOARD),#{title},#{writer},#{content})
</insert>
<update id="updateBoard">
UPDATE BOARD SET TITLE=#{title}, WRITER=#{writer} WHERE BID=#{bid}
</update>
<delete id="deleteBoard">
<![CDATA[
DELETE BOARD WHERE BID=#{bid}
]]>
</delete>
<!--resultType : vo에 맴핑해달라는 내용-->
<select id="selectOneBoard" resultType="board">
SELECT * FROM BOARD WHERE BID=#{bid}
</select>
<select id="selectAllBoard" resultType="boardResult">
SELECT * FROM BOARD
WHERE TITLE LIKE '%'||#{searchContent}||'%'
ORDER BY BID DESC
</select>
</mapper>
4) sql-map-config.xml 작성
파일 경로는 src/main/resources 에 MyBatis Generator Configuration File 생성
파일 이름은 sql-map-config.xml
파일을 생성하면 내용이 자동으로 기입되어 있는데 삭제 후 하기 스키마로 변경해준다.
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
</configuration>
sql-map-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연동정보 파일과 연결 -->
<properties resource="db.properties" />
<!-- 별칭(Alias) 설정 -->
<typeAliases>
<typeAlias type="com.kim.biz.board.BoardVO" alias="board" />
</typeAliases>
<!-- DataSource 설정 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mappings/board-mapping.xml" />
</mappers>
</configuration>
5) DB연결
Spring 연동없이 사용하기위해서는 직접 DB연동정보를 작성해야한다.
Springg과 연동할 때는 DB연동정보가 applicationContext에 있기 때문에 별도 작성할 필요 없다.
src/main/resources에 db.properties 파일 생성
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:xe
jdbc.username=이름
jdbc.password=비밀번호
6. SqlSessionFactory
SqlSessionFactory는 데이터베이스와의 연결과 SQL의 실행에 대한 모든 것을 가진 가장 중요한 객체이다.
파일 생성 위치 및 파일 이름
package com.kim.biz.common;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class SqlSessionBean {
// Mybatis로 DAO 클래스의 CRUD 메서드를 사용하려면,
// Mybatis에서 제공하는 SqlSession 객체를 사용해야한다!
// -> Factory 패턴
private static SqlSessionFactory sessionFactory=null;
static {
try {
if(sessionFactory==null) {
// 이곳의 작업은 스트림을 사용합니다.
// 외부요인으로 인한 에러가 자주 발생하기때문에 예외처리했습니다.
// builder는 Mybatis 설정파일(sql-map-config.xml)을 로딩하면서
// SSF 객체를 생성함
// 설정파일 로딩을 위해 입력스트림(Reader)을 사용
Reader reader=Resources.getResourceAsReader("sql-map-config.xml");
sessionFactory=new SqlSessionFactoryBuilder().build(reader);
}
} catch(Exception e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSessionInstance() {
return sessionFactory.openSession();
}
}
7. DAO 파일
package com.kim.biz.board.impl;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.kim.biz.board.BoardVO;
import com.kim.biz.common.SqlSessionBean;
public class BoardDAO3 {
private SqlSession mybatis;
public BoardDAO3() {
mybatis=SqlSessionBean.getSqlSessionInstance();
}
public void insertBoard(BoardVO vo) {
mybatis.insert("BoardDAO.insertBoard",vo);
mybatis.commit();
}
public void updateBoard(BoardVO vo) {
mybatis.update("BoardDAO.updateBoard",vo);
mybatis.commit();
}
public void deleteBoard(BoardVO vo) {
mybatis.delete("BoardDAO.deleteBoard",vo);
mybatis.commit();
}
BoardVO selectOneBoard(BoardVO vo) {
return mybatis.selectOne("BoardDAO.selectOneBoard",vo);
}
public List<BoardVO> selectAllBoard(BoardVO vo) {
return mybatis.selectList("BoardDAO.selectAllBoard",vo);
}
}
'Spring' 카테고리의 다른 글
[Spring Boot] 설치 방법 및 초기 설정 (0) | 2022.10.25 |
---|---|
[Spring] Mybatis 프레임워크 Spring에 연동 (0) | 2022.10.06 |
[Spring] 다국어 처리 (0) | 2022.09.30 |
[Spring] 예외처리 (@, xml 활용 방식) (0) | 2022.09.28 |
[Spring] 이미지 파일 업로드 & 변경 (0) | 2022.09.28 |