1 minute read

★Mybatis 개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크이다. JDBC로 처리하는 코드나 매핑 등의 기능을 지원한다. xml과 어노테이션을 사용해 설정한다. pom.xml에 필요한 라이브러리를 설정한다. org.mybatis mybatis-spring 1.2.2

<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”>

※참고로 MyBatis에서는 DB종류에 따라 보통의 쿼리문이 잘 안먹히는 경우가 있어서 주의해야 한다. 예를 들어 위 select문의 like문은 오라클에서는 '%#{keyWord}%'로 충분했으나 MyBatis에서는 '%'||#{keyWord}||'%'로 표기해줘야 한다 select BOOKS_SEQ.nextval from dual insert into BOOKS values (#{id}, '${isbn}', '${name}', '${writer}', '${publisher}', ${price}, '${imageUrl}', '${detail}') ※insert문 실행 후, sequence로 설정된 값을 가져오고 싶거나 하는 경우가 있다. 그럴 때를 위해 mybatis에서는 selectKey태그를 지원한다. 위 처럼 하면 먼저 selectKey문을 실행 한 후 그 결과값을 "id"에 담아 insert문을 실행한다. selectKey문은 order값을 갖고있어서 insert문 실행전, 후에 적절한 처리를 할 수 있다. delete BOOKS where ID=${id} update MEMBER set DETAIL='${detail}' where ID=${id}

★위에 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/스프링 설정파일) classpath:config/sqlmap-member.xml

<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에 지정한 타입의 값을 차례대로 인자로 넣는다.

Categories:

Updated: