JPA 전체적인 구조

HUGO·2022년 10월 6일
0

JPA

목록 보기
3/6

/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;
    }
}

profile
갓 신생아 개발자 이야기

0개의 댓글