유저 리포지토리 생성
package shop.mtcoding.blog.user;
import jakarta.persistence.EntityManager;
import jakarta.persistence.Query;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
@RequiredArgsConstructor
@Repository
public class UserRepository {
private final EntityManager em;
public User findByUsernameAndPassword(UserRequest.LoginDTO loginDTO) {
Query query = em.createQuery("select u from User u where u.username = :username and u.password = :password", User.class);
query.setParameter("username", loginDTO.getUsername());
query.setParameter("password", loginDTO.getPassword());
return (User) query.getSingleResult();
}
}
유저 리포지토리 테스트 작성
package shop.mtcoding.blog.user;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.context.annotation.Import;
@Import(UserRepository.class)
@DataJpaTest // db만 테스트 하면되니까 Datasource(connection pool), EntityManager 두개만 뛰운다.
public class userRepositoryTest {
@Autowired // 이 어노테이션을 써주면?
private UserRepository userRepository;
@Test
public void findByUsername_test(){
UserRequest.LoginDTO reqDTO = new UserRequest.LoginDTO();
reqDTO.setUsername("ssar");
reqDTO.setPassword("1234");
User user = userRepository.findByUsernameAndPassword(reqDTO);
}
}

잘된다
dto 생성
package shop.mtcoding.blog.user;
import lombok.Data;
public class UserRequest {
@Data
public static class LoginDTO {
private String username;
private String password;
}
}
컨트롤러 만들기
@PostMapping("/login")
public String login(UserRequest.LoginDTO requestDTO) {
User sessionUser = userRepository.findByUsernameAndPassword(requestDTO);
if (sessionUser == null) {
return "redirect:/login-form";
}
session.setAttribute("sessionUser", sessionUser);
return "redirect:/";
}
잘됨

머스테치 변경
{{^sessionUser}}
<li class="nav-item">
<a class="nav-link" href="/join-form">회원가입</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/login-form">로그인</a>
</li>
{{/sessionUser}}
{{#sessionUser}}
<li class="nav-item">
<a class="nav-link" href="/board/save-form">글쓰기</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/user/update-form">회원정보보기</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/logout">로그아웃</a>
</li>
{{/sessionUser}}