/entity/Item.java에 변수및 테이블 설정
package com.example.entity;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import org.hibernate.annotations.CreationTimestamp;
import org.springframework.format.annotation.DateTimeFormat;
import com.fasterxml.jackson.annotation.JsonBackReference;
import lombok.Data;
import lombok.ToString;
@Entity // Entity 설정
@Data // @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode을 한꺼번에 설정
@Table(name = "ITEMTBL") // 테이블설정
@SequenceGenerator(name = "SEQ_ITEM_NO",
sequenceName = "SEQ_ITEM_NO",
initialValue = 1, allocationSize = 1)
public class Item {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,
generator = "SEQ_ITEM_NO" )
long no;
@Column(length = 100)
String name;
@Lob
String content;
long price;
long quantity;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm.ss.SSS")
@CreationTimestamp
@Column(name = "REGDATE", updatable = false)
Date regdate = null; //답글 작성일
// 외래키 설정
@ToString.Exclude
@JsonBackReference(value="member1")
@ManyToOne
@JoinColumn(name = "SELLER")
Member member;
}
/entity/Member.java에 변수및 테이블 설정
package com.example.entity;
import java.sql.Date;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.hibernate.annotations.CreationTimestamp;
import org.springframework.format.annotation.DateTimeFormat;
import com.fasterxml.jackson.annotation.JsonBackReference;
import lombok.Data;
@Data
@Entity
@Table(name = "MEMBERTBL")
public class Member {
@Id
@Column(length = 30)
String userid;
@Column(length = 200)
String userpw;
int age;
@Column(length = 15)
String phone;
@Column(length = 1)
String gender;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm.ss.SSS")
@CreationTimestamp
@Column(name = "REGDATE", updatable = false)
Date regdate = null; //답글 작성일
@Column(length = 20)
String role;
@Column(length = 1)
int block;
// 외래키 설정
@JsonBackReference(value="member1") // 순환 창조 방어(무한 조회 방어)
@OneToMany //erd table 참고해서 작성
private List<Item> item;
}
repository/ItemRepository.java 에 DB 쿼리문 대용으로 작성
package com.example.repository;
import java.util.List;
import org.springframework.data.domain.Pageable; // pageble 은 domain으로
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.example.entity.Item;
@Repository
public interface ItemRepository
extends JpaRepository<Item, Long> {
// SELECT i FROM Item i WHERE i.name LIKE '%' || ?1 || '%'
List<Item> findByNameContaining(String name);
// SELECT i FROM Item i WHERE i.name LIKE '%' || ?1 || '%'
// ORDER BY no DESC
List<Item> findByNameContainingOrderByNoDesc(String name, Pageable pageable);
}
controller/ItemController.java
package com.example.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import com.example.entity.Item;
import com.example.repository.ItemRepository;
@Controller
@RequestMapping(value = {"/item"})
public class ItemController {
@Autowired ItemRepository iRepository;
// 아래의 주소 같이 기입 하지 않으면 400 오류 남
// 127.0.0.1:8080/ROOT/item/selectlist.do?name=검색어&page=1
@GetMapping(value = {"/selectlist.do"})
public ModelAndView selectlistGET(
@RequestParam(name="name")String name,
@RequestParam(name="page", defaultValue = "1") int page){
// 페이지네이션 설정(0부터, 개수)
PageRequest pageRequest = PageRequest.of(page-1, 10);
List<Item> list
= iRepository.findByNameContainingOrderByNoDesc(name, pageRequest);
ModelAndView mav = new ModelAndView();
mav.setViewName("item_selectlist");
mav.addObject("list", list);
return mav;
}
}