본문 바로가기

BackEnd/Spring

MyBatis 연동하기

https://mvnrepository.com/

 

링크로 접속하여 MyBatis를 검색합니다.

 

 

 

 

MyBatis와 MyBatis Spring 두가지 모두 의존 코드를 복사해옵니다.

 

 

 

 

dependencies 태그 내부에 복사해온 MyBatis와 MyBatis Spring 의존 코드를 붙여 넣어줍니다.

버전은 해당 시기에 릴리즈된 버전으로 비슷하게 맞춰줍니다.

 

 

 

 

 

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

 

src/main/resources에 mybatis-config.xml(임의의 파일명) 파일을 생성하고 DOCTYPE을 선언해줍니다.

 

 

 

 

<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

 

src/main/resources에 mappers 패키지를 생성하고 회원과 관련된 정보를 다룰 memberMapper.xml 파일을 생성합니다.

앞으로 여러개 생성될 개별 mapper XML 파일에는 위 DOCTYPE 코드를 선언합니다.

 

 

 

	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" /><!-- JDBC 의존 -->
		<property name="configLocation" value="classpath:/mybatis-config.xml" /><!-- 설정 파일 -->
		<property name="mapperLocations" value="classpath:mappers/**/*Mapper.xml" /><!-- SQL 집합 -->
	</bean>

 

root-context.xml에 sqlSessionFactory Bean 코드를 작성합니다.

mapperLocations 속성의 mappers와 /*Mapper.xml 사이의 /**는 중간에 어떤 상위 디렉토리가 있어도 모든 걸 읽고,

Mapper.xml 앞의 *는 Mapper 이름 앞에 어떤 이름이 붙어도 모든 걸 읽겠다는 의미입니다.

 

 

 

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

 

root-context.xml에 sqlSession Bean 코드를 작성합니다, sqlSession Bean은 생성자를 통하여 의존 객체를 주입했습니다.

 

 

 

 

@Inject
private SqlSession sqlSession;

 

DAO 인터페이스를 구현한 메서드에서 SqlSession을 Inject 해줍니다.

 

 

 

<mapper namespace="com.itwiibs.mappers.MemberMapper">

	<insert id="insertMember">
		INSERT INTO member(id, pass, name, reg_date) VALUES(#{id}, #{password}, #{name}, #{registerDate})
	</insert>

</mapper>

 

src/main/resources/mappers의 memberMapper.xml로 돌아가 member 테이블에 INSERT할 경우의 코드를 작성합니다.

 

mapper의 namespace 속성은 임의의 이름이나, 보통은 파일의 패키지.파일명으로 통일합니다.

SQL INSERT 구문의 VALUES에 물음표 대신 #{빈의 변수명}을 써줍니다.

 

 

 

 

제 MemberBean에 선언한 변수명은 위와 같습니다.

 

 

 

 

private static String nameSpace = "com.itwillbs.mappers.MemberMapper";

 

DAO를 구현한 클래스에서 private static으로 memberMapper.xml에서 지정해준 namespace를 변수에 저장합니다.

 

 

 

 

sqlSession.insert(nameSpace + ".insertMember", mb);

 

이후 insertMember 메서드 내부에서 위와 같은 코드에 MemberBean을 전달해줍니다.

네임스페이스.mapper 안의 insert ID, 전달할 값이 그 파라미터입니다.