mybatis-config 설정하기
01. mybatis-config.xml 파일 만들기
src > main > resources 폴더 생성하고 그 하위에 만들었다.
<?xml version="1.0" encoding="UTF-8"?>
<!-- Mybatis 설정 파일임을 선언하는 영역 -->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- Mybatis 설정과 관련된 기본 설정들을 선언하는 영역 -->
<!-- configuration : 설정을 위한 가장 최상위 태그, 내부에 필요한 설정들을 작성 -->
<configuration>
<!--
Database에 연결할 설정 정보들을 선언하는 영역
environments의 default 속성
- Database에 연결 설정을 여러 개 생성할 수 있는데, 그 중에서 기본으로 연결할 설정 정보를 지정하는 속성(envrionment의 id로 구분)
- 안에 여러 개의 <environment> 태그를 가질 수 있다.
-->
<environments default="web">
<environment id="web">
<!--
transactionManager의 type 속성
- JDBC : JDBC가 commit, rollback을 직접 사용 가능하도록 하는 옵션
- MANAGED : JDBC가 트랜잭션에 대해 어떠한 영향도 행사하지 않는 옵션(무조건 AUTO COMMIT)
-->
<transactionManager type="JDBC" />
<!--
dataSource : 실제 DB 접속에 관한 정보를 넣는 태그
type 속성
- POOLED : 커넥션 객체를 미리 만들어서 POOL에 저장해서 사용하는 설정, 객체 만드는 데 시간을 단축할 수 있다.
- UNPOOLED : DB 요청이 올 때마다 커넥션 객체를 만들고 사용이 끝나면 닫는 설정,
커넥션 객체를 미리 만들어 놓는 설정이 아니므로 상대적으로 느릴 수 있다.
-->
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:~~~/>
<property name="username" value="WEB"/>
<property name="password" value="WEB"/>
</dataSource>
</environment>
<environment id="abc">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:~~~"/>
<property name="username" value="ABC"/>
<property name="password" value="ABC"/>
</dataSource>
</environment>
</environments>
<!-- DB에서 사용하는 쿼리문들을 담는 mapper 파일을 등록하는 영역 -->
<mappers>
<mapper resource="mappers/member/member-mapper.xml"/>
</mappers>
</configuration>
<properties> 태그 : 외부 properties 파일의 내용을 불러올 때 사용한다.
<properties resource="경로 + 파일명.properties">
<property name="key명" value="설정값" />
</properties>
혹은
<dataSource type="POOLED|UNPOOLED">
<property name="명칭" value="${ properties에 설정된 key명 }" />
</dataSource>
<settings> 태그 : mybatis 구동 시 선언할 설정들을 작성, RUNTIME시 마이바티스의 행위를 조정하기 위한 중요 값들
프로그램 성능 최적화를 위해서 다양하게 활용하면 좋다.
<settings>
<setting name="jdbcTypeForNull" value="NULL" />
</settings>
https://mybatis.org/mybatis-3/ko/configuration.html
MyBatis – 마이바티스 3 | 매퍼 설정
매퍼 설정 마이바티스 XML 설정파일은 다양한 설정과 프로퍼티를 가진다. 문서의 구조는 다음과 같다.: configuration properties 이 설정은 외부에 옮길 수 있다. 자바 프로퍼티 파일 인스턴스에 설정할
mybatis.org
<typeAliases> 태그 : mybatis에서 사용할 자료형(클래스)의 별칭을 선언하는 태그 / Mybatis 내장 별칭 참고
<typeAliases>
<typeAlias type="패키지명 전부 기술" alias="ABC" />
</typeAliases>
<environments> 태그 : mybatis에서 연동할 DataBase 정보를 등록하는 태그, id로 구분하며 <environment> 태그 여러 개 작성하여 연결할 DB를 여러 개 구성할 수도 있다.
안에 <dataSource> 태그가 필수로 있어야 한다.
<environments>
<environment>
<tranactionManger tyep="JDBC" />
<dataSource type="POOLED / UNPOOLED">
<property name="driver" value="xxx" />
<property name="url" value="xxx" />
<property name="username" value="xxx" />
<property name="password" value="xxx" />
</environment>
</environments>
<mappers> 태그 : 사용하고자 하는 쿼리문이 정의된 mapper 파일을 등록하는 태그
xml 파일 생성만 한다고 해서 바로 사용할 수 있는 것이 아니라 반드시 config.xml 파일의 <mappers> 태그 안에 등록해야 한다.
<mappers>
<mapper resource="~~~/member-mapper.xml" />
</mappers>
Mybatis Mapper
02. mapper.xml 파일 만들기
만들어 놓은 쿼리문 중에서도 어떤 것을 사용할지 config.xml 파일에 등록해야 한다.
src > main > resources > mappers > 구분할 블라블라명 폴더 생성하고 그 하위에 만들었다.
그 안에 식별하기 쉽게 블라블라-mapper.xml 식으로 만든다.
<?xml version="1.0" encoding="UTF-8"?>
<!-- Mapper 설정 파일임을 선언 -->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- mapper의 namespace 속성 : 외부에서 mapper에 접근할 수 있는 이름 -->
<!-- mapper 태그 안에 작성할 내용을 적는다. -->
<mapper namespace="memberMapper">
<!--
SELECT 구문
id 속성 : 쿼리문의 고유 아이디(외부에서 참조할 때 id 속성을 가지고 참조한다.)
resultType 속성 : 쿼리 실행 후 조회된 결과 값의 자료형
-->
<select id="selectCount" resultType="_int">
SELECT COUNT(*) FROM MEMBER
</select>
</mapper>
<select> 태그 : SQL 조회 구문을 작성할 때 사용하는 태그
해당 쿼리를 외부에서 접근하고 싶을 때, namespace.id 명을 적는다.
#{ field } : pstmt의 “?” 위치 홀더의 역할이다. 전달된 값을 뜻한다. 여러 줄로 줄바꿈 문자를 섞어서 사용도 가능하다. 단, 쿼리의 마지막을 알리는 세미콜론은 작성하지 않는다.
속성명 | 내용 |
id | 구문을 찾기 위해 사용될 수 있는 namespace 내 유일한 구분자 |
parameterType | 구문에 전달될 파라미터의 클래스 명(패키지 경로 포함) or 별칭 |
resultType | 리턴되는 타입의 패키지 경로를 포함한 전체 클래스 명 or 별칭, collection인 경우 list, arraylist로 설정 가능 ** 수행한 결과 값으로 반환되는 type |
resultMap | 사용할 resultMap의 id를 적는다. |
** reulstMap과 resultType은 동시에 둘 다 사용할 수 없고, 하나만 선언해야 한다.
<insert>, <update>, <delete> 태그
<resultMap> 태그 : 조회한 결과를 객체와 행 간의 1:1 매칭이 아니라, 원하는 객체의 필드에 담아서 반환하고자 할 때 사용한다.
mybatis-config.xml 파일에 typeAlias를 지정하지 않으면, 패키지 명부터 클래스명까지 모두 기술해야 한다.
<id> : 테이블의 기본 키(Primary Key)
<result> : 테이블의 일반 컬럼
<resultMap type="ResultSet의 결과를 담을 자바 객체의 타입(클래스명 - 풀패키지로) 기입한다. (또는 alias 사용)" id="resultMap의 고유 아이디로 select 문에서 resultMap 속성에 사용한다.">
<id property="자바 객체의 필드명을 기술" column="DB에서 실제 조회되는 해당 컬럼명">
<result property="자바 객체의 필드명을 기술" column="DB에서 실제 조회되는 해당 컬럼명">
</resultMap>
03. SqlSessionTemplate.java 파일 만들기
mybatis.config.xml, mapper.xml 파일 생성 후 → common 패키지 생성 → Template 클래스 만들기 → SQL Session 반환하는 static 메소드를 작성한다.
1. mybatis-config.xml 설정 정보를 InputStream 객체를 통해 읽어온다.
2. SqlSessionFactoryBuilder 객체를 생성하고 build() 메소드를 통해 SqlSessionFactory 객체 생성
3. SqlSessionFactory 객체의 openSession() 메소드를 통해 sqlSession 객체 생성
→ openSession(false) 속성은 “auto commit을 사용하지 않겠다”는 뜻 (기본 값 : true)
04. SqlSession을 통한 쿼리 실행
1. Service 클래스에서 getSqlSession() 메소드 호출 → SqlSession 생성
2. Dao 클래스의 메소드 호출시 전달 인자로 SqlSession 객체 전달
3. Dao 클래스의 메소드에서 SqlSession 객체를 통해 쿼리에 접근
'Programming > Framework' 카테고리의 다른 글
DAY 139. TDD 방식으로 게시판 필터 기능 만들기 (0) | 2022.01.04 |
---|---|
DAY 138. Mybatis - 동적 SQL (0) | 2022.01.03 |
DAY 136. Mybatis 개념 & 동작 구조 (0) | 2022.01.01 |
DAY 135. Maven - Maven 기본 개념 (0) | 2021.12.31 |
DAY 132. Framework - 프레임 워크 (0) | 2021.12.28 |