Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개(발)린이

Spring(조회 - vo파라미터) 본문

Spring

Spring(조회 - vo파라미터)

불도정 2023. 4. 25. 21:15

오늘은 스프링을 이용해서 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을 작성하고 로그인 클릭

콘솔창에 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