티스토리 뷰

1. SqlSession내 선언되어 있는 메서드를 이용하는 방법

 => https://til-choonham.tistory.com/210

 

[Mybatis] Mybatis 프레임워크 기초

Mybatis 프레임워크는 Spring 이나 Dynamic Web 프로젝트의 DB 연동 작업을 좀 더 쉽게 하기 위해서 탄생한 Apache에서 제작한 프레임워크이다. Mybatis의 가장 중요한 특징은 대표적으로 2가지가 있는데, 첫

til-choonham.tistory.com

1) "sql-map-config.xml" 문서 읽기:

 Reader reader = Resource.getResourceAsReader("읽어들일 환경설정 파일");

 

2) 읽은 문서를 이용하여 SqlSessionFactory 객체를 생성:

  SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(Reader 객체);

 

3) SqlSessionFactory 객체를 통하여 SqlSession 객체를 얻기(생성):

 SqlSession session = SqlSessionFactory 객체.openSession();

 

 

- SqlSession 객체 내부에서 DB 연동을 위해 사용하는 메서드는 다음과 같다.

 

1) insert("Mapper의 nameSpace.해당id", 전달 객체);

 ex) insert("BoardDAO.insertBoard", BoardVO객체);

 

2) update("Mapper의 nameSpace.해당id", 전달 객체);

 

3) delete("Mapper의 nameSpace.해당id", 전달 객체);

 

4) selectOne("Mapper의 nameSpace.해당id", 전달 객체);

 -> 1개의 레코드 반환

 

5) selectList("Mapper의 nameSpace.해당id", 전달 객체)

 -> 2개 이상의 레코드 반환

 

6) commit();

 -> 실제 데이터베이스 수정을 확정하는 메서드

 

2. 개발자가 새로운 메서드를 선언하여 이용하는 방법

 

 1) interface 선언

 

◎TodoMapper.java(Interface)

package com.choonham.tdl.repository;

import java.util.List;

import com.choonham.tdl.dto.Todo;

public interface TodoMapper {
	public int insertTodo(Todo todo);
	public List<Todo> selectTodo();
	public int updateTodo(Todo todo);
}

 

2) sql-mapper.xml 문서에 namespace를 해당 interface의 fullName으로 작성

 

◎sql-mapper.xml

<?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="프로젝트 내에서 유일한 이름으로 설정"> -->
<mapper namespace="com.choonham.tdl.repository.TodoMapper">
<!--  -->

	<insert id="insertTodo" parameterType = "Todo">
		INSERT INTO todolist (
			id, title, name, sequence, type, regdate)
		VALUES (
			todoid.naxtval,
			#{title},
			#{name},
			#{sequence},
			'TODO',
			sysdate )
	</insert>
	
	<select id="selectTodo" resultType = "Todo">
		SELECT 
			id, title, name, sequence, type, regdate
		FROM
			todolist
		ORDER BY
			regdate DESC
	</select>
	
	<update id = "updateTodo" parameterType = "Todo">
		UPDATE todolist SET 
		<if test="type== 'TODO'">
			type='DOING'
		</if>
		<if test="type=='DOING'">
			type='DONE'
		</if>
		WHERE id = #{id}
	</update>

</mapper>

 

3) DAO 역할을 하는 Repository.java 에서 다음과 같이 SqlSession 객체를 생성 & 사용

 

◎Repository.java

package com.choonham.tdl.repository;

import java.util.ArrayList;
import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.choonham.tdl.dto.Todo;

@Repository
public class TodoRepository {
	
	@Autowired
	SqlSession sqlSession;
	//SqlSession 객체 내부에는 TodoMapper 인터페이스를 이용해서, 해당 메서드들이 가지고 있는 추상 메서드들을 직접 사용할 수 있다.
	// getMapper(반드시 interface.class) => 반환 클래스: 해당 인터페이스
	
	
	public TodoRepository() {
		// TODO Auto-generated constructor stub
	}

	public int insertTodo(Todo todo) {
		int result = 0;
		TodoMapper mapper = sqlSession.getMapper(TodoMapper.class);
		
		try {
			result = mapper.insertTodo(todo);
		} catch(Exception e){
			e.printStackTrace();
		}
		return 0;
	}

	public List<Todo> selectTodo() {
		List<Todo> result = new ArrayList<Todo>();
		
		TodoMapper mapper = sqlSession.getMapper(TodoMapper.class);
		
		try{
			result = mapper.selectTodo();
		} catch(Exception e){
			e.printStackTrace();
		}
		return result;
	}

}

 

이런 구조로 구성해도, 1번 방법과 동일하게 SQL 구문을 맵핑하여 동작을 수행한다.

단, 인터페이스가 가지고 있는 메서드 명과 mapping.xml 내부에 SQL 구문 id가 반드시 일치해야 한다.

 

 

'[JAVA] > Mybatis' 카테고리의 다른 글

[Mybatis] JavaORM plugin  (0) 2021.06.30
[Mybatis] Dynamic SQL  (0) 2021.06.30
[Spring] Mybatis 사용  (0) 2021.06.29
[Mybatis] Mapper Elements  (0) 2021.06.29
[Mybatis] Mybatis 프레임워크 기초  (0) 2021.06.29
Comments