diff --git a/src/main/java/com/example/demo/TestController.java b/src/main/java/com/example/demo/TestController.java new file mode 100644 index 0000000000000000000000000000000000000000..7b7fd4e44735a2a778a4f21402e2a791a83d13a8 --- /dev/null +++ b/src/main/java/com/example/demo/TestController.java @@ -0,0 +1,20 @@ +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/UserDto.java b/src/main/java/com/example/demo/UserDto.java new file mode 100644 index 0000000000000000000000000000000000000000..985e316a35d988245330d6290c5f11664ac95365 --- /dev/null +++ b/src/main/java/com/example/demo/UserDto.java @@ -0,0 +1,12 @@ +package com.example.demo; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@Getter @Setter +@ToString +public class UserDto { + private String name; + private Integer age; +} diff --git a/src/main/java/com/example/demo/constant/ItemSellStatus.java b/src/main/java/com/example/demo/constant/ItemSellStatus.java new file mode 100644 index 0000000000000000000000000000000000000000..4e2e5b22bc47a704367fa626c2d0f33501b57eb9 --- /dev/null +++ b/src/main/java/com/example/demo/constant/ItemSellStatus.java @@ -0,0 +1,5 @@ +package com.example.demo.constant; + +public enum ItemSellStatus { + SELL, SOLD_OUT +} diff --git a/src/main/java/com/example/demo/entity/Item.java b/src/main/java/com/example/demo/entity/Item.java new file mode 100644 index 0000000000000000000000000000000000000000..fd928ec40568d3d97a5c70f385787b33ffd12496 --- /dev/null +++ b/src/main/java/com/example/demo/entity/Item.java @@ -0,0 +1,46 @@ +package com.example.demo.entity; + +import com.example.demo.constant.ItemSellStatus; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.time.LocalDateTime; + +import javax.persistence.*; + +import org.springframework.stereotype.Component; + + +@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) + 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 new file mode 100644 index 0000000000000000000000000000000000000000..eb04281e543f0e8a281643c555eab5cc9a2ba03f --- /dev/null +++ b/src/main/java/com/example/demo/repository/ItemRepository.java @@ -0,0 +1,18 @@ +package com.example.demo.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.repository.NoRepositoryBean; +import org.springframework.data.jpa.repository.Query; +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); +} diff --git a/src/main/resources/application-test.properties b/src/main/resources/application-test.properties new file mode 100644 index 0000000000000000000000000000000000000000..890ffb26b8654a1be92bdd574e9e3af81f2c4361 --- /dev/null +++ b/src/main/resources/application-test.properties @@ -0,0 +1,9 @@ +spring.datasource.driver-class-name=org.h2.Driver +spring.datasource.url=jdbc:h2:mem:test +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 diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index b4e1011bdb9d0abe20b93edb028c885db4f1fd29..20b99e33443ac2f8726c69cfa1ea53ee4d487b55 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,2 +1,24 @@ spring.application.name=demo -server.port = 3000 \ No newline at end of file +server.port = 3000 +spring.jpa.hibernate.ddl-auto=update +spring.jpa.show-sql=true + +spring.datasource.url=jdbc:mysql://localhost:3306/shop?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul +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.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 diff --git a/src/test/java/com/example/demo/repository/ItemRepositoryTest.java b/src/test/java/com/example/demo/repository/ItemRepositoryTest.java new file mode 100644 index 0000000000000000000000000000000000000000..d082a18c8556d2c3608415391ee97bf3eb53db81 --- /dev/null +++ b/src/test/java/com/example/demo/repository/ItemRepositoryTest.java @@ -0,0 +1,82 @@ +package com.example.demo.repository; + +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +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 org.junit.jupiter.api.DisplayName; +import java.time.LocalDateTime; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.junit.runner.RunWith; +import com.example.demo.constant.ItemSellStatus; +import java.util.List; +import com.querydsl.jpa.impl.JPAQueryFactory; +import com.querydsl.jpa.impl.JPAQuery; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; + +@SpringBootTest +@TestPropertySource(locations="classpath:application-test.properties") +@RunWith( SpringJUnit4ClassRunner.class ) +public class ItemRepositoryTest { + + @Autowired + ItemRepository itemRepository; + + 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()); + } + } + +} +