본문 바로가기
[ View ]/JSP

[ JSP ] Mybatis 개념 및 설정

by 환이s 2023. 3. 16.
728x90

오늘은 SQL을 좀 더 쉽게 접근하게 해 주고 코드도 간결하게 만들어주는 Mybatis에 대해서 포스팅해 보겠습니다.

 

 

■  Mybatis란?

 

Mybatis는 개발자가 지정한 SQL, 저장 프로시저를 지원하는 프레임워크(Java Persistence Framework)입니다.

 

이전 포스팅에서 SQL과 JAVA를 연동해서 데이터를 받아오는 방식을 알아봤는데, Mybatis는 이러한 작업을 좀 더 쉽게 접근하게 해 주고 코드 또한 간결하게 만들어줍니다.

 

이미 데이터를 받아오는 방법을 배웠기 때문에 이걸 왜 알아야 하나? 하시는 분들을 위해서 간단하게 비교를 해보자면

 

Java Persistence Framework와는 달리 ORM(Object-relational mapping)은 데이터베이스와 객체 지향 프로그래밍 언어 간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법입니다.

 

 

객체 관계 매핑이라고도 얘기하며, 객체와 RDB를 별개로 설계하고 ORM이 중간에서 매핑해 주는 역할을 해줍니다. 즉, ORM은 SQL문이 아닌 RDB에 데이터 그 자체와 매핑하기 때문에 SQL을 직접 작성할 필요가 없습니다.

 

해당 객체와의 매핑에 필요한 SQL문을 알아서 만들어줍니다. 

 

Mybatis는 다음과 같은 특징이 있습니다.

 

  • 코딩량 절감
  • 간편한 유지보수(SQL을 변경하고자 할 경우 기존처럼 프로그램을 수정하는 것이 아니라 XML 파일의 SQL문만을 변경하기 되기 때문에 SQL 변환이 자유롭다.)

 


 

■  Mybatis 설치

 

 Mybatis 설치는 http://mybatis.org 접속해서 Products -> myBatis 압축파일을 다운로드 받으시면 됩니다.

 

 

설치가 완료되면 압축을 풀고 이전 포스팅 JSTL에서 진행했던 방식 그대로 lib 폴더에 복사하시면 됩니다.

 


■  Mybatis 설정

위 사진까지 진행이 완료되셨다면 Mybatis를 활용하기 위해 먼저 실행 파일을 만들어야 합니다.

mapper 파일, mybatis framework를 실행할 수 있는 세션을 생성하는 파일, mybatis 기본 설정하는 xml 파일입니다.

 

정리하자면 

 

  • MybatisManager.java : mybatis framework을 실행할 수 있는 세션 생성
  • sqlMapConfig.xml : mybatis 기본설정 파일
  • mapper 파일 : 실제 sql query 문장 설정

 

그럼 하나씩 알아봅시다.

 


1 ) sqlMapConfig.xml

 

sqlMapConfig.xml은 mybatis 기본 설정 파일 역할을 하는데, 예를 들면 이전 포스팅에서 web.xml에서 서블릿 설정을 했을 때와 비슷합니다. 즉, 데이터베이스의 접속 주소 정보나 Mapping 파일의 경로 등의 고정된 환경 정보를 설정하는 페이지입니다.

 

<? 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>

 

</typeAliases>

<!-- db연결 참조코드(context.xml과 연결됨, dbcp의 리소스이름인 oraDB가 중요) -->

<environments default="">

<environment id="">

<transactionManager type="JDBC" />

<dataSource type="JNDI">

<property name="data_source"

value="java:comp/env/oraDB" />

</dataSource>

</environment>

</environments>

<!-- 실제 sql query -->

<mappers>

<mapper resource="/memo/mapper/memo.xml" />

<mapper resource="/guestbook/mapper/guestbook.xml"/>

</mappers>

</configuration>


2 ) MybatisManager.java

 

MybatisManager.java는 mybatis framework을 실행할 수 있는 세션을 생성하는 페이지입니다. 

 

 MybatisManager.java 페이지는 Mybatis의 컴포넌트를 사용하는데, 먼저 역할을 알아봅시다.

 

<Mybatis 컴포넌트>

