[ Mybatis ]
데이터의 CRUD를 보다 편하게 하기 위해 xml로 구조화한 Mapper 설정 파일을 통해
JDBC를 구현한 영속성 프레임워크
=> SQL 내부에 값을 직접 작성 가능 (? 안쓰고 바로 가능)
=> 조회 rs -> VO 객체로 옮겨담기 과정 축소됨
=> stmt, pstmt 기호화 (생성 X , 섞어서 사용)
=> 동적 SQL (SQL 내부에 if, for 등을 사용 가능)
<설정>
1. pom.xml 에 OJDBC 라이브러리 추가
<!-- mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8 -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>21.1.0.0</version>
</dependency>
2. spring - jdbc 추가
<!-- mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
3. mybatis 추가
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
4. mybatis Spring 추가
<!-- mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
4. DBCP 사용 추가
<!-- mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.9.0</version>
</dependency>
5. mybatis.config 설정하기
<동작구조>
--> SqlSession 동작을 살펴보면 됨
SqlSession Factory Bean => SqlSessionTemplate => 실행
(mybatis.config.xml에 설정) (mapper.xml에 설정)
1. Mybatis 설정용 xml파일 DTD(Document Type Definition 추가
(경로) Window - Preferences - XML Catalog - User Specified Entries -add
<Config>
[ location 작성] = http://mybatis.org/dtd/mybatis-3-config.dtd (빈칸없이 그대로)
[Key 작성] = -//mybatis.org//DTD Config 3.0//EN
<Mapper>
[ location 작성] = http://mybatis.org/dtd/mybatis-3-mapper.dtd (빈칸없이 그대로)
[Key 작성] = -//mybatis.org//DTD Mapper 3.0//EN
2. resources에 mybatis-config.xml 생성 후 설정하기
<settings>
<setting name="jdbcTypeForNull" value="NULL"/>
</settings>
// insert update 에 사용되는 값 중 null 이 있을 경우 NULL을 대입하도록 함 (NOT NULL제약이 없는 경우만 가능)
<!-- mapper(SQL이 작성된 파일) 위치 등록 부분 -->
<mappers>
<mapper resource="/mappers/member-mapper.xml" />
</mappers>
<!-- mapper에서 사용되는 VO를 간단히 부르기 위한 별칭 지정 -->
<typeAliases>
<typeAlias alias="Member" type="edu.kh.fin.member.model.vo.Member"></typeAlias>
</typeAliases>
3. root-context.xml 설정 추가
<!-- Root Context: defines shared resources visible to all other web components -->
<!-- root-context.xml
web.xml 파일이 가장 먼저 읽어 들이는 설정 파일.
프로젝트 전체에 공유되는 자원(DB연결, 트랜잭션처리, 파일업로드 등)
설정 내용을 작성
-->
<!-- DBCP 사용을 위한 DataSource를 Bean으로 등록!! -->
<!-- DataSource란? : java에서 Connection Pool을 지원하기 위한 인터페이스 -->
<!-- BasicDataSource : DataSource인터페이스를 구현한 클래스, 아파치 commons.dbcp에서 제공 -->
<!-- destroy-method="close" : 주어진 세션을 자동으로 반환(close)하라는 설정 -->
<bean id="dataSource"
class="org.apache.commons.dbcp2.BasicDataSource"
destroy-method="close">
<property name="driverClassName"
value="oracle.jdbc.driver.OracleDriver" />
<property name="url"
value="jdbc:oracle:thin:@ 주소 :xe" />
<property name="username" value=" DB아이디 "/>
<property name="password" value=" DB비밀번호 " />
<!-- defaultAutoCommit: SQL 수행 후 자동 COMMIT 설정. (기본값 : true) -->
<property name="defaultAutoCommit" value="false" />
<!-- 커넥션 풀 설정 -->
<property name="initialSize" value="10" /> <!-- 초기 커넥션 수, 기본 0 -->
<property name="maxTotal" value="500" /> <!-- 최대 커넥션 수, 기본 8 -->
<property name="maxIdle" value="100" /> <!-- 유휴 상태로 존재할 수 있는 커넥션 최대 수, 기본 8 -->
<property name="minIdle" value="10" /> <!-- 유휴 상태로 존재할 수 있는 커넥션 최소 수, 기본 0 -->
<property name="maxWaitMillis" value="-1" /> <!-- 예외 발생 전 커넥션이 반환 될 떄 까지 대기하는 최대 시간(ms), 기본 -1(무기한) -->
</bean>
<!-- SqlSession : sql구문을 DB에 전달, 실행하는 객체 (Connection 역할)
SqlSessionFactory : SqlSession을 만드는 객체
sqlSessionFactoryBean : mybatis 설정 파일(mybatis-config.xml)과 Connection Pool 정보를 이용하여 SqlSessionFactory를 만드는 객체
sqlSessionTemplate : SqlSession 객체에 트랜잭션 처리 역할이 가능하도록 하는 객체 -->
<!-- 마이바티스 SqlSession 등록하기 (xml 방식으로 bean 등록) -->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- mybatis-config.xml 설정 불러오기 -->
<property name="configLocation" value="classpath:mybatis-config.xml" />
<property name="dataSource" ref="dataSource" />
</bean>
<!-- SqlSessionTemplate : 기본 SQL 실행 + 트랜잭션 관리 역할을 하는 SqlSession을 생성할 수 있게 하는 객체(Spring bean으로 등록해야함.) -->
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="sqlSessionFactoryBean" />
</bean>
<!-- 스프링에서 사용하는 proxy를 이용한 트랜잭션 제어가 안될 경우 추가적인 트랜잭션 매니저를 추가해서 문제 해결 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
5. mapper 설정하기
resources’폴더에 ‘mappers’ 폴더 생성 후 mapper.xml 파일 생성
[ 사용 ]
---- 최상단 : 마이바티스 매퍼 설정임을 선언 & namespace 선언 ----
<?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="memberMapper">
<!-- 내용 -->
</mapper>
---- <resultMap> 태그 ----
-> SELECT 조회 결과(ResultSet)의 컬럼명과 VO객체의 필드명이 일치하지 않을 때 어떤 컬럼과 필드가
매칭되어야 하는지 지정하는 태그
->resultMap의 type 속성은 실제로 구현해 놓은 자바 POJO 객체를 사용해야 하며, mybatis-config.xml에서 typeAlias를 지정하지 않은 경우, 패키지 명부터 클래스 명 까지 모두 기술해야 됨
---- <insert> <update> <delete> 태그로 SQL문 작성 ----
(개별로 id , parameterType , resultType 등 속성 작성)
'개발자로 업그레이드 되자 > SpringMVC' 카테고리의 다른 글
스프링 MVC - 이미지 업로드 / 파라미터 사용 DB삽입 (0) | 2022.01.11 |
---|---|
스프링MVC - 트랜잭션 및 예외처리 (0) | 2022.01.06 |
스프링MVC - 파라미터 받기 (0) | 2022.01.06 |
스프링MVC - BCrypt 암호화 진행 (0) | 2022.01.06 |
Spring MVC 환경 구축 (0) | 2022.01.03 |