LECTURE/JDBC & Mybatis

Framework & My batis

heywoo 2023. 1. 26. 20:30

Framework

개발자가 소프트웨어를 개발함에 있어 코드를 구현하는 개발 시간을 줄이고, 코드의 재사용성을 증가 시키기 위해 일련의 클래스 묶음이나 뼈대, 틀을 제공하는 라이브러리를 구현해 놓은 것을 말한다.

  1. 개발자가 따라야 하는 가이드를 제공한다.
  2. 개발할 수 있는 범위가 정해져 있다.
  3. 개발자를 위한 다양한 도구, 플러그인을 지원한다.

장점

-개발 시간을 줄일 수 있다.

-정형화되어 있어 일정 수준 이상의 품질을 기대할 수 있다.

-유지 보수가 쉽다.

단점

-너무 의존하면 개발자들의 능력이 떨어져서 스스로 직접 개발하는 것이 어려워진다.

-습득에 걸리는 시간이 오래 걸린다.

 

종류

- 영속성 Framework

데이터가 계속해서 저장되기에 영속성

데이터의 저장, 조회, 변경, 삭제를 다루는 클래스 및 설정 파일들을 라이브러리화하여 구현한 프레 임워크

ex) Mybatis, Hibernate → JPA

- 자바 Framework

Java EE 를 통한 웹 어플리케이션 개발에 초점을 맞추어 필요한 요소들을 모듈화하여 제공하는 프 레임워크

ex) Spring Framework, 전자정부표준-Spring, Struts

- 화면 구현 Framework

Front-End를 보다 쉽게 구현할 수 있게 틀을 제공 하는 프레임워크

ex) BootStrap, Foundation, MDL

- 기능 및 지원 Framework

특정 기능이나 업무 수행에 도움을 줄 수 있는 기 능을 제공하는 프레임워크

ex) Log4j, JUnit 5, ANT

 

Mybatis

데이터의 입력, 조회, 수정, 삭제(CRUD)를 보다 편하게 하기 위해 xml 로 구조화한 Mapper 설정 파일을 통해서 JDBC를 구현한 영속성 프레임워크

-> 설정 방법을 학습한다. 

 

JAVA코드 버전

1.접속 정보(driver, url, user, password)를 변수로 선언한다.

2.DB 접속 환경 설정 -> mybatis jar 파일, ojdbc jar 파일을 라이브러리 classpath 설정

Environment environment =
			new Environment("dev"							//환경 정보 이름
						   , new JdbcTransactionFactory()	//트랜잭션 매니저의 종류 결정
						   , new PooledDataSource(DRIVER, URL, USER, PASSWORD));

트랜잭션 매니저 종류

1)JdbcTransactionFactory  : 수동 커밋

2)ManagedTransactionFactory : 자동 커밋 

데이터 소스 전달

1)PooledDataSource : Connection Pool 사용 -> 연결 객체를 만들어 놓으므로 속도가 빨라진다.

2)UnPooledDataSource : Connection Pool 미사용 

 

3.생성한 환경 설정 정보를 가지고 마이바티스 설정 객체 생성

Configuration configuration = new Configuration(environment);

 

* Mapper 인터페이스 작성 - my batis에서 수행하고자 하는 구문들

예시 - 현재 시간 출력

import org.apache.ibatis.annotations.Select;

public interface Mapper {
	
	@Select("SELECT SYSDATE FROM DUAL")
	java.util.Date selectSysdate();
	
}

 

4. 설정 객체에 매퍼 등록

configuration.addMapper(Mapper.class);

 

5. SqlSessionFactory 생성

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);

1)SqlSessionFactory : SqlSession 객체를 생성하기 위한 팩토리 역할을 수행하는 인터페이스

2)SqlSessionFactoryBuilder : SqlSessionFactory 인터페이스 타입의 하위 구현 객체를 생성하기 위한 빌드 역할을 수행하는 클래스

3)build() : 설정에 대한 정보를 담고 있는 Configuration 타입의 객체 혹은 외부 설정 파일(xml)과 연결된 스트림을 매개변수로 전달하면 SqlSessionFactory 인터페이스 타입의 객체를 반환하는 메소드

 

6. sqlSession 생성 -> mapper에 있는 여러 구문들을 실행할 수 있다.

SqlSession sqlSession = sqlSessionFactory.openSession(false);

openSession() : SqlSession 인터페이스 타입의 객체를 반환하는 메소드, boolean 타입을 인자로 전달

false : Connection 인터페이스 타입 객체로 DML 수행 수 auto commit에 대한 옵션을 false로 지정(권장사항)

true: Connection 인터페이스 타입 객체로 DML 수행 수 auto commit에 대한 옵션을 true로 지정

 

getMapper() : Configuration에 등록 된 매퍼를 동일 타입에 대해 반환하는 메소드

		Mapper mapper = sqlSession.getMapper(Mapper.class);

		/* Mapper 인터페이스에 작성 된 메소드를 호출하여 쿼리 실행 */
		java.util.Date date = mapper.selectSysdate();
		
		System.out.println(date);
		
		/* close() : SqlSession 객체 반납 */
		sqlSession.close();
		
	}

 

xml 파일 버전

 

https://mybatis.org/mybatis-3/ko/getting-started.html

 

MyBatis – 마이바티스 3 | 시작하기

 

mybatis.org

 

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>            // xml 파일 공통 부분
<!DOCTYPE configuration                            // 이 문서의 정의 및 설정
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-config.dtd">
  
<configuration>  // 설정
  <environments default="dev">  // 기본 환경
    <environment id="dev"> // 여러 환경이 있을 수 있다.
    <!-- JDBC와 MANAGED 둘 중 하나 선택 가능
    	 JDBC : 수동커밋, MANAGED : 자동커밋 -->
      <transactionManager type="JDBC"/> // 수동커밋
      <!-- POOLED와 UNPOOLED 선택 가능
      	   POOLED : 커넥션 풀 사용, UNPOOLED : 커넷션풀 미사용 -->
      <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  
  <mappers>
    <mapper resource="org/mybatis/example/BlogMapper.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="org.mybatis.example.BlogMapper"> 
  <select id="selectSysdate" resultType="java.util.Date">
    SELECT
    	   SYSDATE
      FROM DUAL
  </select>
</mapper>

 

public class Application {

	public static void main(String[] args) {
		
		String resource = "com/ ~~ mybatis-config.xml";
		
		try {
			
			InputStream inputStream = Resources.getResourceAsStream(resource); // resource를 stream 타입으로 읽어오겠다
			SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
			
			SqlSession sqlSession = sqlSessionFactory.openSession(false);
			
            //sqlSession은 여러 기능을 가지고 있다. sysdate하나만 조회할 것이기에 .selectOne
			java.util.Date date = sqlSession.selectOne("mapper.selectSysdate"); // xml 파일의 namespace.select id
			System.out.println(date);
			
			sqlSession.close(); 
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}