JPA_ DB 엔티티 / 공통 클래스

김지영·2024년 3월 19일

jpa

목록 보기
3/18
post-thumbnail

*자바로 작성시에는 소문자로 작성해주어야 함!

코딩순서 : model(테이블과 비슷) -> repository

1. 공통 클래스 어노테이션

@MappedSuperclass

@EntityListeners(AuditingEntityListener.class)

  • JPA가 SQL 문을 생성할 때 아래 공통컬럼(속성)을 추가해서 생성시켜주는 어노테이션
  • 공통컬럼(속성) : insertTime, updateTime
  • 예) insert into tb_dept(dno, dname, loc) values (1,'sales','부산');
    => 붙이면 : insert into tb_dept(dno, dname, loc, insert_time, update_time)
    values (1,'sales','부산', '2024/03/19...', '2024/03/19...');
  • 추가처리 - JPA 에서 사용할때 추상클래스로 사용함

2. 상속

  • entity -> BaseTimeEntity 클래스 생성

  • 공통 컬럼이 있을시에는
    @MappedSuperclass 와 @EntityListeners(AuditingEntityListener.class) 어노테이션을 달아주고 추상클래스를 달아 상속시켜준다.

3. 레포지토리 클래스 : DB CRUD 함수가 있는 인터페이스

- Repository 클래스 생성

  • 사용법 : interface 이름 extends JpaRepository<엔티티명,기본키속성자료형>

=> 엔티티명 : DB 와 연결될 엔티티 클래스명
=> 기본키속성자료형 : 엔티티 클래스의 기본키 속성 자료형 명시
=> JPA 기본 함수 사용 가능

  • findAll() : 전체 조회 , 자동 sql 문 생성
  • findById(기본키) : 상세 조회(1건), 자동 sql 문 생성
  • save(객체) : 저장/수정을 알아서 실행함
    저장 : 기본키가 없으면 insert
    수정 : 기본키가 있으면 update
  • deleteById(기본키): 삭제 , 자동 sql 문 생성

▶ CRUD 용어 :
C(Create==Insert), R(Read==Select)
U(Update==Update), D(Delete=Delete)
DML(데이터 조작어) 문임

4. CRUD DB 함수를 실행하는 서비스 함수 정의

  • 목적 : MVC 디자인 패턴에 의해 역할에 따라 자바 클래스를 정의함
  • @Service, @Repository, 등
    : IOC, 스프링 서버가 실행될때 클래스를 생성해줌

5. 전체조회 만들기

-DeptService

@Service
public class DeptService {

//    DB CRUD 클래스 받기 : JPA 제공 함수 사용 가능
    @Autowired
    DeptRepository deptRepository;

    public List<Dept> findAll() {
//        JPA 전체조회 함수 실행 : select 문 자동 작성
        List<Dept> list = deptRepository.findAll();
        return list;
    }
}

-DeptController

@Slf4j
@Controller
@RequestMapping("/basic")
public class DeptController {

//    서비스 클래스 가져오기
    @Autowired
    DeptService deptService;

//    전체 조회
    @GetMapping("/dept")
    public String getDeptAll(Model model) {
//        DB 전체 조회 서비스 함수 실행
        List<Dept> list = deptService.findAll();
//        결과를 jsp 전송
        model.addAttribute("list",list);
        return "basic/dept/dept_all.jsp";
    }
}

-detp_all.jsp (body부분)

<body>
<%--    머리말 --%>
<jsp:include page="../../common/header.jsp" />
<%--    본문--%>
<div class="container">
    <%--        TODO: 검색어 입력 상자 --%>

    <%--        TODO: 테이블 --%>
    <table class="table">
        <thead>
        <tr>
            <th scope="col">dno</th>
            <th scope="col">dname</th>
            <th scope="col">loc</th>
            <th scope="col">insertTime</th>
            <th scope="col">updateTime</th>
        </tr>
        </thead>
        <tbody>
        <c:forEach var="data" items="${list}">
            <tr>
                <td><a href="/basic/dept/edition/${data.dno}">${data.dno}</a></td>
                <td>${data.dname}</td>
                <td>${data.loc}</td>
                <td>${data.insertTime}</td>
                <td>${data.updateTime}</td>
            </tr>
        </c:forEach>
        </tbody>
    </table>

    <%--        TODO: 페이지번호 --%>

    <%--        TODO: Add 버튼 --%>
    <div class="text-center">
        <a href="/basic/dept/addition" class="btn btn-primary">Add</a>
    </div>
</div>
<%--    꼬리말--%>
<jsp:include page="../../common/footer.jsp" />

</body>

profile
그냥 졍이라구하자

0개의 댓글