트레이닝
37. Spring (아이템,상품 등록)
Romenest
2021. 10. 6. 16:29
1. 아이템 엔티티 생성 Item
package com.example.entity;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import org.hibernate.annotations.CreationTimestamp;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Entity
@Getter
@Setter
@NoArgsConstructor
@ToString
@Table(name = "ITEM")
@SequenceGenerator(name = "SEQ_ITEM_NO", sequenceName = "SEQ_ITEM_NO", allocationSize = 1, initialValue = 1)
public class Item {
@Id
@Column(name = "NO")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_ITEM_NO")
private Long no;
@Column(name = "NAME")
private String name;
@Column(name = "CONTENT")
private String content;
@Column(name = "PRICE")
private Long price;
@Column(name = "QUANTITY")
private Long quantity;
@CreationTimestamp
@Column(name = "REGDATE")
private Date regdate;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "SELLER_ID")
private Member member;
}
2. 아이템 저장소 생성 ItemRepository
package com.example.repository;
import java.util.List;
import com.example.entity.Item;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
//spring boot, mybatis (저장소가 쿼리문 을 이용함), oracle, restful
@Repository
public interface ItemRepository extends JpaRepository<Item, Long> {
// SELECT 검색명 FROM 테이블명
// findAll()
@Query(value = "SELECT * FROM Item", nativeQuery = true)
public List<Item> querySelectItems();
// SELECT 검색명 FROM 테이블명 WHERE 조건
// findByNo()
@Query(value = "SELECT * FROM Item WHERE NO=:no", nativeQuery = true)
public Item querySelectItemWhere(@Param("no") Long no);
}
3. 아이템 서비스 생성 ItemServiceImpl
package com.example.service;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import com.example.entity.Item;
import com.example.repository.ItemRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class ItemServiceImpl {
@Autowired
ItemRepository iRepository;
@Autowired
EntityManagerFactory emf;
public List<Item> selectItemList() {
// iRepository.findAll();
return iRepository.querySelectItems();
}
public Item selectItemOne(long no) {
// iRepository.findById(id).orElse(null);
return iRepository.querySelectItemWhere(no);
}
public void insertBatch(List<Item> list) {
iRepository.saveAll(list);
}
public void insertBatch1(List<Item> list) {
EntityManager em = emf.createEntityManager();
em.getTransaction().begin(); // 트렌젝션 시작
for (Item item : list) {
em.persist(item);
}
em.getTransaction().commit(); // commit(적용) or rollback(되돌리기) 선택
}
// Hibernate : insert into item(content,seller_id,name,price,quantity)
// DML SQL문 (추가 , 삭제 , 수정 , 조회) CRUD
// INSERT INTO 테이블명(컬럼명) VALUES(추가할값)
// DELETE FROM 테이블명 WHERE 조건
// UPDATE 테이블명 SET 컬럼명= 변경값 , 컬럼명=변경값 WHERE 조건
// SELECT * FROM 테이블명
public void insertBatch2(List<Item> list) {
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
// Item 은 엔티티의 클래스명
// INSERT INTO 테이블명(컬럼명) VALUES(추가할값)
String sql = " INSERT INTO Item(NO, NAME, CONTENT, " + " PRICE, QUANTITY, REGDATE, SELLER_ID) "
+ " VALUES(SEQ_ITEM_NO.NEXTVAL, :name, " + " :content, :price, :quantity, "
+ " CURRENT_TIMESTAMP, :member) ";
for (Item item : list) {
em.createNativeQuery(sql).setParameter("name", item.getName()).setParameter("content", item.getContent())
.setParameter("price", item.getPrice()).setParameter("quantity", item.getQuantity())
.setParameter("member", item.getMember().getEmail()).executeUpdate();
}
em.getTransaction().commit();
}
public void updateBatch(List<Item> list) {
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
// Item 은 엔티티의 클래스명
// UPDATE 테이블명 SET 컬럼명= 변경값 , 컬럼명=변경값 WHERE 조건
String sql = "UPDATE Item SET NAME=:name,CONTENT=:content, PRICE=:price, QUANTITY=:quantity WHERE NO=:no AND SELLER_ID=:member";
for (Item item : list) {
em.createNativeQuery(sql).setParameter("name", item.getName()).setParameter("content", item.getContent())
.setParameter("price", item.getPrice()).setParameter("quantity", item.getQuantity())
.setParameter("no", item.getNo()).setParameter("member", item.getMember().getEmail())
.executeUpdate();
}
em.getTransaction().commit();
}
public void deleteBatch(List<Item> list) {
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
// Item 은 엔티티의 클래스명
// DELETE FROM 테이블명 WHERE 조건
String sql = "DELETE FROM Item WHERE NO=:no AND SELLER_ID=:member";
for (Item item : list) {
em.createNativeQuery(sql).setParameter("no", item.getNo())
.setParameter("member", item.getMember().getEmail()).executeUpdate();
}
em.getTransaction().commit();
}
}
- sql, query문을 이용함