YJ의 새벽
Spring 4 ( DB 접근 +MyBatis 환경설정 ) 본문
MyBatis 사용 해보자 .
-- MemberService 인터페이스, MemberServiceImpl 클래스 (@Service ) 생성.
-- @Service : 비즈니스 로직을 처리하는 클래스임을 명시 + bean 등록,
-- @Autowired : bean으로 등록된 객체중 타입이 같거나, 상속관계인 bean을 주입해주는 역할
-- @Repository : 영속성을 가지는 DB/ 파일과 연결되는 클래스임을 명시 + bean 등록.
-- Service 인터페이스로 구분지은 이유 ?????????
1. 프로젝트에 규칙성을 부여하기 위해 .
2. Spring AOP 를 위해서 필요 .
3. 클래스간의 결합도를 약화 시키기 위해서 .
-- 제어의역전 . 으로 new MemberServiceImpl() 사용하지 않는다
-- Connection 을 Service 에서 얻어왔었던 이유 ??
-Service의 메서드 하나는 요청을 처리하는 업무단위 .
-->해당 업무가 끝난 후 트랜잭션을 한번에 처리하기위해서
어쩔수 없이 Connection 을 Service에서 얻어올 수 밖에 없었다.
-- Connection을 얻어오거나 / 반환하거나 , 트랜잭션을 처리하는 구문을 적지 않아도
Spring 에서 제어를 하기 때문에 Service 구문이 간단해진다.
- . MyBatis 사용 해보자 .
-- DAO 는 DB 랑 연결하기위한 Connection이 공통적으로 필요하다 !!
-- Mybatis 영속성 프레임워크를 통해서 이용하려면 Connection을 이용해 만든 객체 SqlSessionTemplate 을 사용.
--- pom.xml 에 추가 .
<!-- properties : 메이븐이 적용된 프로젝트에서 공통적으로 사용할 버전 또는 설정값 정보를 작성하는 태그 -->
<properties>
<java-version>11</java-version>
<org.springframework-version>5.3.14</org.springframework-version>
<org.aspectj-version>1.9.4</org.aspectj-version>
<org.slf4j-version>1.7.25</org.slf4j-version>
</properties>
<!-- dependencies : Maven 프로젝트는 외부 저장소와 의존 관계를 맺고 있어 프로젝트에 필요한 파일을(라이브러리)
사용자가 직접 받을 필요 없이 해당 태그 내에 지정된 형식으로 작성하면 네트워크를 통해 외부 저장소에서 자동으로 얻어와 세팅함. -->
<dependencies>
<!-- JDBC 드라이버 (ojdbc11) -->
<!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc11 -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc11</artifactId>
<version>21.5.0.0</version>
</dependency>
<!-- 스프링에서 JDBC를 사용할 수 있게 하는 라이브러리 -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
<!-- 위 properties의 지정한 Spring 버전을 따라감 -->
</dependency>
<!-- Mybatis 영속성 프레임워크 -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
<!-- Spring - Mybatis 연결 모듈, 연결 역할을 하는 라이브러리 -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<!-- 커넥션 풀 기능을 사용하기 위한 라이브러리 -->
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.9.0</version>
</dependency>
----- pom.xml 에 추가 ..
--window -> Proferences -> xml -> xml Catalog
Location : http://mybatis.org/dtd/mybatis-3-config.dtd
key : -//mybatis.org//DTD Config 3.0//EN
Location : http://mybatis.org/dtd/mybatis-3-mapper.dtd
key : -//mybatis.org//DTD Mapper 3.0//EN
--- src/main/resource mybatis-config.xml 파일 만들기 .
---mybatis-config.xml 에서 관련 설정 작성 . <configuration> 설정정보 </configuration>
settings , typeAliases , mappers 순서 꼭 !!! 지키기.
settings : insert/update 진행 시 null 이 포함되어있는경우
Mybatis 기본적으로 에러를 발생시킴.
해당 구문이 작성되면 지정된 value 로 값을 insert/update 시킴.
** null값이 있으면 NULL (무조건 대문자) 을 insert/update 해라 .
--- src/main/resoutces/ sping / root-context.xml 에 추가 작성.
--root-context.xml ??
-web-xml 파일에서 가장 먼저 읽어들이는 설정 파일 .
-프로젝트 전반적으로 사용되는 자원을 생성 ( bean으로 등록) 하고 , 설정하는 파일 .
-DB 연결정보 , 트랜잭션 처리, 파일 업로드 등을 작성 .
1. DBCP 사용을 위한 DataSource 를 bean 등록
-- DataSource : java에서 Connection Pool 을 지원하기 위한 인터페이스 (Connection 상위호환 )
-- destory-method="close" : 주어진 세션을 자동으로 반환(close) 하는 설정
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
<!-- Root Context: defines shared resources visible to all other web components -->
<!-- 1. DBCP 사용을 위한 DataSource를 bean 등록 -->
<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:@localhost:1521:xe" />
<property name="username" value="community" />
<property name="password" value="1234" />
<!-- SQL이 수행된 후 자동으로 Commit 되는것을 지정 -->
<property name="defaultAutoCommit" value="false" />
<!-- 커넥션 풀 설정 -->
<property name="initialSize" value="10" /> <!-- 초기 커넥션 수, 기본 0 -->
<property name="maxTotal" value="50" /> <!-- 최대 커넥션 수, 기본 8 -->
<property name="maxIdle" value="20" /> <!-- 유휴 상태로 존재할 수 있는 커넥션 최대 수, 기본 8 -->
<property name="minIdle" value="10" /> <!-- 유휴 상태로 존재할 수 있는 커넥션 최소 수, 기본 0 -->
<property name="maxWaitMillis" value="-1" /> <!-- 예외 발생 전 커넥션이 반환 될 떄 까지 대기하는 최대 시간(ms), 기본 -1(무기한) -->
</bean>
<!-- MyBatis 관련 Bean 생성 -->
<!-- SqlSession : sql구문을 DB에 전달, 실행하는 객체 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>
<!-- <tx:annotation-driven proxy-target-class="true"/> -->
<tx:annotation-driven transaction-manager="transactionManager" />
</beans>
-- root-context.xml -> Namespaces -> tx 체크 !!
--- src/main/resources / mappers / member-mapper.xml 만들기
-- mapper 파일 생성 시 반드시 해야하는것 !!
1 . chche-ref 태그 삭제.
2. mapper 태그에 namespace 속성 추가
-- mybatis-config.xml 파일에서 mappers 경로지정.
--<mapper resource="mapper 파일경로"/>
-- 경로를 작성하는 기준은 src/main/resources 폴더
-- member-mapper.xml 에서 .
-- 수행하려는 SQL 에 따라서 태그가 구분됨.
-- select 태그
-resultType : 조회 결과가 1행 1열 인 경우에만 작성
: 조회된 데이터의 Java 자료형을 Mybatis 별칭 형태로 작성
--- DAO 클래스가서 테스트 해보자. ( 파라미터가 없을때 )
--- DAO 클래스가서 테스트 해보자. ( 파라미터가 있을때 )
--- Mybatis 에서 #{ } , ${ } 차이점
-# { 변수명 } : SQL에 값이 포함될 때 양쪽 ' ' 도 추가됨. ( ex; pstmt )
--> 리터럴 사용 ( 값 자체로 사용 )
-$ { 변수명 } : SQL에 값이 포함될 때 양쪽 ' ' 추가되지 않음. ( ex; stmt )
--> SQL 구문 조합 시 사용 ( condition )
--- member-mapper.xml 에 쿼리문 추가 .
----------------------------------------------------------------------------------------------------------------------------------
--- MemberController 클래스 .
---- MemberService 인터페이스 .
--- MemberServiceImpl 클래스 ( MemberService 상속 )
--- MemberDAO 클래스
JDBC 드라이버 ( odjbc 11 )
https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc11
Spring에서 JDBC지원하는 모듈 (spring-jdbc)
https://mvnrepository.com/artifact/org.springframework/spring-jdbc
Mybatis 라이브러리 (mybatis)
https://mvnrepository.com/artifact/org.mybatis/mybatis
Spring에서 쉽게 Mybatis를 사용 가능하게 만드는 모듈(spring-mybatis) https://mvnrepository.com/artifact/org.mybatis/mybatis-spring
DataBase Connection Pool 사용을 위한 라이브러리(commons-dbcp2)
https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2
'Spring > Spring' 카테고리의 다른 글
Spring 6 ( Bcrypt 암호화 ) (0) | 2023.04.26 |
---|---|
Spring 5 ( 로그인 , 로그아웃 , 쿠키 ) (0) | 2023.04.25 |
Spring 3 ( 파라미터 가져오기 , 화면전환 ) (0) | 2023.04.21 |
Spring 2 ( 개발환경 ( STS )) (0) | 2023.04.21 |
Spring 1 ( 개요 ) (0) | 2023.04.21 |