컴포넌트 역 할
SqlSessionFactoryBuilder MyBatis 설정 파일을 바탕으로 SqlSessionFactory를 생성합니다.
SqlSessionFactory SqlSession을 생성합니다.
SqlSession 핵심적인 역할을 하는 클래스로서 SQL, 트랜잭션 관리를 실행합니다.

 

그럼 페이지를 참고해 봅시다.

 

package sqlmap;

import java.io.Reader;

import org.apache.ibatis.io.Resources;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MybatisManager {

// SqlSessionFactoryBuilder => SqlSessionFactory => SqlSession

//SqlSession 객체 생성기

private static SqlSessionFactory instance;

/*

* 생성자는 보통 public인데 private처리했다. 따라서 외부에서 접근이 안된다. new 해서 접근 안되기

* 때문에 getInstance() 우회 접근한다.

* 웹은 사용자들이 많기 때문에 접속할 때마다 MybatisManager m=new MybatisManager();을

* 실행하면 메모리가 늘어나기 때문에 다수의 인스턴스 생성을 막고 하나의 인스턴스만 생성시켜

* 처리한다. 즉, 싱글톤패턴기법

* */

private MybatisManager() {

 

}

public static SqlSessionFactory getInstance() {

Reader reader = null;//Reader는 InputStreamReader의 상위객체

try {

//getResourceAsReader는 xml 파일을 읽어 들이는 메서드

reader = Resources.getResourceAsReader("sqlmap/sqlMapConfig.xml");

instance = new SqlSessionFactoryBuilder().build(reader);

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

if (reader != null) reader.close();

} catch (Exception e) {

e.printStackTrace();

}

}

return instance;

}

}


3 ) mapper 파일

 

mapper 파일은 SQL문과 OR Mapping을 설정하는 XML 파일입니다. 즉, SQL 문을 작성하는 파일이라고 알아두시면 좋을 거 같습니다.

 

따라서 select, insert, update, delete문을 작성하는 파일입니다.

 

<?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="memo">

<!-- select에서 resultType="" 반드시 필요하다. -->

<select id="listAll" resultType="memo.dto.MemoDTO">

select idx,writer,memo,to_char(post_date, 'yyyy-mm-dd hh24:mi:ss') post_date

from memo

where writer like '%'||#{search}||'%' or memo like '%'||#{search}||'%'

order by idx desc

</select>

 

<select id="list" resultType="memo.dto.MemoDTO">

select idx,writer,memo,to_char(post_date, 'yyyy-mm-dd hh24:mi:ss') post_date

from memo

where ${searchkey} like '%'||#{search}||'%'

order by idx desc

</select>

<!-- parameterType="type" 은 생략 가능하다 -->

<select id="view" parameterType="int" resultType="memo.dto.MemoDTO">

select * from memo where idx=#{idx}

</select>

 

<!-- parameterType=""은 생략 가능하다. -->

<!-- #{변수}: 따옴표 포함 ex) #{writer}=> writer='kim', ${변수} : 따옴표 미포함 -->

<insert id="insert" parameterType="memo.dto.MemoDTO">

insert into memo(idx, writer, memo)

values ((select nvl(max(idx)+1,1)from memo), #{writer}, #{memo})

</insert>

 

<update id="update" parameterType="memo.dto.MemoDTO">

update memo set writer=#{writer}, memo=#{memo}

where idx=#{idx}

</update>

 

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

delete from memo

where idx=#{idx}

</delete>

 

</mapper>

 


마치며

 

오늘은 Mybatis의 개념 및 설정 방법에 대해서 알아봤습니다.

다음 포스팅으로는 Mybatis 응용해서 한 줄 메모장 만들기 포스팅으로 찾아뵙겠습니다.

 

 

 

 

 

728x90

'[ View ] > JSP' 카테고리의 다른 글

[ JSP ] Mybatis 응용 예제(방명록)  (0) 2023.03.19
[ JSP ] Mybatis 응용 예제(한 줄 메모장)  (0) 2023.03.17
[ JSP ] JSTL(Jsp Standard Tag Library)  (2) 2023.03.15
[ JSP ] EL(Expression Language)  (0) 2023.03.14
[ JSP ] Cookie  (0) 2023.03.11