Mapper 인터페이스
매핑파일에 기재된 SQL 호출하기 위한 인터페이스
매핑파일에 있는 SQL을 인터페이스 호출
환경설정
pom.xml
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.3</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.8.0</version>
</dependency>
<!-- mysql -->
<dependency>
<groupId>mysql</grou pId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
<!-- oracle
<dependency>
<groupId>com.oracle.ojdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.3.0.0</version>
</dependency> -->
run as → maven build
root-context.xml
자동으로 Mapper 인터페이스를 활요하는 객체 생성하게 됨
.**. ⇒ (중첩된) 패키지 포함 (패키지안에 패키지)
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="kr.or.ddit.**.mapper" />
</bean>
인터페이스 위한 패키지 생성
Mapper 인터페이스 생성
root-context.xml에서 자동으로 Mapper 인터페이스를 활요하는 객체 생성하게 되서 @Autowired 사용 가능
_SQL.xml
mapper namespace 설정
mapper.java 있는 경로 작성
id 설정
join쿼리문
SELECT A.COM_CODE, A.COM_CODE_NM
, B.COM_CODE_DETAIL, B.COM_CODE_DETAIL_NM
FROM COM_CODE A, COM_CODE_DETAIL B
WHERE A.COM_CODE = B.COM_CODE
AND A.COM_CODE = 'natn'
ORDER BY B.COM_CODE_DETAIL
;
xml에서 쿼리 join한 경우
https://lavender1122.tistory.com/198
jsp
<p>국적 :(String nationality)
<!-- 국적을 공통코드로 부터 가져와 보자 List<ComCodeDetailVO> comCodeDetailVOList-->
${comCodeVO}<br>
${comCodeVO.comCodeDetailVOList}
<select id="nationality" name="nationality">
<c:forEach var="comCodeDetailVO" items="${comCodeVO.comCodeDetailVOList}" varStatus="stat">
<option value="${comCodeDetailVO.comCodeDetail}">${comCodeDetailVO.comCodeDetailNm}</option>
</c:forEach>
</select>
</p>
원본
ComCodeVO.java
package kr.or.ddit.vo;
import java.util.List;
import lombok.Data;
@Data
public class ComCodeVO {
private String comCode;
private String comCodeNm;
//COM_CODE : COM_CODE_DETAIL = 1:N
private List<ComCodeDetailVO> comCodeDetailVOList;
}
ComCodeDetailVO.java
package kr.or.ddit.vo;
import lombok.Data;
@Data
public class ComCodeDetailVO {
private String comCodeDetail;
private String comCodeDetailNm;
private String comCode;
}
ComCodeMapper.java(interface)
package kr.or.ddit.mapper;
import kr.or.ddit.vo.ComCodeVO;
public interface ComCodeMapper {
//국적을 공통코드로부터 가져오기
ComCodeVO getComCode(String comCode);
}
mybatisAlias.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>
<!--
[마이바티스] 스프링에서 "_"를 사용한 컬럼명을 사용 시(BOOK 테이블의 BOOK_ID)
카멜케이스로 읽어줌(bookId)
ex) 테이블 컬러명이 member_id인 경우 jsp화면단에서 이 값을 사용 시 memberId로 사용
-->
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!-- 자주 사용하는 타입의 별칭을 세팅 -->
<typeAliases>
<typeAlias type="kr.or.ddit.vo.ComCodeVO" alias="comCodeVO"/>
<typeAlias type="kr.or.ddit.vo.ComCodeDetailVO" alias="comCodeDetailVO"/>
</typeAliases>
</configuration>
comCode_SQL.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="kr.or.ddit.mapper.ComCodeMapper">
<!--
//국적을 공통코드로부터 가져오기
ComCodeVO getComCode(String comCode);
-->
<!-- COM_CODE (1) 부모 -->
<resultMap type="comCodeVO" id="comCodeMap">
<result property="comCode" column="COM_CODE"/>
<result property="comCodeNm" column="COM_CODE_NM"/>
<collection property="comCodeDetailVOList" resultMap="comCodeDetailMap"></collection>
</resultMap>
<!-- COM_CODE_DETAIL(N) 자식 -->
<resultMap type="comCodeDetailVO" id="comCodeDetailMap">
<result property="comCodeDetail" column="COM_CODE_DETAIL"/>
<result property="comCodeDetailNm" column="COM_CODE_DETAIL_NM"/>
<result property="comCode" column="COM_CODE"/>
</resultMap>
<select id="getComCode" parameterType="String" resultMap="comCodeMap">
SELECT A.COM_CODE, A.COM_CODE_NM
, B.COM_CODE_DETAIL, B.COM_CODE_DETAIL_NM, B.COM_CODE
FROM COM_CODE A, COM_CODE_DETAIL B
WHERE A.COM_CODE = B.COM_CODE
AND A.COM_CODE = #{comCode}
ORDER BY B.COM_CODE_DETAIL
</select>
</mapper>