오류페이지 설정
application.properties 에 오류설정을 위한 설정 추가
저번에 안됐었던 부분
맨위의 web부터 빼줘야 한단다.
그러면서 aug31_JPA 프로젝트 대거수정
Service 를 다시 사용해줬다
Member 쪽 코드 먼저 살펴보자
Lombok 라이브러리에서 제공되는 어노테이션
@NoArgsConstructor : 클래스의 기본생성자 자동생성, JPA에서 Entity 클래스를 작성할 때 많이 사용
@Builder : 주로 불변(immutable) 객체를 생성할 때 유용
@Data
@Column(nullable = false, name="mpw") => 공백이면 안된다. (Not null)
private String mpw;
날짜는 String -- > LocalDateTime (년월일시분초 )으로 바꿔준다.
LocalDate는 년월일
JBoard도 살펴보면
@LastModifiedDate => 수정된다면 마지막 수정시간으로 바꿔준다.
Member를 객체로 저장하는데 여기에서 데이터를 전부 가져올거고
@JoinColumn(name="mno") => Member객체의 mno로 조인을 걸어준다.
(fetch = FetchType.LAZY)
fetch : 데이터를 검색할 때 로딩 전략
FetchType.LAZY : 지연 로딩, 멤버(Member) 객체가 실제로 사용될 때까지 데이터베이스에서 데이터를 로드하지 않고, 필요할 때 로드하도록 지정해준다. => 성능 최적화
Board부분을 살펴보면
member를 객체로 가져와서 JBoard에 넣어주고, JBoard를 save로 서비스에 저장해준거다.
findByMid ()로 "pororo"를 기준으로 일치하는 아이디를 찾으라는 뜻
누가 글썼는지 찾아내서 JBoard에 저장하는 과정이다.
윗부분은 필요는 없다.
서비스에서는 findByMid로 매개변수의 아이디를 찾아내서 Member 객체에 넣는다.
Repository 에서는 실제 명령을 내려야하는데 쿼리문을 작성은 필요없다. JPA가 알아서 해줄거니까.
근데 @Query 사용해서 쿼리문을 사용할 순 있다.
findByMid () 로
테스트 해보기 위해서 하이디에 JMember에 pororo 아이디를 추가해준다.
게시판 페이지에서 글쓰기 해보면
콘솔창에서 잘 잡아서 insert 한건가보다.
일단 글이 써졌다.
어제 만들어줬던 jboard를 삭제하고 재기동하면 다시 jboard가 생성된다.
application.properties에서 방언설정할때 update로 해줘서 기존에 있는걸 바꾸지 않고 새로운것만 추가해서
update 는 기존의 것을 말그대로 업데이트 하는건데 어제는 mname으로 글을 썼었다
그런데 mno로 바뀌면서 충돌이 일어난듯 하다.
MemberController에 있는거 다 지우고 다시 해보자
member객체를 매개변수로 넣어준다.
db의 컬럼명은 mid, mpw지만
login.html에서는 각각 입력값의 name을 id, pw로 설정해줬으니 변수명 똑같이 맞줘준다.
오류난다 그냥 html을 수정하자
컬럼명과 변수명이 일치하면 @column에서 name을 지정해줄 필요는 없다 지워줬다.
로그인창에서 입력해보면
내가 입력한 값을 잘 잡아온다.
이제 입력한 값에서 id을 뽑아내보자
서비스랑 repository에도 생성
안되는데 다시 member에서 mid만 뽑아서 가지고 가보자.
이것도 오류가 나는데 이유는 BoardController에
다시 아래처럼 해준다.
그러면 서비스랑 repository에는 이미 있으니 이걸 사용해준다.
로그인 페이지에서 값을 넣어서 입력해보면
잘 나온다.
이제 pw도 같이 가져와보자
result 잘 출력되고
name도 뽑아서 출력해봤는데 잘 나온다.
? 로 뜨는 이유는 설정이 쿼리문만 찍힐 수 있도록 설정이 되어 있어서 그렇다.
값도 나오도록 하려면 추가설정을 해주면 된다.
파라미터를 두개 가져오도록 메소드를 해줬는데 member통으로 넣어주면 안되나보다.
이제 member의 count를 가져와서 찍어보자.
서비스에서
쿼리문이 없으니 아래의 에러가 난다
JPA가 알아서 쿼리문을 날려주지만 우리가 써줄수도 있다. (JSQL?)
@Query(value = "SELECT count(*) FROM jmember j WHERE j.mid=?1 AND j.mpw=?2", nativeQuery = true)
int count(String mid, String mpw);
이렇게 받아온 count를 int타입의 count변수에 받아준거다.
작성한 쿼리가 Native SQL 쿼리인지 아니면 JPQL(Java Persistence Query Language) 쿼리인지를 지정하는 역할
로그인 페이지에서 있는 계정으로 로그인 해보면
내가 입력한 id와 pw 가 일치하는 정보가 1개 있다고 count가 잘 뜬다.
이제 이 count값으로 조건문 걸어준다.
그런데 index가 없으니 만들어준다.
그리고 index컨트롤러도 없다 만든다.
그럼 이제 로그인 성공했을때 count가 1이되면서
index 페이지로 이동한다.
문구도 뜨게 해줬다.
메뉴바에 조건문으로 mname이 null일때와 아닐때 각각 로그인 로그아웃이 뜨도록 설정해줬다.
BoardController 가서 write에도 로그인했을때만 글쓰기 가능하도록 조건문 걸어줬다.
로그인 하고 글을 써보면 잘 써진다.
이제 detai 불러온단다.
일단 title을 눌렀을때 이동하도록 onclick 기능 넣고 주소설정해준다. (@로 해주려면 파이프도 넣어준다.)
컨트롤러에 bno를 가지고 로직 만들어준다.
서비스에서 findByBno() 메소드를 실행한다
=> 요런 명령들은 repository 용으로 사용하는 메소드여서 컨트롤러에서의 메소드명은 detail() 로 해줘도 된다.
편리함을 위해 그냥 하나로 통일해주는거다. 이것도 그냥 통일해주자
메소드명 통일
html파일에서 글을 띄워보니 잘 뜬다.
'국비과정 > Spring' 카테고리의 다른 글
20230904 _[66일차]_01. 파이썬 맛보기 (0) | 2023.09.05 |
---|---|
20230831 _[64일차]_01. 웹크롤링 & thymeleaf 마무리 & H2 Database & JPA (0) | 2023.09.01 |
20230830 _[63일차]_01. Swagger & thymeleaf로 board, login페이지 (0) | 2023.08.30 |
20230829 _[62일차]_01. 공공데이터 API 활용 & Thymeleaf 시작 (0) | 2023.08.29 |
20230828 _[61일차]_01. admin-게시글관리 페이지 (0) | 2023.08.28 |