From 15e7f382b158ad3968d8ae818f2e6c8aa381c0cb Mon Sep 17 00:00:00 2001 From: jane <janejane101@ajou.ac.kr> Date: Wed, 2 Apr 2025 18:43:37 +0900 Subject: [PATCH] second commit --- .../com/example/demo/DemoApplication.java | 4 - .../java/com/example/demo/TestController.java | 20 ---- .../java/com/example/demo/constant/Role.java | 5 + .../demo/controller/MemberController.java | 61 +++++++++++ .../demo/controller/TestController.java | 40 +++++++ .../demo/{ => controller}/UserDto.java | 4 +- .../java/com/example/demo/dto/MemberDto.java | 14 +++ .../java/com/example/demo/entity/Member.java | 43 ++++++++ .../demo/repository/ItemRepository.java | 9 +- .../demo/repository/MemberRepository.java | 9 ++ .../example/demo/service/MemberService.java | 35 ++++++ src/main/resources/static/index.html | 1 + src/main/resources/static/product.html | 51 +++++++++ .../demo/repository/ItemRepositoryTest.java | 101 +++++++++++++++--- 14 files changed, 357 insertions(+), 40 deletions(-) delete mode 100644 src/main/java/com/example/demo/TestController.java create mode 100644 src/main/java/com/example/demo/constant/Role.java create mode 100644 src/main/java/com/example/demo/controller/MemberController.java create mode 100644 src/main/java/com/example/demo/controller/TestController.java rename src/main/java/com/example/demo/{ => controller}/UserDto.java (81%) create mode 100644 src/main/java/com/example/demo/dto/MemberDto.java create mode 100644 src/main/java/com/example/demo/entity/Member.java create mode 100644 src/main/java/com/example/demo/repository/MemberRepository.java create mode 100644 src/main/java/com/example/demo/service/MemberService.java create mode 100644 src/main/resources/static/index.html create mode 100644 src/main/resources/static/product.html diff --git a/src/main/java/com/example/demo/DemoApplication.java b/src/main/java/com/example/demo/DemoApplication.java index 6b4380e..7b86aaa 100644 --- a/src/main/java/com/example/demo/DemoApplication.java +++ b/src/main/java/com/example/demo/DemoApplication.java @@ -13,9 +13,5 @@ public class DemoApplication { SpringApplication.run(DemoApplication.class, args); } - @GetMapping(value="/") - public String HelloWorld() { - return "Hello World"; - } } diff --git a/src/main/java/com/example/demo/TestController.java b/src/main/java/com/example/demo/TestController.java deleted file mode 100644 index 66d4c42..0000000 --- a/src/main/java/com/example/demo/TestController.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.example.demo; - -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -public class TestController { - - @GetMapping(value = "/test") - public UserDto test(){ - - UserDto dto = new UserDto(); - dto.setAge(17); - dto.setName("Jane"); - - return dto; - - } - -} \ No newline at end of file diff --git a/src/main/java/com/example/demo/constant/Role.java b/src/main/java/com/example/demo/constant/Role.java new file mode 100644 index 0000000..5ed2751 --- /dev/null +++ b/src/main/java/com/example/demo/constant/Role.java @@ -0,0 +1,5 @@ +package com.example.demo.constant; + +public enum Role { + USER, ADMIN +} diff --git a/src/main/java/com/example/demo/controller/MemberController.java b/src/main/java/com/example/demo/controller/MemberController.java new file mode 100644 index 0000000..234df26 --- /dev/null +++ b/src/main/java/com/example/demo/controller/MemberController.java @@ -0,0 +1,61 @@ +package com.example.demo.controller; + +import com.example.demo.service.MemberService; +import com.example.demo.entity.Member; +import com.example.demo.dto.MemberDto; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.repository.query.Param; +import org.springframework.web.bind.annotation.*; +import com.google.gson.JsonParser; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; + +@RestController +public class MemberController { + +@Autowired +MemberService memberService; + +public Member createMember(){ + MemberDto memberDto = new MemberDto(); + memberDto.setEmail("test@email.com"); + memberDto.setName("홍길동"); + memberDto.setAddress("서울시 마포구 합정동"); + memberDto.setPassword("1234"); + return Member.createMember(memberDto); +} + +@RequestMapping(value = "/membertest", method = RequestMethod.GET) +public void membertest(){ + + Member member = createMember(); + Member savedMember = memberService.saveMember(member); + + System.out.println(member); + System.out.println(savedMember); + +} +@RequestMapping(value = "/makeMember", method = RequestMethod.POST) +public String makeMember(@RequestBody String param){ + System.out.println(param); + JsonElement element = JsonParser.parseString(param); + JsonObject object = element.getAsJsonObject(); + + String id = object.get("id").getAsString(); + System.out.println("id : " + id); + + String email = object.get("email").getAsString(); + System.out.println("email : " + email); + + String address = object.get("address").getAsString(); + System.out.println("address : " + address); + + String name = object.get("name").getAsString(); + System.out.println("name : " + name); + + String password = object.get("password").getAsString(); + System.out.println("password : " + password); + + return "OK"; + } +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/controller/TestController.java b/src/main/java/com/example/demo/controller/TestController.java new file mode 100644 index 0000000..cd7b1ea --- /dev/null +++ b/src/main/java/com/example/demo/controller/TestController.java @@ -0,0 +1,40 @@ +package com.example.demo.controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; + + +@RestController +public class TestController{ + @RequestMapping(value = "/productlist", method = RequestMethod.GET) + public String productList(){ + + JsonObject obj1 = new JsonObject(); + obj1.addProperty("item_nm", "수제 햄버거"); + obj1.addProperty("item_detail", "소고기 패티와 토마토가 들어 있는 햄버거"); + obj1.addProperty("item_reg_date", "2022/04/22"); + obj1.addProperty("item_price", "4000"); + + JsonObject obj2 = new JsonObject(); + obj2.addProperty("item_nm", "카레라이스"); + obj2.addProperty("item_detail", "매운 3분 카레라이스"); + obj2.addProperty("item_reg_date", "2022/03/10"); + obj2.addProperty("item_price", "8000"); + + JsonObject obj3 = new JsonObject(); + obj3.addProperty("item_nm", "라면"); + obj3.addProperty("item_detail", "소고기 라면"); + obj3.addProperty("item_reg_date", "2021/09/10"); + obj3.addProperty("item_price", "1500"); + + JsonArray infoArray = new JsonArray(); + infoArray.add(obj1); + infoArray.add(obj2); + infoArray.add(obj3); + + return infoArray.toString(); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/UserDto.java b/src/main/java/com/example/demo/controller/UserDto.java similarity index 81% rename from src/main/java/com/example/demo/UserDto.java rename to src/main/java/com/example/demo/controller/UserDto.java index 6c12f31..0d5311a 100644 --- a/src/main/java/com/example/demo/UserDto.java +++ b/src/main/java/com/example/demo/controller/UserDto.java @@ -1,4 +1,4 @@ -package com.example.demo; +package com.example.demo.controller; import lombok.Getter; import lombok.Setter; @@ -12,4 +12,4 @@ public class UserDto { private String name; private Integer age; -} \ No newline at end of file +} diff --git a/src/main/java/com/example/demo/dto/MemberDto.java b/src/main/java/com/example/demo/dto/MemberDto.java new file mode 100644 index 0000000..313190f --- /dev/null +++ b/src/main/java/com/example/demo/dto/MemberDto.java @@ -0,0 +1,14 @@ +package com.example.demo.dto; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class MemberDto { + private String name; + private String email; + private String password; + private String address; + +} diff --git a/src/main/java/com/example/demo/entity/Member.java b/src/main/java/com/example/demo/entity/Member.java new file mode 100644 index 0000000..f962f8a --- /dev/null +++ b/src/main/java/com/example/demo/entity/Member.java @@ -0,0 +1,43 @@ +package com.example.demo.entity; +import javax.persistence.*; +import com.example.demo.dto.MemberDto; +import com.example.demo.constant.Role; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@Entity +@Table(name="member") +@Getter +@Setter +@ToString +public class Member { + + @Id + @Column(name="member_id") + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + private String name; + + @Column(unique = true) + private String email; + + private String password; + + private String address; + + @Enumerated(EnumType.STRING) + private Role role; + + public static Member createMember(MemberDto memberDto){ + Member member = new Member(); + member.setName(memberDto.getName()); + member.setEmail((memberDto.getEmail())); + member.setAddress((memberDto.getAddress())); + member.setPassword(memberDto.getPassword()); + member.setRole(Role.USER); + return member; + + } +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/repository/ItemRepository.java b/src/main/java/com/example/demo/repository/ItemRepository.java index 082d2bc..6b88582 100644 --- a/src/main/java/com/example/demo/repository/ItemRepository.java +++ b/src/main/java/com/example/demo/repository/ItemRepository.java @@ -9,6 +9,13 @@ import java.util.List; import com.example.demo.entity.Item; + // @NoRepositoryBean public interface ItemRepository extends JpaRepository<Item, Long>{ -} \ No newline at end of file + List<Item> findByItemNm(String itemNm); + List<Item> findByItemNmOrItemDetail(String itemNm, String itemDetail); + List<Item> findByPriceLessThan(Integer price); + List<Item> findByPriceLessThanOrderByPriceDesc(Integer price); + @Query("select i from Item i where i.itemDetail like %:itemDetail% order by i.price desc") + List<Item> findByItemDetail(@Param("itemDetail") String itemDetail); +} diff --git a/src/main/java/com/example/demo/repository/MemberRepository.java b/src/main/java/com/example/demo/repository/MemberRepository.java new file mode 100644 index 0000000..1782d1c --- /dev/null +++ b/src/main/java/com/example/demo/repository/MemberRepository.java @@ -0,0 +1,9 @@ +package com.example.demo.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import com.example.demo.entity.*; + +public interface MemberRepository extends JpaRepository<Member, Long>{ + + Member findByEmail(String email); +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/service/MemberService.java b/src/main/java/com/example/demo/service/MemberService.java new file mode 100644 index 0000000..9112da0 --- /dev/null +++ b/src/main/java/com/example/demo/service/MemberService.java @@ -0,0 +1,35 @@ +package com.example.demo.service; + +import com.example.demo.entity.Member; +import com.example.demo.repository.MemberRepository; +import lombok.RequiredArgsConstructor; + +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.transaction.Transactional; + +@Service +@Transactional +@RequiredArgsConstructor +public class MemberService { + + private final MemberRepository memberRepository; + + public Member saveMember(Member member){ + validateDuplicatetMember(member); + + return memberRepository.save(member); + } + + private boolean validateDuplicatetMember(Member member){ + + Member findMember = memberRepository.findByEmail(member.getEmail()); + if(findMember != null){ + System.out.println("이미 가입된 회원입니다."); + return false; + } + return true; + } + +} \ No newline at end of file diff --git a/src/main/resources/static/index.html b/src/main/resources/static/index.html new file mode 100644 index 0000000..2057e49 --- /dev/null +++ b/src/main/resources/static/index.html @@ -0,0 +1 @@ +<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>Insert title here</title> <link rel="stylesheet" href="/webjars/bootstrap/5.1.3/css/bootstrap.min.css"> <script src="/webjars/jquery/3.6.0/jquery.min.js"></script> <script src="/webjars/popper.js/2.9.3/umd/popper.min.js"></script> <script src="/webjars/bootstrap/5.1.3/js/bootstrap.min.js"></script></head><body><div class="container"> <table class="table table-hover"> <thead class="thead-dark"> <tr> <th>codeId</th> <th>code</th> <th>codeNm</th> <th>codeDc</th> </tr> </thead> <tbody> <tr> <td>COM001</td> <td>REG01</td> <td>단일 게시판 이용 등록</td> <td>단일 게시판 이용 등록</td> </tr> <tr> <td>COM001</td> <td>REG02</td> <td>커뮤니티 등록/td> <td>커뮤니티 등록</td> </tr> </tbody> </table></div></body></html> \ No newline at end of file diff --git a/src/main/resources/static/product.html b/src/main/resources/static/product.html new file mode 100644 index 0000000..cfd9d32 --- /dev/null +++ b/src/main/resources/static/product.html @@ -0,0 +1,51 @@ +<!DOCTYPE html> +<html lang="en"><head> + <meta charset="UTF-8"> + <title>Product</title> + <link rel="stylesheet" href="/webjars/bootstrap/5.1.3/css/bootstrap.min.css"> + <script src="/webjars/jquery/3.6.0/jquery.min.js"></script> + <script src="/webjars/popper.js/2.9.3/umd/popper.min.js"></script> + <script src="/webjars/bootstrap/5.1.3/js/bootstrap.min.js"></script> + <script> + $(document).ready(function(){ + $("button").click(function(){ + $.ajax({ + type: 'GET', + url: '/productlist', + + success: function(data){ + var array = JSON.parse(data); + for(i=0; i < array.length; i++){ + var obj = array[i]; + html = ''; + html += '<tr>'; + html += '<td>' + obj.item_nm + '</td>' + html += '<td>' + obj.item_detail + '</td>' + html += '<td>' + obj.item_reg_date + '</td>' + html += '<td>' + obj.item_price + '</td>' + html += '</tr>'; + $("#tableBody").append(html); + } + } + }); + }); + }); + </script> + </head> + <body> + <h1>상품 데이터 목록 출력</h1> + <button>조회</button><table class="table table-hover"> + <thead class="thead-dark"> + <tr> + <th>상품이름</th> + <th>상품상세설명</th> + <th>상품등록일</th> + <th>상품가격</th> + </tr> + </thead> + <tbody id="tableBody"> + + </tbody> + </table> + </body> +</html> diff --git a/src/test/java/com/example/demo/repository/ItemRepositoryTest.java b/src/test/java/com/example/demo/repository/ItemRepositoryTest.java index 6be9f59..e815234 100644 --- a/src/test/java/com/example/demo/repository/ItemRepositoryTest.java +++ b/src/test/java/com/example/demo/repository/ItemRepositoryTest.java @@ -6,6 +6,8 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.TestPropertySource; import com.example.demo.entity.Item; import com.example.demo.entity.QItem; + +//import com.example.demo.entity.QItem; import org.junit.jupiter.api.DisplayName; import java.time.LocalDateTime; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -26,20 +28,93 @@ public class ItemRepositoryTest { @Autowired ItemRepository itemRepository; - @Test - @DisplayName("상품 저장 테스트") - public void createItemTest(){ - Item item = new Item(); - item.setItemNm("테스트 상품"); - item.setPrice(100000); - item.setItemDetail("테스트 상품 상세 설명"); - item.setStockNumber(100); - item.setRegTime(LocalDateTime.now()); - item.setUpdateTime(LocalDateTime.now()); - - Item savedItem = itemRepository.save(item); - System.out.println(savedItem.toString()); + @PersistenceContext + EntityManager em; + + public void createItemList(){ + + for(int i=1; i <=10; i++){ + Item item = new Item(); + item.setItemNm(("테스트 상품") + i); + item.setPrice(10000 + i); + item.setItemDetail("테스트 상품 상세 설명" + i); + item.setItemSellStatus(ItemSellStatus.SELL); + item.setStockNumber(100); + item.setRegTime(LocalDateTime.now()); + item.setUpdateTime(LocalDateTime.now()); + Item savedItem = itemRepository.save(item); + } } + @Test + @DisplayName("상품명 조회 테스트") + public void findByItemNmTest(){ + this.createItemList(); + List<Item> itemList = itemRepository.findByItemNm("테스트 상품1"); + for(Item item : itemList){ + System.out.println(item.toString()); + } + + } + + @Test + @DisplayName("상품명, 상품상세 설명 OR 테스트") + public void findByItemNmOrItemDetailTest(){ + this.createItemList(); + List<Item> itemList = itemRepository.findByItemNmOrItemDetail("테스트 상품1", "테스트 상품 상세 설명5"); + for(Item item : itemList){ + System.out.println(item.toString()); + } + + } + + @Test + @DisplayName("가격 LessThan 테스트") + public void findByPriceLessThanTest(){ + this.createItemList(); + List<Item> itemList = itemRepository.findByPriceLessThan(10005); + for(Item item: itemList){ + System.out.println(item.toString()); + } + } + + @Test + @DisplayName("가격 내람차순 조회 테스트") + public void findByPriceLessThanOrderByPriceDesc(){ + this.createItemList(); + List<Item> itemList = itemRepository.findByPriceLessThanOrderByPriceDesc(10005); + for(Item item: itemList){ + System.out.println(item.toString()); + } + } + + @Test + @DisplayName("@Query를 이용한 상품 조회 테스트") + public void findByItemDetailTest(){ + this.createItemList(); + List<Item> itemList = itemRepository.findByItemDetail("테스트 상품 상세 설명"); + for(Item item : itemList){ + System.out.println(item.toString()); + } + } + + @Test + @DisplayName("Querydsl 조회테스트1") + public void queryDslTest(){ + this.createItemList(); + JPAQueryFactory queryFactory = new JPAQueryFactory(em); + QItem qItem = QItem.item; + JPAQuery<Item> query = queryFactory.selectFrom(qItem) + .where(qItem.itemSellStatus.eq(ItemSellStatus.SELL)) + .where(qItem.itemDetail.like("%" + "테스트 상품 상세 설명" + "%")) + .orderBy(qItem.price.desc()); + + List<Item> itemList = query.fetch(); + + for(Item item : itemList){ + System.out.println(item.toString()); + } + } + } \ No newline at end of file -- GitLab