YJ의 새벽

Spring 4 ( DB 접근 +MyBatis 환경설정 ) 본문

Spring/Spring

Spring 4 ( DB 접근 +MyBatis 환경설정 )

YJDawn 2023. 4. 24. 16:29

 

 

 

         MyBatis 사용 해보자 .

 

 

 

-- MemberService 인터페이스,     MemberServiceImpl 클래스 (@Service ) 생성. 

 

-- @Service   :   비즈니스 로직을 처리하는 클래스임을 명시 + bean 등록,

-- @Autowired  :  bean으로 등록된 객체중 타입이 같거나, 상속관계인 bean을 주입해주는 역할

-- @Repository  :  영속성을 가지는 DB/ 파일과 연결되는 클래스임을 명시 + bean 등록.

-- Service 인터페이스로 구분지은 이유 ?????????

  1. 프로젝트에 규칙성을 부여하기 위해 .

  2. Spring AOP 를 위해서 필요 .  

  3. 클래스간의 결합도를 약화 시키기 위해서 .

 

-- 제어의역전 . 으로 new MemberServiceImpl()  사용하지 않는다 

 

MemberController.class ___________컨트롤러와 서비스 연결.

 

MemberServiceImpl.class_________서비스와 DAO 연결.

 

 

 

-- 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 폴더

mybatis-config.xml 파일.

-- member-mapper.xml 에서 .

 

  -- 수행하려는 SQL 에 따라서 태그가 구분됨.

 -- select 태그 

    -resultType  :  조회 결과가 1행 1열 인 경우에만 작성

                        :  조회된 데이터의 Java 자료형을 Mybatis 별칭 형태로 작성

--- DAO 클래스가서 테스트 해보자.  ( 파라미터가 없을때 )

 

DB에 저장된값. 6개
DB 저장된 값 6개를 로그에 띄우자.
DB 접근하여 COUNT(*) 확인

 

 

 

 

--- 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
Comments