개(발)린이
Spring(조회 - vo파라미터) 본문
오늘은 스프링을 이용해서 db에 있는 컬럼의 값을 조회해본다.
우선 컨트롤러이다.
package edu.kh.comm1.member.controller;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import edu.kh.comm1.member.model.service.MemberService;
import edu.kh.comm1.member.model.vo.Member;
@Controller
@RequestMapping("/member")
public class MemberController {
private Logger logger = LoggerFactory.getLogger(MemberController.class);
@Autowired
private MemberService service;
// ***** @ModelAttribute 어노테이션 사용하기 *****
@PostMapping("/login")// => @RequestMapping(value="/login", method = RequestMethod.POST)
public String login(@ModelAttribute Member inputMember) {
logger.info("로그인 기능 수행");
// 파라미터 잘 가져왔는지 확인해보기
logger.debug(inputMember.getMemberEmail());
logger.debug(inputMember.getMemberPw());
Member loginMember = service.login(inputMember);
return "redirect:/";
}
@GetMapping("/signUp")
public String signUp() {
return "member/signUp";
}
}
=> MemberController.java
index.jsp에 있는 login버튼을 클릭하면 memberEmail(이메일) 과 MemberPw(비밀번호)가 콘솔창에 나오는지
확인해보자
<form action="member/login" method="POST" name="login-form" onsubmit="return loginValidate()">
<!-- 아이디(이메일)/비밀번호/로그인버튼 영역 -->
<fieldset id="id-pw-area">
<section>
<input type="text" name="memberEmail" placeholder="아이디(이메일)">
<input type="password" name="memberPw" placeholder="비밀번호">
</section>
<section>
<!-- button의 type 기본값은 submit -->
<button>로그인</button>
</section>
</fieldset>
index.jsp 에 있는 로그인 부문의 코드이다.
input 태그 안에 name속성으로 memberEmail, memberPw 입력 후 로그인 버튼을 클릭하면 입력한 이메일에 해당되는
전화번호를 리턴하도록 만들어보자
package edu.kh.comm1.member.model.dao;
import org.mybatis.spring.SqlSessionTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import edu.kh.comm1.member.model.vo.Member;
@Repository
public class MemberDAO {
@Autowired
private SqlSessionTemplate sqlSession;
private Logger logger = LoggerFactory.getLogger(MemberDAO.class);
public Member login(Member inputMember) {
// 1행 조회(파라미터 VO, 반환 결과 또한 VO)
String memberTel = sqlSession.selectOne("memberMapper.test3", inputMember);
logger.debug(memberTel);
return null;
}
}
DAO클래스이다.
sqlSession을 만들어주고 selectOne을 이용 하나의 행을 조회한다
selectOne사용법은 selectOne("namespace값.id값", inputMember);
* inputMember 안에는 memberEmail, memberPw가 담겨있다. inputMember를 사용해준이유는 컨트롤러에서
inputMember에 파라미터를 담아왔기 때문
그리고 콘솔창에서 확인하기 위하여 logger.debug(memberTel)을 작성해주었다.
다음은 member-mapper.xml 파일에 <select>태그를 이용해 쿼리문을 작성해준다.
<select id="test3" parameterType="member" resultType="string">
SELECT MEMBER_TEL FROM MEMBER_S
WHERE MEMBER_EMAIL = #{memberEmail}
AND MEMBER_PW = #{memberPw}
AND SECESSION_FL = 'N'
</select>
참고로 DB에 저장한 값은
INSERT INTO MEMBER_S VALUES(
SEQ_MEMBER_NO_S.NEXTVAL,
'test01@naver.com',
'pass01!',
'테스트1',
'01012341234',
DEFAULT, DEFAULT, DEFAULT, DEFAULT
);
이러하다.
여기서 원래 파라미터의 타입은 member가 아닌 home.practice.comm.member.model.vo.Member이고
조회되는 타입은 string이다(mybatis 별칭으로 String이 아닌 소문자 string 사용)
하지만 test3의 파라미터 타입에 member라고 작정해준 이유는 member-mapping.xml 상단에 resultMap을
작성해주었기 때문이다.
다음은 resultMap 코드이다.
<resultMap type="member" id="member_rm">
<id property="memberNo" column="MEMBER_NO"/>
<result property="memberEmail" column="MEMBER_EMAIL"/>
<result property="memberPw" column="MEMBER_PW"/>
<result property="memberNickname" column="MEMBER_NICK"/>
<result property="memberTel" column="MEMBER_TEL"/>
<result property="memberAddress" column="MEMBER_ADDR"/>
<result property="profileImage" column="PROFILE_IMG"/>
<result property="enrollDate" column="ENROLL_DT"/>
<result property="secessionFlag" column="SECESSION_FL"/>
</resultMap>
resultMap태그는 SELECT 조회 결과(ResultSet)의 컬럼과 조회 결과를 옮겨 담을 VO의 필드명이 일치하지 않을때
이를 매핑시켜 조회결과가 필드에 세팅되게 하는 역할이다.
resultMap 속성으로는
1. type : 조회 결과를 담을 VO의 타입 또는 별칭
2. id : 만들어진 resultMap 태그를 지칭할 이름(식별명)
resultMap 내부 작성 태그로는
<id> : PK 역할의 컬럼 - 필드 연결
<result> : PK를 제외한 나머지 컬럼 - 필드 연결
이어서 resultMap 별칭을 작성해준다.
<typeAliases>
<typeAlias type="edu.kh.comm1.member.model.vo.Member" alias="member"/>
</typeAliases>
이 코드는 mybatis-config.xml에 <settings> 태그 밑에 작성해주면된다.
이후 서버를 실행해본다.
콘솔창에 memberEmail, memberPw 그리고 그에 해당하는 전화번호가 나온것을 볼 수 있다.
다음엔 DB에 저장되어 있는 이메일과 비밀번호를 입력하여 로그인을 클릭하면 로그인 정보를
session scope에 이동시키고 로그인화면으로 변경하는걸 만들어보겠다.
'Spring' 카테고리의 다른 글
Spring(로그인-2) (0) | 2023.04.26 |
---|---|
Spring(로그인 - 1) (0) | 2023.04.25 |
Spring(4) - 기초세팅(pom.xml) (0) | 2023.04.25 |
Spring(3) - 기초 세팅(web.xml) (0) | 2023.04.24 |
Spring(2) - 프로젝트 만들기 (0) | 2023.04.24 |