소개
게시글
질문&답변
2021.12.20
강사님 파일 업로드시 실제 DB에서 테이블을 만들려고 합니다.
@Entity @Getter @Setter public class Item { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) // strategy=GenerationType.IDENTITY 시퀀스를 자기만의 시퀀스를 사용한다는 말. @Column(name = "item_id") private Long id; private String itemName; @JsonIgnore @OneToMany(mappedBy = "item") private List images = new ArrayList(); @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) // OneToOne은 접근을 많이 하는 쪽에 FK를 설정한다. @JoinColumn(name = "file_id") // FK를 delivery_id로 설정. private File file; /** * * SELECT * FROM item i JOIN `file` f ON i.file_id = f.file_id; SELECT * FROM item i JOIN image img ON i.item_id = img.item_id; */ } @Entity @Getter @Setter public class Image extends UploadFile { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name = "image_id") private Long id; private String uploadFileName; private String storeFileName; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "item_id") private Item item; public Image(String uploadFileName, String storeFileName) { super(uploadFileName, storeFileName); } } @Entity @Getter @Setter public class File extends UploadFile { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name = "file_id") private Long id; private String uploadFileName; private String storeFileName; @JsonIgnore // 양방향 연관관계에서는 한쪽을 @JsonIgnore 꼭 달아줘야 한다. @OneToOne(mappedBy = "file", fetch = FetchType.LAZY) private Item item; public File(String uploadFileName, String storeFileName) { super(uploadFileName, storeFileName); } } 이렇게 3개로 나눴는데요 하이디sql에서 조인해서 가지고 오게하면 잘 가지고 옵니다. 근데 여기서 궁금한점이 Image나 File이나 둘다 UploadFile 클래스를 상속 받았는데요. public File(String uploadFileName, String storeFileName) { super(uploadFileName, storeFileName); } 이렇게 적어주면 상위 부모클래스로 공통으로 사용할 수 있게 하는건가요? 뭔가 이상하긴 한데 ... ㅠㅠ
- 1
- 2
- 519
질문&답변
2021.12.02
redirect시 @RequestParam이 동작을 안합니다. ㅠㅠ
서포터즈님!!!! 원인을 찾았습니다. 갑자기 오늘 집에서 나오다가 문뜩 타임리프 문법 배웠던게 생각나서 코드를보닌까 *loginForm.html 전체 오류 메시지 로그인 ID 계정 아이디 오류 메시지 비밀번호 계정 비밀번호 오류 메시지 로그인 onclick="location.href='items.html'" th:onclick="|location.href='@{/}'|" type="button">취소 -> 이렇게 작성했었는데요 저번에 폼쪽 배울때 폼에 있는 th:action 쪽 url을 비워두면 현재 url로 간다는 말이 문뜩 생각이 났어요!! 전체 오류 메시지 로그인 ID 계정 아이디 오류 메시지 비밀번호 계정 비밀번호 오류 메시지 로그인 onclick="location.href='items.html'" th:onclick="|location.href='@{/}'|" type="button">취소 -> 이런식으로 비워두면 현재 url 경로로 간다는 말이 문뜩 생각나서 고치고 돌려보닌까 잘 동작합니다. 저 타임리프 용법이 이럴때 써먹는거였군요.... 아무 생각 없이 보기 좋으라고 다시 고쳐서 적어줬던 기억이 납니다.... 이렇게 설계한 이유가 다 있었군요......................
- 2
- 3
- 622
질문&답변
2021.12.02
redirect시 @RequestParam이 동작을 안합니다. ㅠㅠ
서포터즈님 저렇게 하면 동작은 되나 @RequestParam으로 값이 전달이 안되는 문제는 해결이 안됩니다. ㅠㅠ
- 2
- 3
- 622
고민있어요
2021.11.30 16:53
혹시나 java8문법 사용 안하시는 분을 위해 글 남깁니다.
- 0
- 1
- 230
질문&답변
2021.11.29
강사님 질문입니다!!!
*LoginController @PostMapping("/login") public String login(@Valid @ModelAttribute("loginForm") LoginForm form, BindingResult bindingResult, HttpServletResponse response) { if(bindingResult.hasErrors()) { return "login/loginForm"; } Optional member = mm.findByLoginId(form.getLoginId()); if(!member.isPresent()) { bindingResult.reject("loginFail", "존재하지 않는 아이디 입니다."); return "login/loginForm"; } Member loginMember = loginService.login(form.getLoginId(), form.getPassword()); if(loginMember == null) { bindingResult.reject("loginFail", "비밀번호가 맞지 않습니다."); return "login/loginForm"; } // 1. 로그인 성공 처리(쿠키 생성) : 쿠키 생성시 시간 정보를 설정하지 않으면 세션 쿠키로서 브라우저 종료시 모두 없어진다. Cookie cookie = new Cookie("memberId", String.valueOf(loginMember.getId())); response.addCookie(cookie); return "redirect:/"; } *LoginService public Member login(String loginId, String password) { // 2-1. 첫번째 방법 Optional findMember = mm.findByLoginId(loginId); Member member = new Member(); if(findMember.isPresent()) { member = findMember.get(); // 2-4. 주의 : Optional에서 값이 null인 객체에 get()을 호출하면 에러가 발생한다. } else { return null; } if(member.getPassword().equals(password)) { return member; } else { return null; } /* 2-2. 두번째 방법(java8) Optional byLoginId = mm.findByLoginId(loginId); return byLoginId.filter(m -> m.getPassword().equals(password)) .orElse(null); */ /* 2-3. 세번째 방법(java8) - 간소화 return mm.findByLoginId(loginId).filter(m -> m.getPassword().equals(password)).orElse(null); */ } 이렇게 해결했습니다. 아이디가 DB에 없는 경우는 아이디가 없다고 뜨고 비밀번호가 틀린경우는 비밀번호가 틀리다고 하게끔 처리해줬는데요 이렇게 하는 방법도 맞는건가요? 의문이....
- 1
- 3
- 397