Spring Security _ resultMap

dwanGim·2022년 7월 5일
0

spring_basic

목록 보기
29/41

스프링 시큐리티에서 DB 연동

CREATE TABLE member_tbl (
    userid varchar2(50) not null primary key,
    userpw varchar2(100) not null,
    username varchar2(100) not null,
    regdate date default sysdate,
    updatedate date default sysdate,
    enabled char(1) default '1');

CREATE TABLE member_auth(
    userid varchar2(50) not null,
    auth varchar2(50) not null,
    CONSTRAINT fk_member_auth FOREIGN KEY (userid) REFERENCES member_tbl(userid)
);

SELECT * FROM member_auth;
SELECT * FROM member_tbl;

commit;

커스텀 테이블들을 생성하고

mybatis를 통해 DB와 연동을 해보겠습니다.

resultMap

두 개의 커스텀 테이블을 생성했으니 VO를 생성해줍니다.

mapper 인터페이스를 생성하면 xml 파일을 만들어 sql 문을 처리해주어야 합니다.

<?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="com.ict.mapper.MemberMapper">

	<resultMap type="com.ict.domain.MemberVO" id="memberMap">
		 <id property="userId" column="userid"/>
		 <result property="userId" column="userid"/>
		 <result property="userPw" column="userpw"/>
		 <result property="userName" column="username"/>
		 <result property="regDate" column="regdate"/>
		 <result property="updateDate" column="updatedate"/>
		 <collection property="authList" resultMap="authMap">
		 </collection>
	</resultMap>

	<resultMap type="com.ict.domain.AuthVO" id="authMap">
		<result property="userId" column="userid"/>
		<result property="auth" column="auth"/>
	</resultMap>		
	
	<select id="read" resultMap="memberMap">
		SELECT
			m.userid, userpw, username, enabled, regdate, updatedate, a.auth
				FROM
			member_tbl m LEFT OUTER JOIN member_auth a on m.userid = a.userid
				WHERE
			m.userid = #{userId}
	</select>
		
</mapper>



맴버변수의 이름과 DB컬럼의 이름이 일치하지 않을 때 resultMap을 사용해주세요

JOIN 등으로 기존 VO와 구조가 다른 데이터가 리턴되는 경우

resultMap으로 묶습니다.

result의 property에는 VO의 변수명, column은 DB상의 컬럼명을 넣습니다.

이러면 VO의 변수명과 DB상의 컬럼명이 달라도 매칭이 됩니다.

List는 collection으로 받고 result는 단일 변수들을 받습니다.

LEFT JOIN으로 두 개의 테이블을 합한 데이터를

resultMap에 묶어서 가져왔습니다.

Test 코드를 작성해서 위의 mapper에 작성한 구문을 실행시켜보겠습니다.

DB와 연동이 잘 되어 있다면 스프링 시큐리티에서도 유효하게 작동할 것 입니다.

Test 하기

package com.ict.security;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.ict.domain.MemberVO;
import com.ict.mapper.MemberMapper;

import lombok.extern.log4j.Log4j;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({
	"file:src/main/webapp/WEB-INF/spring/root-context.xml",
})
@Log4j
public class MemberMapperTests {
	
	@Autowired
	private MemberMapper mapper;
	
	@Test
	public void testRead() {
		MemberVO vo = mapper.read("user25");
		
		log.info(vo);
		
		vo.getAuthList();
	}
	

}

src/test/java에 테스트 코드를 위와 같이 작성해서 확인해봅시다.

아주 좋습니다.

profile
배울 게 참 많네요.

0개의 댓글