=> xml 설정 

 

 

context-datasource.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"> -->
<!-- Document root element "beans", must match DOCTYPE root "mapper" => mapper용 bean 에 써줘야할 root 문을 썼다는 의미 config 용으로 바꿔야함 -->

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:jdbc="http://www.springframework.org/schema/jdbc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/jdbc  http://www.springframework.org/schema/jdbc/spring-jdbc-4.0.xsd">
	
    
    <!-- Mysql (POM에서 commons-dbcp, mysql-connector-java 관련 라이브러리 설정 ) 
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://127.0.0.1:3306/example" />
        <property name="username" value="user"/>
        <property name="password" value="password"/>
    </bean>
    -->
    
    <!-- oracle (POM에서 commons-dbcp, ojdbc(라이센스 사항으로 별도로 배포되지 않음) 관련 라이브러리 설정)
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
        <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:example" />
        <property name="username" value="user"/>
        <property name="password" value="password"/>
    </bean>
    -->
    
    <!-- cubrid -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="cubrid.jdbc.driver.CUBRIDDriver"/>
        <property name="url" value="jdbc:cubrid:DB_IP:PORT:DB_NAME:::?charset=utf8" />
        <property name="username" value="USERNAME"/>
        <property name="password" value="USERPASSWORD"/>
    </bean>
    
</beans>

DB에 접근할 수 있는 connection 마련

context-datasource.xml은 별도의 설정 파일입니다. web.xml 부분에

<context-param> 
	<param-name>contextConfigLocation</param-name> 
	<param-value>classpath*:spring/context-*.xml</param-value> 
</context-param>

이런식으로 외부에 설정 파일을 사용하겠다는 명시가 있으면 사용이 가능한 외부의 설정파일입니다.

 

 

context-sqlMap.xml 

 

(원래 context-sqlMap.xml는 ibatis에 사용. context-mapper.xml 에 설정해줘야하는데 기본 설정이 context-mapper대신 sqlMap을 바라보고 있었고, 그대로 사용했음)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">

	<!-- SqlSession setup for MyBatis Database Layer -->
	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="configLocation" value="classpath:/egovframework/sqlmap/example/sql-mapper-config.xml" />
		<property name="mapperLocations" value="classpath:/egovframework/sqlmap/example/mappers/*.xml" />
	</bean>
    <!-- sql-mapper-config.xml 의 설정을 참고해서 mappers/*.xml 위치의 매퍼를 실행해달라는 말. 이때 사용할 DB 연결은 dataSource(context-datasource.xml 에서 사용한 것)
    

	<!-- MapperConfigurer setup for MyBatis Database Layer with @Mapper("deptMapper") in DeptMapper Interface -->
 	<bean class="egovframework.rte.psl.dataaccess.mapper.MapperConfigurer">
		<property name="basePackage" value="egovframework.example.sample.service.impl" />
	</bean>
    
</beans>

context-sqlMap.xml 도 마찬가지로 외부 설정파일입니다. 보시면 sqlSession을 만드는 부분인데, dataSource는 뭘 사용하고 설정파일은 뭘사용할지 적는 부분이 보입니다.

 

sql-mapper-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- 이 부분이 mybatis config 파일이라는 사실을 알려주는 부분이므로 반드시 적는다 -->
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
    <typeAliases>
		<typeAlias alias="egovMap" type="egovframework.rte.psl.dataaccess.util.EgovMap"/>
		<typeAlias alias="searchVO" type="egovframework.example.sample.service.SampleDefaultVO"/>
		<typeAlias alias="sampleVO" type="egovframework.example.sample.service.SampleVO"/>
		<typeAlias alias="UserVO" type="egovframework.example.sample.service.UserVO"/>
		<typeAlias alias="BoardVO" type="egovframework.example.sample.service.BoardVO"/>
		<typeAlias alias="Criteria" type="egovframework.example.sample.service.Criteria"/>
		<typeAlias alias="FileVO" type="egovframework.example.sample.service.FileVO"/>
    </typeAliases>
</configuration>

VO를 특정이름으로 사용 가능하도록 별칭을 붙여주는 부분입니다. 

 

 

*Mapper.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">
<!-- <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd"> sqlMap을 사용하려면 이 버전 -->

<!-- boardMapper 라는 이름으로 bean에 등록된다. 경로와 이름이 중요. -->
<mapper namespace="egovframework.example.sample.service.impl.BoardMapper">
    
    <!-- 컬럼을 특정 이름으로 binding 시키고 싶을 때 사용  -->
    <!--
    <resultMap type="egovframework.example.sample.service.BoardVO" id="boardVO">
    	<result 	property="seq"		column="SEQ" 		/>          	
    	<result  	property="userId"	column="USER_ID"	/>       	
    	<result 	property="title"	column="TITLE" 		/>        	
    	<result  	property="content"	column="CONTENT"	/>      	
    	<result 	property="regDt"	column="REG_DT" 	/>
    	<collection property="fileList" resultMap="fileVO"/>        	
    </resultMap>  
    -->
    
    <select id="selectDupl" resultType="int" parameterType="UserVO">
		SELECT 
			COUNT(*) AS duplCount
		FROM 
			test_user tu
		WHERE 
			tu.user_id = #{userId}
    </select>

</mapper>

매퍼파일의 일부입니다.

 

BoardMapper.java
package egovframework.example.sample.service.impl;

import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.springframework.stereotype.Repository;

import egovframework.example.sample.service.BoardVO;
import egovframework.example.sample.service.Criteria;
import egovframework.example.sample.service.FileVO;
import egovframework.example.sample.service.SearchCriteria;
import egovframework.example.sample.service.UserVO;
import egovframework.example.util.CommonUtil;
import egovframework.rte.psl.dataaccess.EgovAbstractMapper;

@Repository("boardMapper")
public class BoardMapperImpl extends EgovAbstractMapper {	
	/*
     * @Repository("boardMapper")
	 * EgovAbstractMapper 추상클래스를 상속한 Mapper
	 * 스프링 DI가 생성해준 boardMapper id를 사용
     */

	public int selectDupl(UserVO user) {
		// TODO Auto-generated method stub
		return selectOne("selectDupl", user);
	}
}

위 파일은 이름은 매퍼이지만 사실상 스프링의 dao의 역할을 하고 있습니다.

한편 EgovAbstractMapper 을 상속하는 부분은 필수 입니다. 전자정부 프레임워크에서 자동으로 객체화 시킨 매퍼는 boardMapper 이란 이름으로 객체화 되어있고, 해당 객체를 위 클래스에 넣어줍니다.  

 

 

dao 대신 interface를 이용한 방법도 있습니다. 위치는 자유롭게 만들어도 되나, 잘 모르시겠으면 일단은 서비스 옆에 만들어주세요!

package egovframework.example.sample.service.impl;

import egovframework.example.sample.service.UserVO;

@Mapper("boardMapper")
public interface BoardMapper {
    /*
    이렇게 명시만 해주고 BoardService에서 
    @Resource(name = "boardMapper")
    private BoardMapper boardMapper;
    이런식으로 사용하면 됩니다.
    */
	public int selectDupl(UserVO user) throws Exception;
}