[Spring] MyBatis
★Mybatis
개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크이다.
JDBC로 처리하는 코드나 매핑 등의 기능을 지원한다. xml과 어노테이션을 사용해 설정한다.
pom.xml에 필요한 라이브러리를 설정한다.
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${org.springframework-version}</version>
</dependency>
★Mybatis 설정 파일(src/main/resources/config/mybatis-config.xml) Mybatis의 작동규칙을 정의한다. <?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”>
<!DOCTYPE 부분은 DTD라고 한다.
문서의 내용이 무엇인지 나타내는 부분이므로 필수임.
★Mybatis쿼리문 정의(src/main/resources/config/sqlmap-member.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”>
★위에 DTD도 역시 넣어줘야 하고, mapper태그안에 sql문을 정의한다. select, insert, delete, update등 태그를 사용한다. id : 정의한 sql문에 id를 붙인다. parameterType : input parameter의 타입을 지정하며 갯수는 상관없고, 기본자료형이라면 #{변수명} 커스텀클래스라면 ${멤버변수명}으로 사용한다. resultType : 리턴 타입을 정한다 typeAlias태그에서 정해준 타입의 이름을 여기서 사용하며, select문 이외에는 지정할 수 없다. typeAlias에 지정된 타입의 멤버변수와, 칼럼명을 매핑시켜서 DTO를 자동완성해준다. 변수명끼리 매핑은 무조건 setter를 사용하므로 이름규칙에 맞게 세팅해 줘야 하고, 디폴트 생성자가 필요하다.
★이어서 MyBatis를 DB와 연결지어 주기위해
SqlSessionFactoryBean(DataSource를 이용해 DB연결 세션을 생성,관리하는 클래스)와
SqlSessionTemplete(sql작업을 수행)를 bean객체로 등록해 줘야 한다.
(src/main/resources/스프링 설정파일)
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache">
<constructor-arg ref="sqlSessionFactory"/>
</bean>
★DB를 사용할 DAO클래스에서는 위에 작업한 sqlSessionTemplate를 사용해 쿼리하므로
DAO의 생성자에 넣어주는 작업을 한다.
★DAO에서 sqlSessionTemplete객체를 사용해 이런저런 쿼리를 사용할 수 있다. 메소드는 몇개 없으니 적당히 사용하면 되고 sqlmap-member.xml파일의 mapper에 정의한 쿼리문의 id값과 parameterType에 지정한 타입의 값을 차례대로 인자로 넣는다.