120 likes | 677 Views
MyBatis. ㅇ 스프링 설정파일 (dispatcher-servlet.xml). <?xml version="1.0" encoding="UTF-8"?> <!– 기본 설정 생략 --> < bean id=" sqlSessionFactory " class=" org.mybatis.spring.SqlSessionFactoryBean "> < property name=" dataSource " ref=" dataSource " />
E N D
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실행시 적용될 옵션 선언 사용할 클래스 단축명으로 미리 지정 각 sqlMap파일의 위치 지정 ㆍMyBatis 설정 XML ㆍ옵션 지정 ㆍ사용할Query(SqlMap) 파일의 위치를 지정
MyBatis ㅇMyBatisSql 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> iBatis는 namespace가 선택사항 이지만 MyBatis에서는 필수사항 구현할 Dao 클래스를 지정 select / insert / update / delete 업무 성격에 따라 엘리먼트 및 SQL문 작성
MyBatis ㅇMyBatisSql 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 ㅇMyBatisSql 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 ㅇMyBatisSql 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 ㅇMyBatisSql Map 파일 (지정 파일명.xml) - delete <delete id=“deleteMember" parameterType="java.util.Map"> DELETE FROM MEMBER WHERE ID = #{id} </update> ㆍ삭제시 사용하는 태그 ㆍ입력하는 데이터가 어떤 형태인지 parameterType을 지정해야 됨 ㆍ삭제된 결과는 항상 Integer 형태로 반환 resultType사용 불가
MyBatis ㅇMyBatisSql 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 interfaceMemberDao { public intinsertMember(MemberDtomemberDto); public List<Map<String, Object>> selectMember(Map<String, Object> paramMap); } - Service 클래스 @Service public class MemberService { @Autowired private MemberDaomemberDao; public boolean join(MemberDtomemberDto) { intresult = memberDao.insertMember(memberDto); return result > 0 ? true : false; } …. 생략 …. ㆍDao 인터페이스로 선언 ㆍService 에서 Dao를 호출하면서 Sql Map XML과 자동 매핑