p659~665
select m.userid, userpw, username, useremail, enabled, regdate, updatedate auth
from tbl_member m left join tbl_member_auth auth on m.userid=auth.userid
where m.userid=auth.userid;
domain/AuthVO 생성
domain/MemberVO
조인으로 생성되는 결과를 저장하는 변수 생성
persistence/MemberDAOImpl 생성
root-context
namespace - context 체크
이제 memberDAO 객체 주입해서 사용 가능하다.
main/resource
SpringMember 파일에서 mabatis-config, mappers 파일 가져오기
root-context
이것도 springmember의 root-context에서 가져왔다
<!-- sqlSessionFactory : 디비연결, 데이터처리(SQL실행, Mybatis 설정) -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:/mybatis-config.xml" />
<property name="mapperLocations" value="classpath:/mappers/**/*Mapper.xml"/>
</bean>
<!-- sqlSessionFactory : 디비연결, 데이터처리(SQL실행, Mybatis 설정) -->
<!-- sqlSession : 디비연결, 데이터처리(SQL실행, Mybatis 설정), 자동 자원해체처리 -->
<!-- 기본적인 트랜잭션관리, 쓰레드 처리 안정성 높임 -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="close">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<!-- sqlSession : 디비연결, 데이터처리(SQL실행, Mybatis 설정), 자동 자원해체처리 -->
memberMapper
<![CDATA[]]> : 임의로 해석하지말고 있는 그대로 해석해라!
비교연산이 들어있는 쿼리에 쓰면 좋다
<!-- 테이블 데이터 매핑 -->
<resultMap type="com.itwillbs.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="useremail" column="useremail"/>
<result property="regdate" column="regdate"/>
<result property="updatedate" column="updatedate"/>
</resultMap>
<collection property="authList" resultMap="authMap"></collection>
<resultMap type="com.itwillbs.domain.AuthVO" id="authMap">
<result property="userid" column="userid"/>
<result property="auth" column="auth"/>
</resultMap>
<select id="getMemberJoin" resultMap="memberMap">
<![CDATA[
select m.userid, userpw, username, useremail, enabled, regdate, updatedate, auth
from tbl_member m left join tbl_member_auth auth on m.userid=auth.userid
where m.uerid=auth.userid;
]]>
</select>
빠르게 매핑 가능
• resultMap - 데이터베이스 결과데이터를 객체에 로드하는 방법을 정의하는 엘리먼트
ResultMap
- constructor - 인스턴스화되는 클래스의 생성자에 결과를 삽입하기 위해 사용됨
- idArg - ID 인자. ID 와 같은 결과는 전반적으로 성능을 향상시킨다.
- arg - 생성자에 삽입되는 일반적인 결과
- id – ID 결과. ID 와 같은 결과는 전반적으로 성능을 향상시킨다.
- result – 필드나 자바빈 프로퍼티에 삽입되는 일반적인 결과
- association – 복잡한 타입의 연관관계. 많은 결과는 타입으로 나타난다.
- 중첩된 결과 매핑 – resultMap 스스로의 연관관계
- collection – 복잡한 타입의 컬렉션
- 중첩된 결과 매핑 – resultMap 스스로의 연관관계
- discriminator – 사용할 resultMap 을 판단하기 위한 결과값을 사용
- case – 몇가지 값에 기초한 결과 매핑
- 중첩된 결과 매핑 – 이 경우 또한 결과매핑 자체이고 이러한 동일한 엘리먼트를 많이 포함하거나 외부 resultMap을 참조할 수 있다.
- case – 몇가지 값에 기초한 결과 매핑
가장 좋은 형태: 매번 ResultMap 을 추가해서 빌드한다. 이 경우 단위 테스트가 도움이 될 수 있다. 한번에 모든 resultMap 을 빌드하면 작업하기 어려울 것이다. 간단히 시작해서 단계별로 처리하는 것이 좋다.
DAOImpl
MemberTest
Mapper
DAOImpl
Test해보면,
DEBUG: com.itwillbs.controller.MemberTest - resultVO : MemberVO(userid=admin90, userpw=$2a$10$l5iSf8Mzj1Qya6YjtrDaOOu4.WgOYnyoAvoyz8zFCdCjjbWwhYu.K, username=관리자90, useremail=admin90@itwill.com, regdate=2023-12-27 12:48:32.0, updatedate=2023-12-27 12:48:32.0, enabled=null, authList=[AuthVO(userid=admin90, auth=ROLE_ADMIN)])
이렇게 리스트 형태로 정보 들고오기 가능
INFO : jdbc.resultsettable -
|--------|-------------------------------------------------------------|---------|-------------------|---------|----------------------|----------------------|-----------|
|userid |userpw |username |useremail |enabled |regdate |updatedate |auth |
|--------|-------------------------------------------------------------|---------|-------------------|---------|----------------------|----------------------|-----------|
|admin90 |$2a$10$l5iSf8Mzj1Qya6YjtrDaOOu4.WgOYnyoAvoyz8zFCdCjjbWwhYu.K |관리자90 |admin90@itwill.com |[unread] |2023-12-27 12:48:32.0 |2023-12-27 12:48:32.0 |ROLE_ADMIN |
|--------|-------------------------------------------------------------|---------|-------------------|---------|----------------------|----------------------|-----------|
p673
admin.jsp
해당 인증권한이 있는지 없는지 확인
로그인x, 로그인o에 따른 동작
all.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="<http://java.sun.com/jsp/jstl/core>" %>
<%@ taglib prefix="sec" uri="<http://www.springframework.org/security/tags>"%>
all.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1> all.jsp </h1>
<sec:authorize access="isAnonymous()">
<a href="/customLogin">로그인페이지</a>
</sec:authorize>
<sec:authorize access="isAuthenticated()">
<h2><a href="/logout">로그아웃</a></h2>
</sec:authorize>
</body>
</html>
별다른 제어문 쓰지 않아도 sec를 통해 로그인했는지 안했는지 판별 가능
→ 완성화된 페이지 구성
자동 로그인은 p676 참조
'spring · spring boot' 카테고리의 다른 글
[spring] SampleRest 맛보기 (1) | 2024.01.05 |
---|---|
[spring] REST API에 대해서 (1) | 2024.01.05 |
[spring] security ⑤ - 비밀번호 암호화, 회원정보에 따른 권한 설정 (1) | 2023.12.27 |
[spring] security ④ - 로그아웃 (0) | 2023.12.27 |
[spring] security ③ - 로그인 성공시 권한별로 페이지 이동 (1) | 2023.12.27 |