Back to the Mybatis

[Mybatis] + [Spring] 연동 순서

Backcoder 2022. 8. 22. 21:14

[[ Spring MVC => Mybatis 연동 ]] 

: Spring이 주인이 된다. mybatis를 관리한다

[ 순서 ] 

1. pom.xml 라이브러리 추가 
(1) mySQL ( DB driver ) 

(2) mybatis .jar
(3) mybatis-spring. jar (적당한 버전)
(4) spring-jdbc.jar  (springframework-version 버전일치)

 

 

2. mybatis-Config.xml 파일 생성 

(해당 프로젝트에 생성)

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
<!-- 패키지명 알리아스 주기 -->
<typeAliases>
<typeAlias type="Board.memberDTO" alias="memberdto"/>
<typeAlias type="Board.BoardDTO" alias="boarddto"/>
</typeAliases>
</configuration>

 

3. 각 SQL.xml 파일 생성 

(해당 프로젝트에 생성)

<?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="b">
<select id="allboard" resultType ="boarddto">
select * from boarddto 
</select>
</mapper>

 


4. *spring-bean configuration.xml 생성 
(해당 프로젝트에 생성)

(1) component-scan 설정 
- context 태그로 설정해야하므로, namespaces 로 가서 context 체크 

- @Component @Service @Repository 등 Bean을 어노테이션으로 등록할 수 있게해주는 설정  

 

<context:component-scan base-package="Board"></context:component-scan>

(2) Spring dataSource 객체 등록 (DB연결)
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/backcoder"/>
<property name="username" value="backcoder"/>
<property name="password" value="1111"/>
</bean>

( *주의 : mybatis-config.xml 에  dataSource 가 중복 설정되어 있으면 충돌난다. )

( mybatis-config.xml 에서 sql xml 파일 mapping 해주는 <mappers>태그도 Spring 에서 관리하니, 혹시 있다면 지워주자. 

mybatis-config.xml 에 있는건 끽해야 알리아스 정도만 남게된다. )


(3) sqlSessionFactory 객체로 등록 

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" >
<property name="dataSourceref="dataSource"/>
<property name="configLocation" value="classpath:Board/mybatisConfig.xml" />
<property name="mapperLocations" value="classpath:Board/membersql-mapping.xml" />
</bean>

 


[1] dataSource <=(2)에서 객체 등록해둔 dataSourceproperty로 사용   

 

[2] mybatis-Config.xml파일 property 로 사용

[3] 각 SQL.xml 파일 을 property 로 사용

 

=> 위의 3가지 정보를 sqlSessionFactory 객체의 property로 넣어서 사용한다. 

 

[ *SQL.xml 파일들 여러개 맵핑 ]

<property name="mapperLocations" value="classpath:Board/membersql-mapping.xml" />

<property name="mapperLocations" value="classpath:Board/boardsql-mapping.xml" />

 

: 두 개의 SQL.xml 파일들을 다 등록하고 싶다.   ( 이렇게 등록하면 중복맵핑 오류 ) 

 

=>  SQL.xml 파일들 이름을 비슷하게 묶어두고 =>  * 로 묶어서 classpath 를 준다! 
(

* : All 의미 )


<property name="mapperLocations" value="classpath:Board/ *-mapping.xml" />

 

 

 


(4) sqlSession 객체로 등록 ( factory 참조 )
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg   ref="sqlSessionFactory"/>
</bean>



 

 

5. servlet-context.xml  

- Component Scan 설정 

<context:component-scan base-package="Board"/>  

 

*주의 
<context:component-scan base-package="Board"/> 태그가 
(1) spring config 에 있는건 @component / @service / @repository 
annotation  읽어주는 component scan 이고 

(2) servlet-context 에 있는건 @controller 
어노테이션을 읽어주는 역할을 해준다 

즉! (1),(2) 양쪽에 다있어야 정상 실행 된다. 
 

 

 

6*web.xml 
웹 시작하면 어떤 xml설정파일과 config 파일을 보고 실행할지, 최종 참조를 정한다. 

<context-param>
<param-name> contextConfigLocation </param-name>
<param-value>/WEB-INF/spring/root-context.xml
classpath:Board/spring-mybatis.xml
</param-value>
</context-param>

=> web.xml 에, 웹 시작하면 만들어둔 spring bean configuratioin 파일 읽으라고 추가 

 

* <filter > 추가 

- characterEncoding 필터를 여기서 설정해 둬야 한다. 

 

<filter>
<filter-name>encoding</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>
</filter>

<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

 

=> 웹은 시작하면 
(1) spring bean configuration.xml 파일 읽고
(2) root-context.xml / servlet-context.xml (기본설정) 파일들을 읽고

위에서 설정해둔 Config 에 따라 동작하게 된다. 

 

 

==== 준비 완료 ====

 

 

 

DB연결 / SQL 맵핑 정보를 가진 sqlSessionFactory 객체를 이용해서 => sqlSession 객체를 생성한다
=> 다 Bean Container 에서 생성해서 등록해둠 => 자바에서는 @Autowired로 바로 session 객체를 사용 가능하다! 

@Controller 에서 Service 단을 @Autowired 
@Service 에서 DAO(Repository)단을 @Autowired
@Repository 에서 만들어둔 SqlSession 객체(Bean)를 @Autowired
=> session 객체를 DAO 에서 바로 사용 가능 

 

@Repository("dao")
public class memberDAO {

@Autowired
SqlSession session;

public List<memberDTO> selectAll() throws IOException {
  List<memberDTO> memberlist = session.selectList("memberlist");
     return memberlist; }

 

 

- 처음 XML 설정만 해두면, DAO 에서 SQL 문을 사용하는게 위와같이 매우 간결해진다.

Mybatis 는 DAO에서 SQL 문의 사용을 편하고 간결하게 해주는  장치! ( SQL mapper )