Transcript 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>
MyBatis 실행시 적용될 옵션 선언
<typeAliases>
<typeAlias alias="String" type="java.lang.String" />
</typeAliases>
사용할 클래스 단축명으로 미리 지정
<mappers>
<mapper resource="edu/spring/board/dao/MemberDao.xml" />
</mappers>
</configuration>
ㆍMyBatis 설정 XML
ㆍ옵션 지정
ㆍ사용할 Query (SqlMap) 파일의 위치를 지정
각 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">
iBatis 는 namespace가 선택사항 이지만
MyBatis 에서는 필수사항
구현할 Dao 클래스를 지정
<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문 작성
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 사용
- Dao 클래스
public interface MemberDao {
public int insertMember(MemberDto memberDto);
public List<Map<String, Object>> selectMember(Map<String, Object> paramMap);
}
- Service 클래스
@Service
public class MemberService {
@Autowired
private MemberDao memberDao;
public boolean join(MemberDto memberDto) {
int result = memberDao.insertMember(memberDto);
return result > 0 ? true : false;
}
…. 생략 ….
ㆍDao 인터페이스로 선언
ㆍService 에서 Dao 를 호출하면서 Sql Map XML과 자동 매핑