Posts
Q&A
๊ฐ์ฌ๋ ํ์ผ ์ ๋ก๋์ ์ค์ 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
- 592
Q&A
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
- 714
Q&A
redirect์ @RequestParam์ด ๋์์ ์ํฉ๋๋ค. ใ ใ
์ํฌํฐ์ฆ๋ ์ ๋ ๊ฒ ํ๋ฉด ๋์์ ๋๋ @RequestParam์ผ๋ก ๊ฐ์ด ์ ๋ฌ์ด ์๋๋ ๋ฌธ์ ๋ ํด๊ฒฐ์ด ์๋ฉ๋๋ค. ใ ใ
- 2
- 3
- 714
Q&A
๊ฐ์ฌ๋ ์ง๋ฌธ์ ๋๋ค!!!
*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
- 476
Q&A
๊ฐ์ฌ๋ ์ง๋ฌธ์ ๋๋ค!!!
Optional findMember = mm.findByLoginId(loginId); Member member = new Member(); if(findMember.isPresent()) { member = findMember.get(); } else { return null; } if(member.getPassword().equals(password)) { return member; } else { return null; } -> ์ด๋ฐ์์ผ๋ก ํด๊ฒฐํ๊ธด ํ๋๋ฐ ์ด๊ฒ ๋ง๋ ๋ฐฉ๋ฒ์ธ๊ฐ์?
- 1
- 3
- 476
Q&A
๊ฐ์ฌ๋ ์๋ ํ์ธ์ ์ง๋ฌธ์ด ์์ต๋๋ค!!
๊ฐ์ฌ๋ ๊ฐ์ฌํฉ๋๋ค. DB์ ์ ์ฅํ ๋ List์ด ๋ค์ด ์๋ item ๊ฐ์ฒด๋ฅผ ์ฐ๊ณ itemDto ๊ฐ์ฒด๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด์ select ํด์ฌ๋ Dto๊ฐ์ฒด๋ฅผ ์จ์ regions์ ํ์ ์ String์ผ๋ก ๋ฐ๊ฟ์ฃผ์๊ณ 1. ์ ์ฅํ ๋๋ insert into item(item_name, item_price, item_quantity, item_open, regions) values( #{itemName}, #{price}, #{quantity}, #{open}, concat_ws(',', #{region}) ) -> ์ด๋ฐ์์ผ๋ก ,๋ก List์ DB์ ์ ์ฅํ๊ตฌ์ 2.select ํ ๋ select item_id as id, item_name as itemName, item_price as price, item_quantity as quantity, item_open as open, regions from item where item_id = #{id} -> ๋จ์ํ String์ผ๋ก ,์ด ํฌํจ๋ ๋ฌธ์์ด๋ก ๋ฐ์๋ค์ 3. ์ปจํธ๋กค๋ฌ์์ ItemDto findItem = im.findByItem(itemId); Item item = new Item(); item.setId(findItem.getId()); item.setItemName(findItem.getItemName()); item.setPrice(findItem.getPrice()); item.setQuantity(findItem.getQuantity()); item.setOpen(findItem.getOpen()); List list = new ArrayList(Arrays.asList(findItem.getRegions().split(","))); item.setRegions(list); model.addAttribute("item", item); DB์ ์๋ ๊ฐ์ itemDto๋ก ์๋ก ๋ฐ์์ DB์ ์๋ regions ๊ฐ์ด ','๋ก ๊ตฌ๋ถ๋์ด์ ธ์ String์ผ๋ก ๋ค์ด๊ฐ์ผ๋ ๋ค์ Listํํ๋ก ๋ณํํ๋ค์ ์๋ก์ด item์ settingํ ๋ค view๋ก ๋ณด๋๋๋ mapper์์๋ ๊ฐ์์ฒ๋ผ ๋์ ์ํฉ๋๋ค. ์ผ์ ใ ใ ๊ฐ์ฌํฉ๋๋ค. ๊ทธ๋๋ ๋ต๋ณ์ ๋ฌ์์ฃผ์ ๊ฑธ ์ฐธ๊ณ ํด์ ํด๊ฒฐํ์ต๋๋ค. ์ผ๋จ mybatis์ฌ์ฉํ๊ฑฐ๋ ๊ฐ์์์ ์งํํ๊ฑฐ ์ด๋ ๊ฒ ๋๊ฐ๋ก ๊ฐ์ ๋ค์ ์์ํ๊ฒ ์ต๋๋ค ๊ฐ์ฌํฉ๋๋ค.
- 1
- 13
- 1.3K
Q&A
๊ฐ์ฌ๋ ์๋ ํ์ธ์ ์ง๋ฌธ์ด ์์ต๋๋ค!!
mariadb๋ฅผ ์ฌ์ฉ์ํ๊ณ ๊ฐ์์์ ์งํํ๋๋๋ก ์งํํด์ผ๊ฒ ์ต๋๋ค. ์ผ๋จ ๋ค๋ง๋ค์ด๋ณด๊ณ ์คDB๋ก ๋ฐ๊ฟ๋ ๊ณ ๋ฏผํด๋ด์ผ๋ ๊ฑฐ ๊ฐ์ต๋๋ค.
- 1
- 13
- 1.3K
Q&A
๊ฐ์ฌ๋ ์๋ ํ์ธ์ ์ง๋ฌธ์ด ์์ต๋๋ค!!
๊ทผ๋ฐ ์์ ๋ฐ์ดํฐ ์ฒ๋ผ ์ง์ญ์ด 2๊ฐ์ด์์ธ๊ฑด ๋ชป๊ฐ์ ธ์ค๋๊ฑฐ ๊ฐ์์. ํซํฉ์ ๋ณด์๋๊ฒ์ฒ๋ผ 3๊ฐ ์ ํ์ ํ๋๋ฐ ๋ชป๊ฐ์ ธ์ต๋๋ค. (์ฌ์ง)
- 1
- 13
- 1.3K
Q&A
๊ฐ์ฌ๋ ์๋ ํ์ธ์ ์ง๋ฌธ์ด ์์ต๋๋ค!!
(์ฌ์ง) db์ ์ด๋ ๊ฒ ๋ค์ด๊ฐ๊ฑฐ๋ ์. ์ฌ๊ธฐ์ ์ง์ญ์ด ํ๋์ฉ์ธ๊ฑด ๋ณด๊ธฐ์์ ์๋ ์. (์ฌ์ง) (์ฌ์ง)
- 1
- 13
- 1.3K
Q&A
๊ฐ์ฌ๋ ์๋ ํ์ธ์ ์ง๋ฌธ์ด ์์ต๋๋ค!!
๋ ํ๋ ๋ฐ๊ฒฌํ์ต๋๋ค. ๋ฑ๋ก ์ง์ญ th:text="${region.value}" class="form-check-label">์์ธ item.html์์ ์ฒดํฌ๊ฐ ํ๋๋ง ๋์์ ๊ฒฝ์ฐ๋ ์ฒดํฌ ๊ฐ์ ํ๋ฉด์ ์ ๋ฟ๋ ค์ฃผ๊ณ ์์ต๋๋ค. itemDto๋ผ๋ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด ์์ String์ผ๋ก ๊ฐ์ ธ์์ต๋๋ค. ๊ทผ๋ฐ ์ฒดํฌ๊ฐ์ด 2๊ฐ ์ด์์ผ๋๋ ์ฒดํฌ๊ฐ ์๋ ์ํ๋ก ์์ธ๋ณด๊ธฐ๊ฐ ๋น๋๋ค. 1๊ฐ๋ง ์ฒดํฌํด์ DB์ ์ ์ฅํ์๋๋ ๊ทธ ์์น์ ์ ๋ณด์ฌ์ค๋๋ค.. ใ ใ
- 1
- 13
- 1.3K