diff --git a/pom.xml b/pom.xml index c6d356c04f6ed2e8dc4d162bdd8bef6291fbc951..1f758cc9113c1fcedff1a1bec100798ec5e2b67e 100644 --- a/pom.xml +++ b/pom.xml @@ -28,6 +28,18 @@ <artifactId>spring-boot-starter-web</artifactId> </dependency> + <dependency> + <groupId>org.webjars</groupId> + <artifactId>jquery</artifactId> + <version>3.6.0</version> + </dependency> + + <dependency> + <groupId>org.webjars</groupId> + <artifactId>bootstrap</artifactId> + <version>5.1.3</version> + </dependency> + <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> @@ -79,6 +91,12 @@ <version>5.0.0</version> </dependency> + <dependency> + <groupId>mysql</groupId> + <artifactId>mysql-connector-java</artifactId> + <scope>runtime</scope> +</dependency> + <dependency> <groupId>com.googlecode.json-simple</groupId> <artifactId>json-simple</artifactId> @@ -91,6 +109,19 @@ <version>2.9.0</version> </dependency> + <dependency> + <groupId>com.querydsl</groupId> + <artifactId>querydsl-jpa</artifactId> + <version>5.0.0</version> + </dependency> + <dependency> + <groupId>com.querydsl</groupId> + <artifactId>querydsl-apt</artifactId> + <version>5.0.0</version> + </dependency> + + + <dependency> <groupId>org.webjars</groupId> <artifactId>jquery</artifactId> @@ -133,14 +164,7 @@ </dependency> - - - <dependency> - <groupId>com.google.code.gson</groupId> - <artifactId>gson</artifactId> - <version>2.8.5</version> - </dependency> - </dependencies> + </dependencies> <build> <plugins> @@ -180,9 +204,6 @@ </execution> </executions> </plugin> - - - </plugins> </build> diff --git a/src/main/java/com/example/demo/DemoApplication.java b/src/main/java/com/example/demo/DemoApplication.java index 0aa3d9205673fc9b5b7a13941a2c7cb50f90741d..7c80619bc757669f2535c09804ff63ad849f93d5 100644 --- a/src/main/java/com/example/demo/DemoApplication.java +++ b/src/main/java/com/example/demo/DemoApplication.java @@ -4,6 +4,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; + import org.springframework.boot.autoconfigure.domain.EntityScan; import org.springframework.context.ApplicationContext; import java.util.Arrays; @@ -14,13 +15,16 @@ import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.springframework.context.annotation.Bean; import javax.sql.DataSource; +//import org.springframework.core.io.support.PathMatchingResourcePatternReso import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.Resource; -@SpringBootApplication @RestController -public class DemoApplication { - +@SpringBootApplication +// @EntityScan(basePackageClasses = {Item.class}) +public class DemoApplication {// implements CommandLineRunner{ + // @Autowired + // private ApplicationContext appContext; public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } diff --git a/src/main/java/com/example/demo/controller/MemberController.java b/src/main/java/com/example/demo/controller/MemberController.java index 3c0e658e312839d850cae40a056833e2a83e368a..833a0a9eaccf166493624a8b17cee7b807fb0541 100644 --- a/src/main/java/com/example/demo/controller/MemberController.java +++ b/src/main/java/com/example/demo/controller/MemberController.java @@ -1,37 +1,68 @@ package com.example.demo.controller; import com.example.demo.service.MemberService; +import com.google.gson.JsonParser; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; import com.example.demo.entity.Member; import com.example.demo.dto.MemberDto; +import com.example.demo.constant.Role; +import java.util.Map; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.repository.query.Param; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @RestController public class MemberController { - @Autowired - MemberService memberService; + private final MemberService memberService; + + public MemberController(MemberService memberService) { + this.memberService = memberService; + } - public Member createMember() { + private Member createMember() { MemberDto memberDto = new MemberDto(); - memberDto.setEmail("test@email.com"); + memberDto.setEmail("user" + System.currentTimeMillis() + "@email.com"); // Unique email 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); + @GetMapping("/membertest") + public ResponseEntity<Map<String, Object>> membertest() { + try { + Member member = createMember(); + Member savedMember = memberService.saveMember(member); + return ResponseEntity.ok(Map.of("status", "success", "data", savedMember)); + } catch (IllegalStateException e) { + return ResponseEntity.status(HttpStatus.CONFLICT) + .body(Map.of("status", "error", "message", "이미 가입된 회원입니다.")); + } catch (Exception e) { + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(Map.of("status", "error", "message", "서버 오류가 발생했습니다.")); + } } - @RequestMapping(value = "/makeMember", method = RequestMethod.POST) - public String makeMember(@RequestBody String param) { - System.out.println(param); - return "OK"; + @PostMapping("/makeMember") + public ResponseEntity<Map<String, Object>> makeMember(@RequestBody MemberDto memberDto) { + try { + System.out.println("name: " + memberDto.getName()); + System.out.println("email: " + memberDto.getEmail()); + System.out.println("address: " + memberDto.getAddress()); + System.out.println("password: " + memberDto.getPassword()); + Member member = Member.createMember(memberDto); + Member savedMember = memberService.saveMember(member); + return ResponseEntity.ok(Map.of("status", "success", "message", "OK", "data", savedMember)); + } catch (IllegalStateException e) { + return ResponseEntity.status(HttpStatus.CONFLICT) + .body(Map.of("status", "error", "message", "이미 가입된 회원입니다.")); + } catch (Exception e) { + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(Map.of("status", "error", "message", "서버 오류가 발생했습니다.")); + } } } diff --git a/src/main/java/com/example/demo/controller/TestController.java b/src/main/java/com/example/demo/controller/TestController.java index bfb623384576dc6bdd00c65084f674a54a432d95..e65a576e31395c991793bbd82edb2b7512f1b253 100644 --- a/src/main/java/com/example/demo/controller/TestController.java +++ b/src/main/java/com/example/demo/controller/TestController.java @@ -15,34 +15,21 @@ public class TestController { public String test(@RequestParam("id") String id) { JsonObject obj = new JsonObject(); obj.addProperty("item_nm", "수제 햄버거"); - obj.addProperty("item_detail", "소고기 패티와 토마토가 들어 있는햄버거"); + 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"); + @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 + return infoArray.toString(); + } +} diff --git a/src/main/java/com/example/demo/dao/UserDAO.java b/src/main/java/com/example/demo/dao/UserDAO.java index a2fada19ef9376399adb0f23aaa441453e9ccf87..b2cba5bf266b956bad330532d21c74558282a196 100644 --- a/src/main/java/com/example/demo/dao/UserDAO.java +++ b/src/main/java/com/example/demo/dao/UserDAO.java @@ -2,5 +2,5 @@ package com.example.demo.dao; import java.util.List; import com.example.demo.dto.UserDTO; public interface UserDAO { - List<UserDTO> selectUsers(UserDTO param) throws Exception; +List<UserDTO> selectUsers(UserDTO param) throws Exception; } diff --git a/src/main/java/com/example/demo/dto/MemberDto.java b/src/main/java/com/example/demo/dto/MemberDto.java index c5e0c42835e149431d48e83da70ed0650f0aa1c4..313190f38f66176ba891934d804cc0eec2196458 100644 --- a/src/main/java/com/example/demo/dto/MemberDto.java +++ b/src/main/java/com/example/demo/dto/MemberDto.java @@ -11,5 +11,4 @@ public class MemberDto { private String password; private String address; - } diff --git a/src/main/java/com/example/demo/dto/UserDTO.java b/src/main/java/com/example/demo/dto/UserDTO.java index 761e5d1ecaf5ab305399a0d9681def2289bbd54d..5db2c83dcdb774282a4c9287c5889f4add0575a0 100644 --- a/src/main/java/com/example/demo/dto/UserDTO.java +++ b/src/main/java/com/example/demo/dto/UserDTO.java @@ -1,10 +1,14 @@ package com.example.demo.dto; + import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; -@AllArgsConstructor // 자동으로 모든 매개변수를 받는 생성자를 생성 -@Getter // Getter 생성 -@Setter // Setter 생성 + +@Getter +@Setter +@NoArgsConstructor // Add no-args constructor for MyBatis +@AllArgsConstructor public class UserDTO { private int seq; private String name; diff --git a/src/main/java/com/example/demo/entity/Item.java b/src/main/java/com/example/demo/entity/Item.java index 5c433f0670d909c63e670f20fc5b966f583f54f2..13bc38c565ded8ef47858f8f04402707a3769384 100644 --- a/src/main/java/com/example/demo/entity/Item.java +++ b/src/main/java/com/example/demo/entity/Item.java @@ -1,4 +1,5 @@ package com.example.demo.entity; + import com.example.demo.constant.ItemSellStatus; import lombok.Getter; import lombok.Setter; @@ -7,26 +8,26 @@ import java.time.LocalDateTime; import javax.persistence.*; import org.springframework.stereotype.Component; -@Table(name="item") +@Table(name = "item") @Getter @Setter @ToString @Entity public class Item { @Id - @Column(name="item_id") -@GeneratedValue(strategy = GenerationType.AUTO) -private Long id; -@Column(nullable = false, length= 50) -private String itemNm; -@Column(name="price", nullable = false) -private int price; -@Column(nullable = false) -private int stockNumber; -@Lob -@Column(nullable = false) -private String itemDetail; -@Enumerated(EnumType.STRING) + @Column(name = "item_id") + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + @Column(nullable = false, length = 50) + private String itemNm; + @Column(name = "price", nullable = false) + private int price; + @Column(nullable = false) + private int stockNumber; + @Lob + @Column(nullable = false) + private String itemDetail; + @Enumerated(EnumType.STRING) private ItemSellStatus itemSellStatus; private LocalDateTime regTime; private LocalDateTime updateTime; diff --git a/src/main/java/com/example/demo/repository/ItemRepository.java b/src/main/java/com/example/demo/repository/ItemRepository.java index fd9afc8b7b99c1262c5a5410a03e439e34ed6934..c53903d77e03310f1f80555db7bae411c69893f4 100644 --- a/src/main/java/com/example/demo/repository/ItemRepository.java +++ b/src/main/java/com/example/demo/repository/ItemRepository.java @@ -6,18 +6,12 @@ import org.springframework.data.repository.query.Param; import java.util.List; import com.example.demo.entity.Item; // @NoRepositoryBean - public interface ItemRepository extends JpaRepository<Item, Long>{ 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); - * - */ + @Query("select i from Item i where i.itemDetail like concat('%', :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 index f7fd5e297072efec425edb994bf650d927d2e433..18dfe8bd7ba83dad8dd286ab4ade0ca1cc799651 100644 --- a/src/main/java/com/example/demo/repository/MemberRepository.java +++ b/src/main/java/com/example/demo/repository/MemberRepository.java @@ -1,7 +1,8 @@ package com.example.demo.repository; -import com.example.demo.entity.*; + import org.springframework.data.jpa.repository.JpaRepository; +import com.example.demo.entity.*; -public interface MemberRepository extends JpaRepository<Member, Long>{ +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 index aac177aad84dfe45e6af208540f89eb8fabed893..190d4eb4359cf22371fd67f9e2ca30abc17a6b6f 100644 --- a/src/main/java/com/example/demo/service/MemberService.java +++ b/src/main/java/com/example/demo/service/MemberService.java @@ -14,17 +14,14 @@ public class MemberService { private final MemberRepository memberRepository; public Member saveMember(Member member) { - validateDuplicatetMember(member); + if (!validateDuplicatetMember(member)) { + throw new IllegalStateException("이미 가입된 회원입니다."); + } 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; + return findMember == null; } - } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 9f08d1d929b12901ee9b76fa59474df96b011e5d..0d6bd92bc5cbb2ea8f2ee59ac3cfda170e5c3122 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -7,9 +7,12 @@ spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.username=root spring.datasource.password=web1 # spring.datasource.driver-class-name=org.h2.Driver -# spring.datasource.url=jdbc:h2:mem:test +#spring.datasource.url=jdbc:h2:mem:testdb # spring.datasource.username=sa # spring.datasource.password= # spring.jpa.database-platform=org.hibernate.dialect.H2Dialect # spring.jpa.hibernate.ddl-auto=create -spring.jpa.properties.hibernate.show_sql = true spring.jpa.properties.hibernate.connection.autocommit = true spring.jpa.properties.hibernate.format_sql = true logging.level.org.hibernate.type.descriptor.sql = trace \ No newline at end of file +spring.jpa.properties.hibernate.show_sql = true +spring.jpa.properties.hibernate.connection.autocommit = true +spring.jpa.properties.hibernate.format_sql = true +logging.level.org.hibernate.type.descriptor.sql = trace \ No newline at end of file diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..34c66f2a549d60987ec0162356a55cd78314b760 --- /dev/null +++ b/src/main/resources/mapper/UserMapper.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" +"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.example.demo.dao.UserDAO"><!--namespace 를 통해 UserDAO 와 연결합니다. --> + <select id="selectUsers" +parameterType="com.example.demo.dto.UserDTO" +resultType="com.example.demo.dto.UserDTO"> +SELECT `seq`, `name`, `country` FROM lab03 +<if test='country != null and country != ""'> WHERE country = #{country} + </if> + </select> +</mapper> \ No newline at end of file diff --git a/src/main/resources/static/index.html b/src/main/resources/static/index.html index 74c4777e246ac6f5e1e14126581fa7dae5255b5d..483e0cc8b992c8f57c7378db357be9071f427086 100644 --- a/src/main/resources/static/index.html +++ b/src/main/resources/static/index.html @@ -2,41 +2,41 @@ <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> + <title>Test Webjars</title> + <link rel="stylesheet" href="/app/s202322014/code/proxy/3000/webjars/bootstrap/5.1.3/css/bootstrap.min.css"> + <script src="/app/s202322014/code/proxy/3000/webjars/jquery/3.6.0/jquery.min.js"></script> + <script src="/app/s202322014/code/proxy/3000/webjars/popper.js/2.9.3/umd/popper.min.js"></script> + <script src="/app/s202322014/code/proxy/3000/webjars/bootstrap/5.1.3/js/bootstrap.min.js"></script> +</head> </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> + <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 index 46488063a229b5bf513fca113367835dd87e596a..af89066bd6c4da6ca4e71891db1ed80b7a8971a2 100644 --- a/src/main/resources/static/product.html +++ b/src/main/resources/static/product.html @@ -4,29 +4,22 @@ <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> + <link rel="stylesheet" href="/app/s202322014/code/proxy/3000/webjars/bootstrap/5.1.3/css/bootstrap.min.css"> + <script src="/app/s202322014/code/proxy/3000/webjars/jquery/3.6.0/jquery.min.js"></script> + <script src="/app/s202322014/code/proxy/3000/webjars/popper.js/2.9.3/umd/popper.min.js"></script> + <script src="/app/s202322014/code/proxy/3000/webjars/bootstrap/5.1.3/js/bootstrap.min.js"></script> <script> $(document).ready(function () { $("button").click(function () { $.ajax({ type: 'GET', - url: '/productlist', + url: '/app/s202322014/code/proxy/3000/test?id=1', 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); - } + 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) } }); }); @@ -35,6 +28,7 @@ </head> <body> +<<<<<<< HEAD <h1>상품 데이터 목록 출력</h1> <button>조회</button> <table class="table table-hover"> @@ -49,6 +43,14 @@ <tbody id="tableBody"> </tbody> </table> +======= + <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> +>>>>>>> fix_branch </body> </html> \ No newline at end of file diff --git a/src/main/resources/static/productList.html b/src/main/resources/static/productList.html new file mode 100644 index 0000000000000000000000000000000000000000..4b0828118ba11b24ca39d049dbefc918fd4f38bf --- /dev/null +++ b/src/main/resources/static/productList.html @@ -0,0 +1,56 @@ +<!DOCTYPE html> +<html lang="en"> + +<head> + <meta charset="UTF-8"> + <title>Product</title> + <link rel="stylesheet" href="/app/s202322014/code/proxy/3000/webjars/bootstrap/5.1.3/css/bootstrap.min.css"> + <script src="/app/s202322014/code/proxy/3000/webjars/jquery/3.6.0/jquery.min.js"></script> + <script src="/app/s202322014/code/proxy/3000/webjars/popper.js/2.9.3/umd/popper.min.js"></script> + <script src="/app/s202322014/code/proxy/3000/webjars/bootstrap/5.1.3/js/bootstrap.min.js"></script> + <script> + $(document).ready(function () { + $("button").click(function () { + $.ajax({ + type: 'GET', + url: '/app/s202322014/code/proxy/3000/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> + </tr> + <th>상품상세설명</th> + <th>상품등록일</th> + <th>상품가격</th> + </tr> + </thead> + <tbody id="tableBody"> + </tbody> + </table> +</body> + +</html> \ No newline at end of file diff --git a/src/test/java/com/example/demo/repository/ItemRepositoryTest.java b/src/test/java/com/example/demo/repository/ItemRepositoryTest.java index b48853ff5387702a0386ee7d1601c387d47fddf0..60265cd5911bb276ab7bf9781b181d4b5211f76c 100644 --- a/src/test/java/com/example/demo/repository/ItemRepositoryTest.java +++ b/src/test/java/com/example/demo/repository/ItemRepositoryTest.java @@ -18,7 +18,11 @@ import com.querydsl.jpa.impl.JPAQueryFactory; import com.querydsl.jpa.impl.JPAQuery; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; +import javax.swing.text.html.parser.Entity; +@SpringBootTest +@TestPropertySource(locations = "classpath:application-test.properties") +@RunWith(SpringJUnit4ClassRunner.class) public class ItemRepositoryTest { @Autowired ItemRepository itemRepository; @@ -28,7 +32,62 @@ public class ItemRepositoryTest { public void createItemList() { for (int i = 1; i <= 10; i++) { + } + } + + @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("@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()); } }