로그인 동작 전 준비
- MemberVO
- DB에 유저테이블에 유저 한명 이상
- DB연결할 dataSource, SqlSessionFactory, SqlSessionTemplate 객체Bean.
1. MemberDAO에 추상메서드로 로그인 메서드 만들어놓기
public void loginMember(String userid, String userpw); 이렇게 직접 적는것 보다 vo객체를 사용하는 것이 좋다.
이렇게 따로 정보를 가져와서 처리하는 방법은 뒤에 5번에 적어보겠다.
// 로그인 동작
public MemberVO loginMember(MemberVO vo);
2. 로그인 동작 sql문 생성
src/main/resource/mappers/memberMapper.xml
<select id="loginMember" resultType="com.myspring.domain.MemberVO">
select * from tbl_member where userid=#{userid} and userpw=#{userpw}
</select>
id="loginMamber" : 쿼리문의 이름을 loginMember라고 짓는다.
resultType 쿼리문의 결과를 com.myspring.domain밑의 MemberVO객체 형태로 반환해서 값을 넣는다.
#{ } : 이 형태는 조회와 동시에 가져와서 객체에 넣겠다는의미로, getter, setter역할을 동시에 한다.
*** <풀패키지 짧게 줄이는 방법>
리턴타입에 적은 com.myspring.domain.MemberVO 풀패키지를 짧게 줄일 수 있다.
src/main/resources에 mybatis-config.xml 파일을 열고(없으면 생성) configuration태그 안에 패키지명을 적는다.
다른곳에서 객체를 호출했을때 패키지명이 없으면 이 파일에 와서 찾게된다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<package name="com.myspring.domain"/>
</typeAliases>
</configuration>
이렇게 하면 다음과 같이 select의 리턴타입에 패키지명 없이 바로 객체명을 적을 수 있다.
<select id="loginMember" resultType="MemberVO">
select * from tbl_member where userid=#{userid} and userpw=#{userpw}
</select>
3. MemberDAOImpl 에 실제 메서드 구현.
1번에서 만들었던 추상메서드를 구현한다.
@Override
public MemberVO loginMember(MemberVO vo) {
System.out.println("DAO: loginMember(vo)실행");
MemberVO voResult = sqlSession.selectOne(NAMESPACE + ".loginMember", vo);
System.out.println("DAO: 로그인 완료!");
return voResult;
}
NAMESPACE로 mapper안에 있는 loginMember라는 아이디를 가진 대상이 호출, 그 호출할때 vo객체를 같이 넘긴다.
selectOne은 객체 하나를 가져온다는 의미다. (로그인 조회한 결과를 객체로 가져오기 위해)
voResult : 로그인 조회 결과를 MemberVO 객체에 남는다.
4. 실행 테스트
src/test/java 밑에 MemberDAOTest.java에 테스트 코드를 작성한다.
@Test
public void 로그인체크() {
System.out.println("Test: 로그인 체크 테스트");
MemberVO vo = new MemberVO();
vo.setUserid("admin");
vo.setUserpw("1234");
MemberVO voResult = dao.loginMember(vo);
if(voResult != null) {
System.out.println("Test: 회원이 있음");
} else {
System.out.println("Test: 비회원");
}
}
5. DAO함수에 값 따로따로 처리하기
위의 2번에서 vo객체로 한꺼번에 받는거 말고, id, pw 이렇게 따로 들어오게 할려면 어떻게 해야할까.
방법 1) 따로 들어온 값을 vo객체에 넣기
이 방법은 이미 위에 했으니 넘어가고
방법 2) Map 사용하기
@Override
public MemberVO loginMember(String userid, String userpw) {
Map<String, Object> paramMap = new HashMap<String, Object>();
// 여기에 사용할 키 값은 DB컬럼명과 같아야한다.
paramMap.put("userid", userid);
paramMap.put("userpw", userpw);
MemberVO voTemp = sqlSession.selectOne(NAMESPACE + ".loginMember", paramMap);
return voTemp;
}
테스트 실행
@Test
public void 로그인체크() {
System.out.println("Test: 로그인 체크 테스트");
MemberVO vo = new MemberVO();
MemberVO voResult = dao.loginMember("admin", "1234");
if(voResult != null) {
System.out.println("Test: 회원이 있음");
} else {
System.out.println("Test: 비회원");
}
}
'Back-end > Spring' 카테고리의 다른 글
Spring) 비즈니스 계층. 서비스(Service)란? (0) | 2022.05.02 |
---|---|
Spring) Contoller 리턴 타입에 따른 매핑 방법 (0) | 2022.04.27 |
Spring) 스프링 Controller 개념과 페이지 연결(주소매핑) (0) | 2022.04.27 |
Spring) DB연결 방법 3가지(직접, Bean객체, MyBatis) (0) | 2022.04.25 |
Spring) JUnit을 활용하여 테스트 코드 작성하기 (0) | 2022.04.23 |