diff --git a/pom.xml b/pom.xml index ee799c7c4b63ebad2676b8ae08b3e1d20b692441..54dac99a7e11de360e8cd0436113cc82538d19f8 100644 --- a/pom.xml +++ b/pom.xml @@ -124,6 +124,8 @@ </dependency> + + </dependencies> <build> diff --git a/src/main/java/com/example/demo/DemoApplication.java b/src/main/java/com/example/demo/DemoApplication.java index 15fe95c5afa37151c83a187bbe972a562a1fcea4..2139ef822df764d410229d731b5f839654927546 100644 --- a/src/main/java/com/example/demo/DemoApplication.java +++ b/src/main/java/com/example/demo/DemoApplication.java @@ -12,8 +12,5 @@ public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } - @GetMapping(value="/") - public String HelloWorld(){ - return "Hello World"; -} + } \ No newline at end of file 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 7b7fd4e44735a2a778a4f21402e2a791a83d13a8..0000000000000000000000000000000000000000 --- 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; - - } - -} 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 0000000000000000000000000000000000000000..56d6a511907512f99ae66895415b381082dbe82d --- /dev/null +++ b/src/main/java/com/example/demo/constant/Role.java @@ -0,0 +1,7 @@ +package com.example.demo.constant; + +public enum Role { + + USER, ADMIN + +} 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 0000000000000000000000000000000000000000..e37471d6b76f85fc3706d464101cda82b602e16a --- /dev/null +++ b/src/main/java/com/example/demo/controller/TestController.java @@ -0,0 +1,58 @@ +package com.example.demo.controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; + + +@RestController +public class TestController{ + + @RequestMapping(value = "/test", method = RequestMethod.GET) + public String test(@RequestParam("id") String id){ + + JsonObject obj = new JsonObject(); + obj.addProperty("item_nm", "수제 햄버거"); + obj.addProperty("item_detail", "소고기 패티와 토마토가 들어 있는 햄버거"); + obj.addProperty("item_reg_date", "2022/04/22"); + obj.addProperty("item_price", "4000"); + + return obj.toString(); + + } + + @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(); + + } +} diff --git a/src/main/java/com/example/demo/UserDto.java b/src/main/java/com/example/demo/controller/UserDto.java similarity index 82% rename from src/main/java/com/example/demo/UserDto.java rename to src/main/java/com/example/demo/controller/UserDto.java index 985e316a35d988245330d6290c5f11664ac95365..0b6c75267113510ebdd9a53e34a57217aeef976b 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; 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 0000000000000000000000000000000000000000..4366ea27b0fc8ccc5e74eeb0d2b1f914958cfe64 --- /dev/null +++ b/src/main/java/com/example/demo/dto/MemberDto.java @@ -0,0 +1,13 @@ +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 0000000000000000000000000000000000000000..fa89b93f949fc47342b0e309eb894f841f421a14 --- /dev/null +++ b/src/main/java/com/example/demo/entity/Member.java @@ -0,0 +1,44 @@ +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; + + } +} + diff --git a/src/main/java/com/example/demo/repository/ItemRepository.java b/src/main/java/com/example/demo/repository/ItemRepository.java index eb04281e543f0e8a281643c555eab5cc9a2ba03f..92955a7af3f564330bc8ec79c95b3b5a391b0709 100644 --- a/src/main/java/com/example/demo/repository/ItemRepository.java +++ b/src/main/java/com/example/demo/repository/ItemRepository.java @@ -15,4 +15,8 @@ public interface ItemRepository extends JpaRepository<Item, Long>{ 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 0000000000000000000000000000000000000000..0e4e6500831d0a5e3c7aed22583b7e571cb082b7 --- /dev/null +++ b/src/main/java/com/example/demo/repository/MemberRepository.java @@ -0,0 +1,10 @@ +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); + +} 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 0000000000000000000000000000000000000000..bb17a342a9ebcc54dace903c9726751ad7fc2fdb --- /dev/null +++ b/src/main/java/com/example/demo/service/MemberService.java @@ -0,0 +1,40 @@ +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; + + } + +} + + diff --git a/src/main/resources/static/index.html b/src/main/resources/static/index.html new file mode 100644 index 0000000000000000000000000000000000000000..8d5a599423158a82ae63466b3e981ce24df777d8 --- /dev/null +++ b/src/main/resources/static/index.html @@ -0,0 +1,41 @@ +<!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> diff --git a/src/main/resources/static/product.html b/src/main/resources/static/product.html new file mode 100644 index 0000000000000000000000000000000000000000..f413bc806e7dbe4ea17fffb2d978504abcbb4530 --- /dev/null +++ b/src/main/resources/static/product.html @@ -0,0 +1,42 @@ +<!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: '/test?id=1', + success: function(data){ + var obj = JSON.parse(data); + $('#item_nm span').text(obj.item_nm) + $('#item_detail span').text(obj.item_detail) + $('#item_reg_date span').text(obj.item_reg_date) + $('#item_price span').text(obj.item_price) + } + + }); + + + }); + }); + </script> + +</head> +<body> + <h1>상품 데이터 출력 예제</h1> + <div id = "item_nm">상품명: <span></span></div> + <div id = "item_detail">상품 상세설명: <span></span></div> + <div id = "item_reg_date">상품 등록일: <span></span></div> + <div id = "item_price">삼품가격: <span></span></div> + <button>조회</button> +</body> +</html> diff --git a/src/main/resources/static/product_list.html b/src/main/resources/static/product_list.html new file mode 100644 index 0000000000000000000000000000000000000000..9db1b10db36b3341479bb093551e5c3a29e35dfe --- /dev/null +++ b/src/main/resources/static/product_list.html @@ -0,0 +1,57 @@ +<!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 d082a18c8556d2c3608415391ee97bf3eb53db81..114bdd2f186b563454a005ebd8b4418dd8772158 100644 --- a/src/test/java/com/example/demo/repository/ItemRepositoryTest.java +++ b/src/test/java/com/example/demo/repository/ItemRepositoryTest.java @@ -26,6 +26,9 @@ public class ItemRepositoryTest { @Autowired ItemRepository itemRepository; + @PersistenceContext + EntityManager em; + public void createItemList(){ for(int i=1; i <=10; i++){ @@ -78,5 +81,33 @@ public class ItemRepositoryTest { } } + @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()); + } + } + }