MyBatis
description
Transcript of MyBatis
MyBatis
ㅇ 스프링 설정파일 (dispatcher-servlet.xml)<?xml version="1.0" encoding="UTF-8"?>
<!– 기본 설정 생략 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="/WEB-INF/MapperConfig.xml" /> </bean>
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg ref="sqlSessionFactory" /> </bean>
ㆍ dispatcher-servlet.xml 에 MyBatis 를 사용하기 위한 설정 선언 (SqlSessionFactoryBean / SqlSessionTemplate)
ㆍ MyBatis 설정 XML 파일의 위치 지정
MyBatis
ㅇ 스프링 설정파일 (dispatcher-servlet.xml)<?xml version="1.0" encoding="UTF-8"?>
<!– 기본 설정 생략 -->
<bean id="memberDao" class="org.mybatis.spring.mapper.MapperFactoryBean"> <property name="mapperInterface" value=“edu.spring.board.dao.MemberDao" /> <property name="sqlSessionFactory" ref="sqlSessionFactory" /> <property name="sqlSessionTemplate" ref="sqlSessionTemplate" /> </bean>ㆍ Spring Jdbc Template / iBatis Template 은 Dao 클래스에서 직접 Query 가 작성되어 있는 XML 파일을 호출하였지만
MyBatis 는 XML 이 Dao 클래스 ( 인터페이스 ) 를 구현하는 방식으로 사용 Dao 클래스 내부에 Query 를 호출하는 구문이 없음
ㆍ Dao 를 모두 Bean 으로 등록해야 하는 번거로움 .. ( 다른 구현 방식도 가능 )
MyBatis
ㅇ MyBatis 설정 파일 (MapperConfig.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>
<settings> <setting name="mapUnderscoreToCamelCase" value="true" /></settings>
<typeAliases> <typeAlias alias="String" type="java.lang.String" /></typeAliases>
<mappers> <mapper resource="edu/spring/board/dao/MemberDao.xml" /></mappers>
</configuration>
ㆍ MyBatis 설정 XML
ㆍ옵션 지정
ㆍ사용할 Query (SqlMap) 파일의 위치를 지정
MyBatis 실행시 적용될 옵션 선언
사용할 클래스 단축명으로 미리 지정
각 sqlMap 파일의 위치 지정
MyBatis
ㅇ MyBatis Sql Map 파일 ( 지정 파일명 .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=“edu.spring.board.dao.MemberDao">
<select id="selectMember" parameterType="java.util.Map" resultType="java.util.Map"> // Query </select>
<insert id="insertMember" parameterType="edu.spring.board.dao.MemberDto"> // Query </insert>
</mapper>
select / insert / update / delete업무 성격에 따라 엘리먼트 및 SQL 문 작성
iBatis 는 namespace 가 선택사항 이지만MyBatis 에서는 필수사항구현할 Dao 클래스를 지정
MyBatis
ㅇ MyBatis Sql Map 파일 ( 지정 파일명 .xml)
- select
<select id="selectMember" resultType="java.util.Map" parameterType="java.util.Map"> SELECT ID, PW, NAME, GRADE FROM MEMBER WHERE 1 = 1 AND ID = #{id}</select>
ㆍ조회시 사용하는 태그
ㆍ조회 결과를 어떤 형태로 받을 것인지 resultType 과 조회시 입력하는 데이터가 어떤 형태인지 parameterType 을 지정해야 됨
ㆍ입력되는 데이터는 parameterType 에 저장된 key 를 #{} 기호를 사용
ex) Map<String, Object> paramMap = new HashMap<String, Object>(); paramMap(“inputId”, “seorab”); 위와 같이 입력된 클래스를 parameterType 으로 지정한 경우 #{inputId} 로 사용
MyBatis
ㅇ MyBatis Sql Map 파일 ( 지정 파일명 .xml)
- insert
<insert id=“insertMember" parameterType="java.util.Map"> INSERT INTO MEMBER VALUES ( #{id}, #{pw}, #{name}, #{grade}, DATE_FORMAT(NOW(), '%Y%m%d%H%i%S') )</select>
ㆍ삽입시 사용하는 태그
ㆍ입력하는 데이터가 어떤 형태인지 parameterType 을 지정해야 됨
ㆍ삽입된 결과는 항상 Integer 형태로 반환 resultType 사용 불가
MyBatis
ㅇ MyBatis Sql Map 파일 ( 지정 파일명 .xml)
- update
<update id=“updateMember" parameterType="java.util.Map"> UPDATE MEMBER SET ID = #{id}, PW = #{pw}, NAME = #{name}, GRADE = #{grade} , ACCEPT_DATE = DATE_FORMAT(NOW(), '%Y%m%d%H%i%S') WHERE ID = #{id}</update>
ㆍ수정시 사용하는 태그
ㆍ입력하는 데이터가 어떤 형태인지 parameterType 을 지정해야 됨
ㆍ수정된 결과는 항상 Integer 형태로 반환 resultType 사용 불가
MyBatis
ㅇ MyBatis Sql Map 파일 ( 지정 파일명 .xml)
- delete
<delete id=“deleteMember" parameterType="java.util.Map"> DELETE FROM MEMBER WHERE ID = #{id}</update>
ㆍ삭제시 사용하는 태그
ㆍ입력하는 데이터가 어떤 형태인지 parameterType 을 지정해야 됨
ㆍ삭제된 결과는 항상 Integer 형태로 반환 resultType 사용 불가
MyBatis
ㅇ MyBatis Sql Map 파일 ( 지정 파일명 .xml)
- Dynamic SQL
<select id="selectMember" resultType="java.util.Map" parameterType="java.util.Map"> SELECT ID, PW, NAME, GRADE FROM MEMBER WHERE 1 = 1 <if test=“id != null and id == ‘’”> AND ID = #{id} </if></select>
ㆍ조건문을 지정할때 사용하는 태그
ㆍ select / insert / update / delete 모든 태그 내부에 지정 가능
ㆍ문법 : http://mybatis.github.io/mybatis-3/ko/ 참조
MyBatis
ㅇ MyBatis 사용
public interface MemberDao { public int insertMember(MemberDto memberDto); public List<Map<String, Object>> selectMember(Map<String, Object> paramMap);}
ㆍ Dao 인터페이스로 선언
ㆍ Service 에서 Dao 를 호출하면서 Sql Map XML 과 자동 매핑
- Dao 클래스
@Servicepublic class MemberService { @Autowired private MemberDao memberDao;
public boolean join(MemberDto memberDto) { int result = memberDao.insertMember(memberDto); return result > 0 ? true : false; } …. 생략 … .
- Service 클래스