국비교육

국비지원 72일차 (스프링_MyBatis(환경설정, 연결 ))

재밌는개발러 2023. 11. 4. 04:55

* MyBatis이란?

SQL Mapping Framework

자바 코드로부터 SQL문을 분리해서 관리

작성할 코드가 줄어서 생산성 향상 및 유지 보수 편리

자동으로 Connection close() 기능

MyBatis 내부적으로 PreparedStatement 처리

 

* pom.xml이란?

프로젝트 정보가 표시되며 스프링에서 사용되는 여러 가지 라이브러리를 설정해 다운로드 가능

spring framework를 사용하다 보면 maven , pom.xml파일 등을 자주 보고 듣게 된다.

프로젝트를 진행할 때 사용하는 라이브러리들이 많아질수록 관리하는 게 어려워지는데 이때 maven  이 필요하다.

즉, maven 은 네트워크를 통해서 라이브러리들을 자동으로 받아주고 또 내가 사용하는 라이브러리들과 그 라이브러리들이 작동하는데 필요한 다른 라이브러리들까지 관리해 준다.

그럼 그 라이브러리들을 maven  이 어떻게 다운로드하여주고 관리해 주는가?

바로 pom.xml파일에 필요한 기능들을 작성해 주면 된다. 

(pom.xml에 필요한 기능을 maven  형식 코드를 복사해서 명시해 두면 자동으로 그 기능을 다운로드하여준다)

 

※ 스프링_MyBatis 환경설정 

 MyBatis 드라이버 다운로드하기

 1) Maven Repository 사이트 들어간다.
 https://mvnrepository.com/

 

 2) MyBatis라고 검색 > MyBatis, MyBatis Spring 둘 다 들어가서 최신버전으로 Maver 코드 복사해서 pom.xml 가서 denpendencies 밑에 붙여놓기.

3)  MyBatis -> 3.5.10 버전 


    MyBatis Spring -> 2.0.7 버전

 

  -> 해당 버전 Maven 코드 복사해서 pom.xml 가서 denpendencies 밑에 붙여놓기.

 

 

4) poom.xml Maven > 업데이트하기. (오른쪽 파란색 돌고래 모양 체크하면 알아서 업데이트된다.)

 

 5) jackson 관련 코드도 붙여 넣기 해주자.(나중에 쓸 거라서 같이 해준 것이다.)

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
	<version>2.14.1</version>
</dependency> 
<!-- https://mvnrepository.com/artifact/org.bgee.log4jdbc-log4j2/log4jdbc-log4j2-jdbc4.1 -->
<dependency>
	<groupId>org.bgee.log4jdbc-log4j2</groupId>
	<artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
	<version>1.16</version>
</dependency>

 

※ 자바스프링_MyBatis 연결주소 설정하기 (bean객체 설정 mapper, config. xml 파일들 생성)  

1. poom.xml 설정 ( ※ 스프링_MyBatis 환경설정  참조하란뜻.)

 1) 위 드라이버 다운로드하기 하면 됨.

 2) mvn repo에서 MyBatis, My Batis Spring (2 버전으로 받기) 받아서 poom에 넣기

 

2. web.xml 파일에 한글필터 넣기 (이거 없으면 한글 깨짐)

 -> web.xml파일 안에  맨 아래 </filter-mapping> 바로 다음에 '한글 변환 필터 코드'넣어준다

 

* 여러 자바파일에 한글변환필터 쓰이니 코드 알아두자.

<!-- 한글 변환 필터 시작 -->
	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
<!-- 한글 변환 필터 끝 -->

 

3. root-context.xml 파일 설정 (bean객체로 등록하기 위해 쓰는 거다.)

-> 아래코드를 root-context.xml 파일에서 <beans> '이사이에다가 코드 넣어준다.' </beans>

-> dataSource 빈 아래부터 붙여 넣어주면 된다.

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation"  value="classpath:mybatis-config.xml"/> <!-- mybatis 설정파일 위치 (main > resource 폴더)-->
<property name="mapperLocations" value="classpath:mapper/*Mapper.xml"/> <!--sql 담긴 파일들 위치랑 이름 패턴 지정한 파일--> 
</bean>

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="sqlSessionFactory"/>
</bean>

 

4. 위 처리 코드 넣어줬으면 id="sqlSessionFactory"라는 빈 안에 property 부분에  mapper.xml과 config.xml 이 2개의 파일을 참조하고 있을 것이다 그런데 이건 만들어져 있는 게 없어서 본인이 만들어줘야 하는 부분이다.

1)

<property name="mapperLocations" value="classpath:mapper/*Mapper.xml"/>

 ->  resources 폴더에 mapper 폴더 만들고 그 아래에 boardMapper.xml 파일 만들기

-> *Mapper 은 Mapper 앞에 어떠한 문자열 한 개가 올 수 있다는 뜻이다 즉, Mapper 폴더 안에는 각 테이블별로 쓰일 sql 담긴 파일들의 위치랑 이름 패턴 지정한 파일이 될 것이다 (sql 문 따로 빼놓은 거 - mybatis 방식) 그래서 *Mapper 앞에 * 에는 해당 테이별이 어떤 건지 명시해 주기 위해 * 로 해준 것이다.

2)

<property name="configLocation"  value="classpath:mybatis-config.xml"/>


 ->   resources 폴더에 mybatis-config.xml 파일 만들기

- mybatis-config.xml  은  mapper.xml파일에 쓰일 별칭 이름을 정하는 파일이라 보면 된다.(파라미터 타입 이름이나, 리턴타입 이름을 별칭을 적용해 사용한다.) -> 별칭 안 만들고 그냥 쓰면 변수로 쓰일 해당 클래스의 패키지 경로를 모두 기입해야 되기 때문에 코드가 길어질 것이다 그래서 별칭으로 간소화하게 해 준 것이다. 

 

* 아래처럼  resources 안에 해당 폴더와. xml 파일들 만들어준다

 

 

5. main > java > com.bitstudy.app 안에 controller, dao, domain(dto), service 패키지 생성

-> 이제 각각 패키지별로 구분해서 쓰일 것이다 mvc 패턴처럼 구분해 놓은 것이다.

* DAO : TDD에서 @TSET메서드 내용 뺸 나머지 CRUD 구현한 메서드들을 뜻한다.

-> 데이터베이스의 data에 접근하기 위한 객체이며 데이터베이스 접근을 하기 위한 로직과 비즈니스 로직을 분리하기 위해 사용한다.

DAO는 데이터베이스와 연결할 connection까지 설정되어 있는 경우가 많다.

 

* DTO : SETTER, GETTER로 구성된 프라이빗한 변숫값들을 저장한 곳.

-> DTO는 보통 로직을 가지고 있지 않고 data와 그 data에 접근을 위한 getter, setter만 가지고 있다.

정리하면 DTO는 Database에서 Data를 얻어 Service나 Controller 등으로 보낼 때 사용하는 객체를 말한다.

즉, 계층 간 데이터 교환을 위한 자바 빈즈(JAva Beans)이다.

 

※ DAO와 Mybatis 연결하는 법

1. 해당 홈페이지 들어가서 https://mybatis.org/mybatis-3/ko/getting-started.htm

-> 위에 그림처럼 시작하기 로들어가서 밑으로 내려 매핑된 SQL 구분 복사 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.BlogMapper">
  <select id="selectBlog" resultType="Blog">
    select * from Blog where id = #{id}
  </select>
</mapper>

 

2. 아래에 boardMapper.xml에 복사해 넣어준다 (해당 테이블의 sql문을 넣어준다고 생각하면 된다.)

 

3. BoardDao클래스와 boardMapper.xml을 연결해서 사용하고 있다.

 1) selectOne : 결괏값이 하나

 2) namespace로 dao와 boardMapper를 연결하는 것이고,
 3) namespace변수에 값 넣을 때 마지막에. 꼭 넣기!

String namespace="com.bitstudy.app.dao.boardMapper."

 4) 뒤에 붙인 select로 boardMapper의 아이디값으로 연결해서 해당 구문 쓸 거라는 뜻이고,

 5)같이 보내는 bno(int타입)을 boardMapper에서 받을 때 (parameterType) int로 받을 거고 - sql문 실행할 때 #{bno}라고           쓰여 있는 부분에 보낸 bno값이 들어간다. ($이 아니라 #을 씀. 주의)

 6) resultType에 경로 지정해 놓은 DTO파일에 sql 결괏값을 저장하겠다는 뜻.

 

※ 약어 설정 (별칭 설정) - mybatic-config.xml 파일에서 설정한다.

1.  홈페이지 검색해 https://mybatis.org/mybatis-3/ko/getting-started.html
    시작하기로 들어가 밑으로 내려서 아래 코드 복사 

 

2. 노란색으로 된 부분만 필요한 코드로 치고 안에 코드는 바꿔서 사용하면 된다.

( mybatic-config.xml  에 붙여 넣기 해서 사용하낟.)

-> typeAliases 해서 별칭 BoardDto로 해놓고 type에 링크를 적어놓는다.
    해당 별칭은 mybatis에서만 사용할 수 있다. (boardMapping에서 사용

 

3. 위와 같이 별칭 설정해놓으면  아래와같이 boardMapper.xml 파일에 resultType (반환 타입) 에 

"com.bitstudy.app.domain.Ex02_BoardDto"

위와같이 써야 되는데 아래와 같이 alias에 별칭 정해놓으면 저 BoardDto 만 적으면 type의 경로가 적용되는 것이다.

<typeAlias alias="BoardDto" type="com.bitstudy.app.domain.Ex02_BoardDto" />