반응형
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);
}
반응형
'[Java] > [Spring Boot]' 카테고리의 다른 글
[Spring Boot] 프로젝트 구조 (package structure), DAO vs Repository (0) | 2024.06.27 |
---|---|
[Spring Boot] DB격리 수준 (Read Commit, Repeatable Read) (0) | 2022.12.03 |
[Spring Boot] 스프링부트 API 성공 및 실패에 대한 HTTP 코드 반환(HttpStatus.OK, HttpStatus.INTERNAL_SERVER_ERROR) (0) | 2022.12.03 |
[Spring Boot] 스프링 부트 Exception 처리 (@ControllerAdvice, @ExceptionHandler) (0) | 2022.11.03 |
[Spring Boot] 스프링부트 데이터 삭제하기 (Delete) (0) | 2022.11.03 |