[Mybatis] + [Spring] 연동 순서
[[ 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="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:Board/mybatisConfig.xml" />
<property name="mapperLocations" value="classpath:Board/membersql-mapping.xml" />
</bean>
[1] dataSource <=(2)에서 객체 등록해둔 dataSource를 property로 사용
[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 )