Lonely Snowman
 

[Spring] Mapper 인터페이스 사용해보기

mybatisAlias.xml (마이바티스설정파일)

typeAliases 에 package 의 name속성에 매퍼파일에서 반복적으로 사용될 패키지명을 정의해 주면 편리하다

	<typeAliases>
		<package name="kr.or.ddit.vo"/>
	</typeAliases>

아니면 type과 alias 속성으로 하나씩 다 지정해 주어도 된다

이렇게 하면 alias 속성의 값으로 대신 쓸 수 있다

	<typeAliases>
		<typeAlias type="kr.or.ddit.vo.LprodVO" alias="LprodVO" />
		<typeAlias type="kr.or.ddit.vo.EmployeeVO" alias="employeeVO" />
	</typeAliases>

 

lprod_SQL.xml (매퍼파일)

패키지명 생략하고 클래스명만 지정 가능하다

<!-- 	<update id="updatePost" parameterType="kr.or.ddit.vo.LprodVO"> -->
	<update id="updatePost" parameterType="LprodVO">

	</update>

 

mybatisAlias.xml (마이바티스설정파일)

"_"를 사용한 컬럼명을 사용 시 카멜케이스로 읽어준다
ex) 테이블 컬럼명이 member_id인 경우 jsp화면단에서 이 값을 사용 시 memberId로 사용

	<settings>
		<setting name="mapUnderscoreToCamelCase" value="true" />
	</settings>

 

 


 

 

LprodServiceImpl.java

다오 대신 매퍼인터페이스를 사용한다

@Service
public class LprodServiceImpl implements LprodService{

	@Autowired
	LprodMapper lprodMapper;

	@Override
	public int getTotal(Map<String, Object> map) {
		return this.lprodMapper.getTotal(map);
	}
	
}

 

LprodMapper.java (매퍼인터페이스)

매퍼패키지 안에 매퍼인터페이스를 두었고 매퍼패키지는 root-context.xml에 매퍼인터페이스 설정이 되어있다

public interface LprodMapper {
	
	public int getTotal(Map<String, Object> map);
	
}
root-context.xml
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="kr.or.ddit.**.mapper" />
	</bean>

 

lprod_SQL.xml (매퍼파일)

namespace는 패키지명과 매퍼파일까지 다 써준다

 

select절의 resultMap은 조인을 할 때 조인 결과에 대한 매핑을 정의해야 한다

lprod안에 product가 있는데 (중첩VO)

lprod의 프로퍼티들을 다 적어주고 product와는 1:N관계로 productList는 <collection>으로 적어준다

다시 product도 resultmap으로 프로퍼티들을 추가해 준다

1:1 관계라면 collection 대신 association 을 사용한다

 

<sql id="where">는 안에 where절의 조건 식을 적어두고 해당 where조건이 필요한 곳에 <include refid="where"></include> 요렇게 한 줄 적으면 된다

 

또 동적 sql 조립규칙을 정의할 수도 있는데 <if> 는 조건에 따라 안의 쿼리를 실행하거나 실행하지 않을 수 있다

<?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.LprodMapper">
	
	<sql id="where">
		AND (
	       LPROD_ID LIKE '%' || #{keyword} || '%'
	    OR LPROD_GU LIKE '%' || #{keyword} || '%'
	    OR LPROD_NM LIKE '%' || #{keyword} || '%')
	</sql>
	
	<select id="list" resultType="lprodVO" parameterType="map">
		SELECT LPROD_ID, LPROD_GU, LPROD_NM
		FROM LPROD
		WHERE  1 = 1
		<if test="keyword!=null and keyword!=''">
		AND (
		       LPROD_ID LIKE '%' || #{keyword} || '%'
		    OR LPROD_GU LIKE '%' || #{keyword} || '%'
		    OR LPROD_NM LIKE '%' || #{keyword} || '%')
		</if>
		ORDER BY LPROD_ID
	</select>
	
	<!-- LPROD : 1 -->
	<resultMap type="lprodVO" id="lprodMap">
		<result property="lprodId" column="LPROD_ID"/>
		<result property="lprodGu" column="LPROD_GU"/>
		<result property="lprodNm" column="LPROD_NM"/>
		<collection property="productVOList" resultMap="productMap"></collection>
	</resultMap>

	<!-- PRODUCT : N -->
	<resultMap type="productVO" id="productMap">
		<result property="productId" column="PRODUCT_ID"/>
		<result property="pname" column="PNAME"/>
		<result property="unitPrice" column="UNIT_PRICE"/>
		<result property="description" column="DESCRIPTION"/>
		<result property="manufacturer" column="MANUFACTURER"/>
		<result property="category" column="CATEGORY"/>
		<result property="unitsInStock" column="UNITS_IN_STOCK"/>
		<result property="condition" column="CONDITION"/>
		<result property="filename" column="FILENAME"/>
	</resultMap>
	
	<select id="detail" parameterType="lprodVO" resultMap="lprodMap">
		SELECT A.LPROD_ID, A.LPROD_GU, A.LPROD_NM,
		        B.PRODUCT_ID, B.PNAME, B.UNIT_PRICE, B.DESCRIPTION, B.MANUFACTURER,
		        B.CATEGORY, B.UNITS_IN_STOCK, B.CONDITION, B.FILENAME, B.QUANTITY
		FROM	LPROD A LEFT OUTER JOIN PRODUCT B
		ON (A.LPROD_GU = SUBSTR(B.PRODUCT_ID,1,4))
		WHERE  A.LPROD_GU = #{lprodGu}
	</select>

	<select id="getTotal" parameterType="hashMap" resultType="int">
		SELECT COUNT(*)
		FROM   LPROD
		WHERE  1 = 1
		<include refid="where"></include>
	</select>
	
</mapper>

 

 

 

 

 

! 이전 글 참고 !