mybatis 라이브러리를 사용해서 로그인 기능을 구현하였다.
- mybatis란? 데이터의 입력, 조회, 수정, 삭제(CRUD)를 보다 편하게 사용하기 위해 xml로된 Mapper 설정 파일을 통해서 JDBC를 구현한 영속성 프레임워크
로그인 기능을 만들기 전에~
1. 회원정보 DB 테이블 생성
2. memberVo, memberController, memberDao 생성
3. memberVo 객체, 기본 생성자, 매개변수 생성자, getter&setter을 만들어준다.
-> 라이브러리 Lombok을 이용하면 getter/setter 자동으로 추가해준다(@Data)
@Data
public class Member {
private int memberNo; // 회원번호
private String memberId; // 아이디
private String memberPw; // 비밀번호
private String memberName; // 회원이름
private String phone; // 전화번호 010-0000-0000
private String email; // 이메일
private String enrollDate; // 가입일 YYYY-MM-DD
private String filepath; // 파일경로
private int memberLevel; // 회원구분
private int gender; // 성별구분 1.남 2.여
private int age; // 나이구분 1.20대 2.30대 3.40대이상
private int profileStatus; // 프로필등록여부 1.등록 2.미등록
}
<서버 실행했을 때, 자동으로 실행하게 연결해 놓는 작업>
4-1. servlet-context.xml에서 <context:component-scan base-package="kr.or.member"/> 추가(스캔범위설정)
4-2. 접속하도록 만들어놨으니까 자동생성하도록 (아래 참고)
Controller에 @controller / service @Service / Dao @Repository 입력
그리고, Controller은 service 의존성 주입
@Autowired
private MemberService service;
service는 dao 의존성 주입
@Autowired
private MemberDao dao;
dao는 SqlSessionTemplate (라이브러리 사용했으니 bean방식을 사용해서 servlet-context.xml에 입력)
@Autowired
private SqlSessionTemplate sqlSession;
header.jsp
부트스트랩 모달창을 이용하여 로그인 창을 띄워주었다.
<!-- 로그인 modal -->
<div class="modal" id="modal1">
<div class="modal-dialog" role="document" style="margin-top:100px;">
<div class="modal-content">
<div class="modal-header">
<div class="brand_logo">
<a href="/">Oh-Mate!</a>
</div>
<h5 class="modal-title" style="padding-right:160px;">로그인</h5>
<button type="button" class="btn-close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true"></span>
</button>
</div>
<form action="/login.do" method="post" class="loginForm">
<div class="modal-body">
<div class="form-group">
<label for="memberId">아이디</label>
<input type="text" name="memberId" id="memberId"
class="form-control" placeholder="아이디입력">
</div><br>
<div class="form-group">
<label for="memberPw">비밀번호</label>
<input type="password" name="memberPw" id="memberPw"
class="form-control" placeholder="비밀번호입력">
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary" style="width:100%; line-height: normal;">로그인</button>
<a href="/searchIdFrm.do" class="searchMember">아이디 찾기</a>|
<a href="/searchPwFrm.do" class="searchMember">비밀번호 찾기</a>|
<a href="/joinFrm.do" class="searchJoin">가입하기</a>
</div>
</form>
</div>
</div>
</div>
memberController
service에서 받아온 member를 m에 저장
만약 m이 null이 아니라면 sessionAttribute에 m을 저장하고, alert창으로 "로그인 성공~!"이라는 메세지를 띄워주었다.
@Controller
public class MemberController {
@Autowired
private MemberService service;
//로그인
@RequestMapping(value="/login.do")
public String login(Member member, HttpSession session, Model model) {
Member m = service.selectOneMember(member);
if(m != null) {
session.setAttribute("m", m);
model.addAttribute("msg","로그인 성공~!");
}else {
model.addAttribute("msg","아이디 또는 비밀번호를 다시 확인해주세요.");
}
model.addAttribute("loc","/");
return "common/msg";
}
memberService
@Service
public class MemberService {
@Autowired
private MemberDao dao;
//로그인
public Member selectOneMember(Member member) {
return dao.selectOneMember(member);
}
memberDao
@Repository
public class MemberDao {
@Autowired
private SqlSessionTemplate sqlSession;
//로그인
public Member selectOneMember(Member member) {
return sqlSession.selectOne("member.selectOneMember", member);
}
memberSQL.xml
<?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="member">
<!-- 로그인 -->
<select id="selectOneMember" parameterType="m" resultType="m">
select
member_no as memberNo,
member_id as memberId,
member_pw as memberPw,
member_name as memberName,
phone,
email,
enroll_date as enrollDate,
member_filepath as filepath,
member_level as memberLevel,
gender,
age,
profile_status as profileStatus
from member where member_id=#{memberId} and member_pw=#{memberPw}
</select>
</mapper>
1) namespace : 이름공간 또는 네임스페이스는 개체를 구분할 수 있는 범위를 나타내는 말로 일반적으로 하나의 이름 공간에서는 하나의 이름이 단 하나의 개체만을 가리키게 된다.
-> namespace를 member로 정했기때문에 MemberDao에서 "member.selectOneMember" 으로 입력
(memberSQL.xml namespace:member / memberDao:member 일치해야함)
2) <typeAliases> : Mybatis에서 사용할 자료형의 별칭을 선언
parameterType="m" resultType="m"
mybatis-config.xml : kr.or.member.model.vo.Member 패키지 경로를 m이라는 별칭을 사용하였다.
* msg.jsp
#로그아웃
로그아웃은 정말 간단~~ MemberController에 작성만 해주면 끝!!
//로그아웃
@RequestMapping(value="/logout.do")
public String logout(HttpSession session) {
session.invalidate();
return "redirect:/";
}
'spring > 로그인&회원가입' 카테고리의 다른 글
[spring/mybatis] 회원가입 (0) | 2022.01.17 |
---|---|
[spring/mybatis] 아이디/비밀번호 찾기 (0) | 2021.12.03 |