1) public interface UserRepository extends JpaRepository<User, Integer>{
} 에 추가로 findByName(String name)으로 찾아보려고한다.
2) 근데 추가시 14428 에러가 발생한다 내용을 잘보니
No property name found for type User! 라고 뜬다
3) 이유를 알아보니 생성자 User.class의 Name이 아닌 userName으로 저장해서 User테이블에는
Name이 없다고 알려주는것이다.
4) Name=> userName으로 변경하니 문제없이 작동한다.
==========================================================
강력한 기능을 가진 JPA는 위에처럼 약속된 문법으로 함수를 만들면
알아서 쿼리문으로 변환해준다!
ex) 만약 Email="0000" & userName="0000"로 데이터를 찾는 쿼리문을 원한다면
List<User> findByEmailAndName(String email, String name);
라고 쳐주기만 하면 JPA가 알아서 쿼리문을 뽑아준다Select User from User u WHERE u.email= ?1 AND u.name =?2;
만약 내가 원하는 쿼리문을 적용하자면
위의 List<User> findByEmailAndName(String email, String name); 대신
1) 위치기반
@Query("SELECT u FROM User u WHERE u.name = ?1")
UserfindByName(String name);
2)이름기반
@Query("SELECT u FROM User u WHERE u.name = :userName")
User findByName(@Param("userName") String userName);
3) 네이티브 쿼리
@Query(value = "SELECT * FROM User WHERE name = ?0", nativeQuery = true)
User findByName(String name);
등 여러방법이 있다(물론 자동으로 만드는것도 잘 동작하니 문법만 잘 지켜주자)
근데 이렇게 찾은 데이터가 여러개인지(단건) 아니면 여러개인지(컬렉션)인지에 따라 받는 결과가 다르다
java.util.List
List<User> findByUserName(String userName); // 컬렉션
User findByEmail(String email); // 단건
그리고 Controller에서 위의 데이터를 어떻게 표시해줄건지도 알아야하는데 그건 나중에 쓰겠다
assert<---