티스토리 뷰
1. SqlSession내 선언되어 있는 메서드를 이용하는 방법
=> https://til-choonham.tistory.com/210
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 |
- redux-thunk
- Async
- await
- 파니노구스토
- react
- 맛집
- Promise
- javascript
- 정보보안기사 #실기 #정리
- 이탈리안 레스토랑
- 인천 구월동 이탈리안 맛집
- 인천 구월동 맛집
- react-native
- AsyncStorage
- redux
- Total
- Today
- Yesterday