유저 리포지토리 생성

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);
    }
}

Untitled

잘된다

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:/";
}

잘됨

Untitled

머스테치 변경

{{^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}}