반응형
package com.lsj.blog;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import com.lsj.blog.repository.UserRepository;
import com.lsj.dto.ResponseDto;

@RestController
public class DummyController {

	@Autowired // DI
	private UserRepository userRepository;
	
	@PostMapping("/api/login")
	public ResponseDto<Integer> login(@RequestBody BlogUser user, HttpSession session){
		
		BlogUser principal = loginService(user); //principal (접근주체)
		if(principal != null) session.setAttribute("principal", principal);
		
		System.out.println("principal : " + session.getAttribute("principal"));
		
		return new ResponseDto<Integer>(HttpStatus.OK.value(), 1);
		
	}
	
	@Transactional(readOnly = true) // Select 할 때 트랜잭션 시작, 서비스 종료시 트랜잭션 종료 (데이터 일관성)
	public BlogUser loginService(BlogUser user) {
		return userRepository.findByUsernameAndPassword(user.getUsername(), user.getPassword());
	}
}
package com.lsj.blog.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

import com.lsj.blog.BlogUser;


// extends JapRepository가 있는 경우 @Repository 생략가능
// JpaRepostiory는 다양한 기능을 가지고 있다. findAll (모든 레코드 select) 페이징해서 보내줄 수 있는 기능도 존재
public interface UserRepository extends JpaRepository<BlogUser, Integer>{ // BlogUser의 Repository이고 PK는 Integer이다.
	
	// JPA Naming 쿼리
	// SELECT * FROM bloguser WHERE username = ? AND password = ?;
	// SELECT * FROM ${리턴타입} WHERE username = ${첫번째 파라미터} AND password = ${두번째 파라미터};
	BlogUser findByUsernameAndPassword(String username, String password);
	
	// nativeQuery 방식 위와 동일하다
	@Query(value="SELECT * FROM bloguser WHERE username =1 ? AND password = 2?", nativeQuery = true)
	BlogUser login(String username, String password);
}
반응형