Sangwon Coding
Spring Boot - 샘플 데이터 생성 본문
샘플 데이터 생성 전 기존의 데이터를 초기화

CategorySample.java
package com.example.study.sampledata;
import com.example.study.StudyApplicationTests;
import com.example.study.model.entity.Category;
import com.example.study.repository.CategoryRepository;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.TestPropertySource;
import java.util.Arrays;
import java.util.List;
@Slf4j
public class CategorySample extends StudyApplicationTests {
@Autowired
private CategoryRepository categoryRepository;
@Test
public void createSample(){
List<String> category = Arrays.asList("COMPUTER","CLOTHING","MULTI_SHOP","INTERIOR","FOOD","SPORTS","SHOPPING_MALL","DUTY_FREE","BEAUTY");
List<String> title = Arrays.asList("컴퓨터-전자제품","의류","멀티샵","인테리어","음식","스포츠","쇼핑몰","면세점","화장");
for(int i = 0; i < category.size(); i++){
String c = category.get(i);
String t = title.get(i);
Category create = Category.builder().type(c).title(t).build();
categoryRepository.save(create);
}
}
}
PartnerSample.java
package com.example.study.sampledata;
import com.example.study.StudyApplicationTests;
import com.example.study.model.entity.Category;
import com.example.study.model.entity.Partner;
import com.example.study.repository.CategoryRepository;
import com.example.study.repository.PartnerRepository;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Random;
@Slf4j
public class PartnerSample extends StudyApplicationTests {
private Random random;
@Autowired
private PartnerRepository partnerRepository;
@Autowired
private CategoryRepository categoryRepository;
@Test
public void sampleCreate(){
random = new Random();
List<Category> categoryList = categoryRepository.findAll();
for(int i = 0; i < categoryList.size(); i++){
Category category = categoryList.get(i);
for(int j = 1; j < 10; j++){
// 가입 상태 랜덤
int div = (random.nextInt(10)+1) % 2;
String status = (div == 0 ? "REGISTERED" : "UNREGISTERED");
Partner partner = Partner.builder()
.category(category)
.name(category.getTitle()+j+" 호점")
.status(status)
.address("서울시 강남구 "+j+"번길"+random.nextInt(100)+1+"호")
.callCenter("070-"+String.format("%04d", random.nextInt(100)+1)+"-"+String.format("%04d", random.nextInt(100)+1))
.partnerNumber("010-1111-"+String.format("%04d", i))
.businessNumber((random.nextInt(999999999)+1)+""+j)
.ceoName(j+" 대표")
.registeredAt(getRandomDate())
.unregisteredAt(status.equals("UNREGISTERED") ? getRandomDate() : null )
.build();
log.info("{}",partner);
partnerRepository.save(partner);
}
}
}
private LocalDateTime getRandomDate(){
return LocalDateTime.of(2019,getRandomNumber(),getRandomNumber(),getRandomNumber(),getRandomNumber(),getRandomNumber());
}
private int getRandomNumber(){
return random.nextInt(11)+1;
}
}
ItemSample.java
package com.example.study.sampledata;
import com.example.study.StudyApplicationTests;
import com.example.study.model.entity.Category;
import com.example.study.model.entity.Item;
import com.example.study.model.entity.Partner;
import com.example.study.model.enumclass.ItemStatus;
import com.example.study.repository.CategoryRepository;
import com.example.study.repository.ItemRepository;
import com.example.study.repository.PartnerRepository;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Random;
@Slf4j
public class ItemSample extends StudyApplicationTests {
private Random random = new Random();
@Autowired
private ItemRepository itemRepository;
@Autowired
private PartnerRepository partnerRepository;
@Autowired
private CategoryRepository categoryRepository;
@Test
public void createAll(){
createHomeAppliance();
createClothing();
createMultiShop();
createInterior();
createFood();
createSports();
createShoppingMall();
createDutyFree();
createBeauty();
}
@Test
public void createHomeAppliance(){
String type = "COMPUTER";
Category category = categoryRepository.findByType(type).get();
List<Partner> partnerList = partnerRepository.findByCategory(category);
for(Partner p : partnerList){
for(int i = 1 ; i < 6; i ++){
int div = (random.nextInt(10)+1) % 2;
ItemStatus status = (div == 0 ? ItemStatus.REGISTERED : ItemStatus.UNREGISTERED);
Item item = Item.builder()
.partner(p)
.status(status)
.name(category.getTitle()+i+"호")
.title(p.getName()+"의 가전제품"+i+"호")
.price(BigDecimal.valueOf((long)random.nextInt(999999)+1))
.content(p.getName()+"의 가전제품"+i+"호"+"의 가전제품 입니다. 2019년도 신제품 입니다")
.brandName(p.getName())
.registeredAt(getRandomDate())
.unregisteredAt(status.equals(ItemStatus.UNREGISTERED) ? getRandomDate() : null )
.build();
itemRepository.save(item);
}
}
}
@Test
public void createClothing(){
String type = "CLOTHING";
Category category = categoryRepository.findByType(type).get();
List<Partner> partnerList = partnerRepository.findByCategory(category);
for(Partner p : partnerList){
for(int i = 1 ; i < 6; i ++){
int div = (random.nextInt(10)+1) % 2;
ItemStatus status = (div == 0 ? ItemStatus.REGISTERED : ItemStatus.UNREGISTERED);
Item item = Item.builder()
.partner(p)
.status(status)
.name(category.getTitle()+i+"호")
.title(p.getName()+"의 의류제품"+i+"호")
.price(BigDecimal.valueOf((long)random.nextInt(999999)+1))
.content(p.getName()+"의 의류제품"+i+"호"+"의 겨울 상품 입니다. 2029년도 신제품 입니다")
.brandName(p.getName())
.registeredAt(getRandomDate())
.unregisteredAt(status.equals(ItemStatus.UNREGISTERED) ? getRandomDate() : null )
.build();
itemRepository.save(item);
}
}
}
@Test
public void createMultiShop(){
String type = "MULTI_SHOP";
Category category = categoryRepository.findByType(type).get();
List<Partner> partnerList = partnerRepository.findByCategory(category);
for(Partner p : partnerList){
for(int i = 1 ; i < 6; i ++){
int div = (random.nextInt(10)+1) % 2;
ItemStatus status = (div == 0 ? ItemStatus.REGISTERED : ItemStatus.UNREGISTERED);
Item item = Item.builder()
.partner(p)
.status(status)
.name(category.getTitle()+i+"호")
.title(p.getName()+"의 XX 제품"+i+"호")
.price(BigDecimal.valueOf((long)random.nextInt(999999)+1))
.content(p.getName()+"의 XX 제품"+i+"호"+"의 여러가지 상품 입니다. 2021년도 신제품 입니다")
.brandName(p.getName())
.registeredAt(getRandomDate())
.unregisteredAt(status.equals(ItemStatus.UNREGISTERED) ? getRandomDate() : null )
.build();
itemRepository.save(item);
}
}
}
@Test
public void createInterior(){
String type = "INTERIOR";
Category category = categoryRepository.findByType(type).get();
List<Partner> partnerList = partnerRepository.findByCategory(category);
for(Partner p : partnerList){
for(int i = 1 ; i < 6; i ++){
int div = (random.nextInt(10)+1) % 2;
ItemStatus status = (div == 0 ? ItemStatus.REGISTERED : ItemStatus.UNREGISTERED);
Item item = Item.builder()
.partner(p)
.status(status)
.name(category.getTitle()+i+"호")
.title(p.getName()+"의 가구"+i+"호")
.price(BigDecimal.valueOf((long)random.nextInt(999999)+1))
.content(p.getName()+"의 가구"+i+"호"+"의 원룸에 들어가는. 2023년도 신제품 입니다")
.brandName(p.getName())
.registeredAt(getRandomDate())
.unregisteredAt(status.equals(ItemStatus.UNREGISTERED) ? getRandomDate() : null )
.build();
itemRepository.save(item);
}
}
}
@Test
public void createFood(){
String type = "FOOD";
Category category = categoryRepository.findByType(type).get();
List<Partner> partnerList = partnerRepository.findByCategory(category);
for(Partner p : partnerList){
for(int i = 1 ; i < 6; i ++){
int div = (random.nextInt(10)+1) % 2;
ItemStatus status = (div == 0 ? ItemStatus.REGISTERED : ItemStatus.UNREGISTERED);
Item item = Item.builder()
.partner(p)
.status(status)
.name(category.getTitle()+i+"호")
.title(p.getName()+"의 제빵"+i+"호")
.price(BigDecimal.valueOf((long)random.nextInt(999999)+1))
.content(p.getName()+"의 제빵"+i+"호"+"의 생일 케이크 입니다")
.brandName(p.getName())
.registeredAt(getRandomDate())
.unregisteredAt(status.equals(ItemStatus.UNREGISTERED) ? getRandomDate() : null )
.build();
itemRepository.save(item);
}
}
}
@Test
public void createSports(){
String type = "SPORTS";
Category category = categoryRepository.findByType(type).get();
List<Partner> partnerList = partnerRepository.findByCategory(category);
for(Partner p : partnerList){
for(int i = 1 ; i < 6; i ++){
int div = (random.nextInt(10)+1) % 2;
ItemStatus status = (div == 0 ? ItemStatus.REGISTERED : ItemStatus.UNREGISTERED);
Item item = Item.builder()
.partner(p)
.status(status)
.name(category.getTitle()+i+"호")
.title(p.getName()+"의 겨울 스포츠"+i+"호")
.price(BigDecimal.valueOf((long)random.nextInt(999999)+1))
.content(p.getName()+"의 겨울 스포츠"+i+"호"+"의 스키 상품 입니다")
.brandName(p.getName())
.registeredAt(getRandomDate())
.unregisteredAt(status.equals(ItemStatus.UNREGISTERED) ? getRandomDate() : null )
.build();
itemRepository.save(item);
}
}
}
@Test
public void createShoppingMall(){
String type = "SHOPPING_MALL";
Category category = categoryRepository.findByType(type).get();
List<Partner> partnerList = partnerRepository.findByCategory(category);
for(Partner p : partnerList){
for(int i = 1 ; i < 6; i ++){
int div = (random.nextInt(10)+1) % 2;
ItemStatus status = (div == 0 ? ItemStatus.REGISTERED : ItemStatus.UNREGISTERED);
Item item = Item.builder()
.partner(p)
.status(status)
.name(category.getTitle()+i+"호")
.title(p.getName()+"의 OO 상품"+i+"호")
.price(BigDecimal.valueOf((long)random.nextInt(999999)+1))
.content(p.getName()+"의 OO상품"+i+"호"+"의 EE 상품 입니다")
.brandName(p.getName())
.registeredAt(getRandomDate())
.unregisteredAt(status.equals(ItemStatus.UNREGISTERED) ? getRandomDate() : null )
.build();
itemRepository.save(item);
}
}
}
@Test
public void createDutyFree(){
String type = "DUTY_FREE";
Category category = categoryRepository.findByType(type).get();
List<Partner> partnerList = partnerRepository.findByCategory(category);
for(Partner p : partnerList){
for(int i = 1 ; i < 6; i ++){
int div = (random.nextInt(10)+1) % 2;
ItemStatus status = (div == 0 ? ItemStatus.REGISTERED : ItemStatus.UNREGISTERED);
Item item = Item.builder()
.partner(p)
.status(status)
.name(category.getTitle()+i+"호")
.title(p.getName()+"의 면세상품"+i+"호")
.price(BigDecimal.valueOf((long)random.nextInt(999999)+1))
.content(p.getName()+"의 면세상품"+i+"호"+"의 면세 상품 입니다")
.brandName(p.getName())
.registeredAt(getRandomDate())
.unregisteredAt(status.equals(ItemStatus.UNREGISTERED) ? getRandomDate() : null )
.build();
itemRepository.save(item);
}
}
}
@Test
public void createBeauty(){
String type = "BEAUTY";
Category category = categoryRepository.findByType(type).get();
List<Partner> partnerList = partnerRepository.findByCategory(category);
for(Partner p : partnerList){
for(int i = 1 ; i < 6; i ++){
int div = (random.nextInt(10)+1) % 2;
ItemStatus status = (div == 0 ? ItemStatus.REGISTERED : ItemStatus.UNREGISTERED);
Item item = Item.builder()
.partner(p)
.status(status)
.name(category.getTitle()+i+"호")
.title(p.getName()+"의 OO 화장품"+i+"호")
.price(BigDecimal.valueOf((long)random.nextInt(99999)+1))
.content(p.getName()+"의 OO 화장품"+i+"호"+"의 상품 입니다")
.brandName(p.getName())
.registeredAt(getRandomDate())
.unregisteredAt(status.equals(ItemStatus.UNREGISTERED) ? getRandomDate() : null )
.build();
itemRepository.save(item);
}
}
}
private LocalDateTime getRandomDate(){
return LocalDateTime.of(2019,getRandomNumber(),getRandomNumber(),getRandomNumber(),getRandomNumber(),getRandomNumber());
}
private int getRandomNumber(){
return random.nextInt(11)+1;
}
}
UserSample.java
package com.example.study.sampledata;
import com.example.study.StudyApplicationTests;
import com.example.study.model.entity.AdminUser;
import com.example.study.model.entity.User;
import com.example.study.model.enumclass.UserStatus;
import com.example.study.repository.AdminUserRepository;
import com.example.study.repository.UserRepository;
import lombok.extern.slf4j.Slf4j;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import java.time.LocalDateTime;
import java.util.Random;
@Slf4j
public class UserSample extends StudyApplicationTests {
private Random random;
@Autowired
private UserRepository userRepository;
@Test
public void sampleCreate(){
random = new Random();
for(int i = 1 ; i < 1001; i++){
// 가입 상태 랜덤
int div = (random.nextInt(10)+1) % 2;
UserStatus status = (div == 0 ? UserStatus.REGISTERED : UserStatus.UNREGISTERED);
User user = User.builder()
.account("TestUser"+i)
.password("password"+i)
.status(status)
.email("TestUser"+i+"@gmail.com")
.phoneNumber("010-1111-"+String.format("%04d", i))
.registeredAt(getRandomDate())
.unregisteredAt(status.equals(UserStatus.UNREGISTERED) ? getRandomDate() : null )
.build();
log.info("{}",user);
userRepository.save(user);
}
}
private LocalDateTime getRandomDate(){
return LocalDateTime.of(2019,getRandomNumber(),getRandomNumber(),getRandomNumber(),getRandomNumber(),getRandomNumber());
}
private int getRandomNumber(){
return random.nextInt(11)+1;
}
}
OrderDetailSample.java
package com.example.study.sampledata;
import com.example.study.StudyApplicationTests;
import com.example.study.model.entity.Item;
import com.example.study.model.entity.OrderDetail;
import com.example.study.model.entity.OrderGroup;
import com.example.study.model.entity.User;
import com.example.study.model.enumclass.OrderType;
import com.example.study.repository.ItemRepository;
import com.example.study.repository.OrderDetailRepository;
import com.example.study.repository.OrderGroupRepository;
import com.example.study.repository.UserRepository;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
@Slf4j
public class OrderDetailSample extends StudyApplicationTests {
private Random random = new Random();
@Autowired
private UserRepository userRepository;
@Autowired
private ItemRepository itemRepository;
@Autowired
private OrderDetailRepository orderDetailRepository;
@Autowired
private OrderGroupRepository orderGroupRepository;
@Test
public void createOrder(){
List<User> userList = userRepository.findAll();
for(int j = 0; j < 1; j++){
User user = userList.get(j);
item(user);
}
userList.forEach(user -> {
int orderCount = random.nextInt(10) + 1;
for (int i = 0; i < orderCount; i++) {
item(user);
}
});
}
private void item(User user){
double totalAmount = 0;
List<Item> items = new ArrayList<>();
List<OrderDetail> orderHistoryDetails = new ArrayList<>();
int itemCount = random.nextInt(10)+1;
for(int i = 0 ; i < itemCount; i ++){
// db에 아이템 갯수가 총 500개 ( * 자신의 샘플에 맞추세요 )
int itemNumber = random.nextInt(405)+1;
Item item = itemRepository.findById((long)itemNumber).get();
totalAmount += item.getPrice().doubleValue();
items.add(item);
}
int s = random.nextInt(3)+1;
String status = "ORDERING";
String paymentType = "BANK_TRANSFER";
switch (s){
case 1 :
status = "ORDERING";
paymentType = "BANK_TRANSFER";
break;
case 2 :
status = "COMPLETE";
paymentType = "CARD";
break;
case 3 :
status = "CONFIRM";
paymentType = "CHECK_CARD";
break;
}
int t = random.nextInt(2)+1;
OrderType type = t==1? OrderType.ALL:OrderType.EACH;
OrderGroup orderGroup = OrderGroup.builder()
.user(user)
.status(status)
.orderType(type)
.revAddress("경기도 분당구 판교역로")
.revName(user.getEmail())
.paymentType(paymentType)
.totalPrice(new BigDecimal(totalAmount))
.orderAt(getRandomDate())
.totalQuantity(itemCount)
.arrivalDate(getRandomDate().plusDays(3))
.orderDetailList(orderHistoryDetails)
.build();
orderGroupRepository.save(orderGroup);
for(Item item : items){
String orderDetailStatus = "ORDERING";
switch (random.nextInt(3)+1){
case 1 :
orderDetailStatus = "ORDERING";
break;
case 2 :
orderDetailStatus = "COMPLETE";
break;
case 3 :
orderDetailStatus = "CONFIRM";
break;
}
OrderDetail orderDetail = OrderDetail.builder()
.orderGroup(orderGroup)
.item(item)
.arrivalDate(type.equals(OrderType.ALL) ? orderGroup.getArrivalDate() : getRandomDate())
.status(type.equals(OrderType.ALL) ? status :orderDetailStatus)
.build();
orderDetailRepository.save(orderDetail);
orderHistoryDetails.add(orderDetail);
}
}
private LocalDateTime getRandomDate(){
return LocalDateTime.of(2019,getRandomNumber(),getRandomNumber(),getRandomNumber(),getRandomNumber(),getRandomNumber());
}
private int getRandomNumber(){
return random.nextInt(11)+1;
}
}
실행 후 DB 결과






'Spring > Spring Boot (어드민 페이지)' 카테고리의 다른 글
Spring Boot - 페이징 처리 (0) | 2020.01.01 |
---|---|
Spring Boot - 추상화 코드 적용 (0) | 2020.01.01 |
Spring Boot - JPA Enum 형태의 값 관리 (0) | 2020.01.01 |
Spring Boot - 주문내역 API CRUD (0) | 2020.01.01 |
Spring Boot - 상품 API CRUD (0) | 2020.01.01 |