ㅇ 스프링 설정파일 (dispatcher-servlet.xml) iBatis ㅇ 스프링 설정파일 (dispatcher-servlet.xml) <?xml version="1.0" encoding="UTF-8"?> <!– 기본 설정 생략 --> <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="configLocation" value="classpath:sqlMapConfig.xml"/> <property name="dataSource" ref="dataSource"/> </bean> <bean id=“sqlMapClientTemplate" class="org.springframework.orm.ibatis.SqlMapClientTemplate"> <property name="sqlMapClient" ref="sqlMapClient"/> ㆍdispatcher-servlet.xml 에 iBatis를 사용하기 위한 설정 선언 (SqlMapClientFactory / SqlMapClientTemplate) ㆍiBatis 설정 XML 파일의 위치 지정
ㅇ iBatis 설정 파일 (sqlMapConfig.xml) <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd"> <sqlMapConfig> <settings useStatementNamespaces="false" /> <sqlMap resource="sql/Member.xml" /> <sqlMap resource="sql/DorReq.xml" /> <sqlMap resource="sql/DorPerMng.xml" /> <sqlMap resource="sql/DorHolMng.xml" /> </sqlMapConfig> 각 sqlMap 파일의 namespace 사용여부 각 sqlMap 파일의 위치 지정 ㆍiBatis 설정 XML ㆍ사용할 Query (SqlMap) 파일의 위치를 지정
ㅇ iBatis Sql Map 파일 (지정 파일명.xml) <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"> <sqlMap namespace=“member"> <typeAlias alias="MemberDto" type="com.dormitory.dto.MemberDto" /> <resultMap class="MemberDto" id="MemberResultMap"> ….. </resultMap> <select id="selectMember" resultClass="java.util.HashMap" parameterClass="java.util.HashMap"> // Query </select> <insert id=“insertMember” parameterClass=“java.util.HashMap”> </insert> </sqlMap> Result 또는 Parameter 로 사용될 클래스를 미리 지정 결과를 받을 클래스의 변수명에 매핑될 DB Column 지정 select / insert / update / delete 업무 성격에 따라 엘리먼트 및 SQL문 작성
ㅇ iBatis Sql Map 파일 (지정 파일명.xml) - typeAlias <typeAlias alias="MemberDto" type="com.dormitory.dto.MemberDto" /> ㆍSQL문 실행 결과 또는 입력 데이터(파라미터)로 사용할 클래스는 패키지를 포함하여 클래스를 선언하여야 하지만 typeAlias를 사용하면 패키지를 제외하고 단축 별명으로 사용 가능 ex) HashMap 사용시 resultClass=“java.util.HashMap” parameterClass=“java.util.HashMap” resultClass=“HashMap” parameterClass=“HashMap” MemberDto 사용시 resultClass=“com.dormitory.dto.MemberDto” parameterClass=“com.dormitory.dto.MemberDto” resultClass=“mDto” parameterClass=“mDto”
ㅇ iBatis Sql Map 파일 (지정 파일명.xml) - resultMap <resultMap class="MemberDto" id="MemberResultMap"> <result property="id" column=“ID" /> <result property="pw" column=“PW" /> <result property="name" column=“NAME" /> <result property=“acceptDate" column=“ACCEPT_DATE" /> </resultMap> ㆍselect (조회) 시 실제 DB 컬럼명으로 조회가 되지만 resultMap을 사용하면 조회된 컬럼명을 어떤 클래스의 어떤 변수명으로 저장할 지 지정 가능 DB 컬럼명 조회 컬럼명 저장 변수명 ID id PW pw NAME name ACCEPT_DATE acceptDate
ㅇ iBatis Sql Map 파일 (지정 파일명.xml) - select <select id="selectMember" resultClass="java.util.HashMap" parameterClass="java.util.HashMap"> SELECT ID, PW, NAME, GRADE FROM MEMBER WHERE 1 = 1 AND ID = #id# </select> ㆍ조회시 사용하는 태그 ㆍ조회 결과를 어떤 형태로 받을 것인지 resultClass 와 조회시 입력하는 데이터가 어떤 형태인지 parameterClass 를 지정해야 됨 ㆍ입력되는 데이터는 parameterClass에 저장된 key의 앞뒤로 # 기호를 사용 ex) Map<String, Object> paramMap = new HashMap<String, Object>(); paramMap(“inputId”, “seorab”); 위와 같이 입력된 클래스를 parameterClass로 지정한 경우 #inputId# 로 사용
ㅇ iBatis Sql Map 파일 (지정 파일명.xml) - insert <insert id=“insertMember" parameterClass="java.util.HashMap"> INSERT INTO MEMBER VALUES ( #id#, #pw#, #name#, #grade#, DATE_FORMAT(NOW(), '%Y%m%d%H%i%S') ) </select> ㆍ삽입시 사용하는 태그 ㆍ입력하는 데이터가 어떤 형태인지 parameterClass 를 지정해야 됨 ㆍ삽입된 결과는 항상 Integer 형태로 반환 resultClass 사용 불가
ㅇ iBatis Sql Map 파일 (지정 파일명.xml) - update <update id=“updateMember" parameterClass="java.util.HashMap"> 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> ㆍ수정시 사용하는 태그 ㆍ입력하는 데이터가 어떤 형태인지 parameterClass 를 지정해야 됨 ㆍ수정된 결과는 항상 Integer 형태로 반환 resultClass 사용 불가
ㅇ iBatis Sql Map 파일 (지정 파일명.xml) - delete <delete id=“deleteMember" parameterClass="java.util.HashMap"> DELETE FROM MEMBER WHERE ID = #id# </update> ㆍ삭제시 사용하는 태그 ㆍ입력하는 데이터가 어떤 형태인지 parameterClass 를 지정해야 됨 ㆍ삭제된 결과는 항상 Integer 형태로 반환 resultClass 사용 불가
ㅇ iBatis Sql Map 파일 (지정 파일명.xml) - Dynamic SQL <select id="selectMember" resultClass="java.util.HashMap" parameterClass="java.util.HashMap"> SELECT ID, PW, NAME, GRADE FROM MEMBER WHERE 1 = 1 <isNotEmpty property=“id” prepend=“and”> ID = #id# </isNotEmpty> </select> ㆍ조건문을 지정할때 사용하는 태그 ㆍselect / insert / update / delete 모든 태그 내부에 지정 가능 ㆍ문법 : http://www.tutorialspoint.com/ibatis/ 참조
ㅇ iBatis SqlMapClientTemplate 사용 (Dao 클래스) @Repository public class MemberDao { @Autowired private SqlMapClientTemplate sqlTemplate; /* 회원 가입 */ public boolean insertMember(MemberDto memberDto) { int result = sqlTemplate.update("insertMember", memberDto); return result > 0 ? true : false; } /* 로그인 */ public List<Map<String, Object>> selectMember(Map<String, Object> paramMap) { return sqlTemplate.queryForList("selectMember", paramMap); ㆍselect : queryForList / queryForMap / queryForObject 메소드 사용 ㆍinsert / update / delete : update 메소드 사용 각 상황에 맞게 insert / update / delete 메소드가 존재하고 있지만 update 메소드만 사용하여도 무관