본문 바로가기
개발/교육

(Thymeleaf/JPA) 58일차

by kakk789 2022. 6. 23.

타임리프(Thymeleaf)

  • 타임리프에서는 쿼리스트링이 아닌 URI 방식으로 파라미터를 전달하도록 권장
  • jsp의 포지션을 담당할 것임

URL 방식으로 파라미터 넘기기

@{'서비스명'/+${넘길 파라미터 값} }" 

타임리프 사용을 위한 세팅

<html xmlns:th="http://www.thymeleaf.org">

Thymeleaf  문법 설명

  • 타임리프에서 상태 유지 값은 '태그 안에 속성'으로 들어감
  • JSP 와 마찬가지로 ${} 표현식 을 사용한다

xmlns:th

  • 타임리프의 th속성을 사용하기 위해 선언된 네임스페이스

th:text

  • span태그의 경우 text에  값이 들어간다
th:text="${상태 유지된 변수}"
<span th:text="${name}"></span><br>

th:value

  • 보내줘야 할 값

th:each

  • JSTL의 foreach와 비슷한 기능
th:each="변수명:${상태 유지된 list변수}"
    <tr th:each="f:${list}">
        <td th:text="${f.bookid}"></td>
        <td th:text="${f.bookname}"></td>
        <td th:text="${f.publisher}"></td>
        <td th:text="${f.price}"></td>
    </tr>

th:name

  • input 태그는th:name 으로 객체 변수 이름과 맵핑 (무조건 사용한다고 생각)

타임리프는 template 폴더 밑에 있어야함(스프링 기준)


Spring Data JPA

  • mybatis 대신 JPA를 사용
  • JPA에서 VO는 Entity라고 표현

Spring Data JPA 기본 구성 요소

1. Project 생성 시 Spring Data JPA 선택하여 생성

2. JPA에서 필요한 디펜던시 설정 (pom.xml)

<dependency>
          <groupId>com.zaxxer</groupId>
          <artifactId>HikariCP</artifactId>
</dependency>

3. application.properties

  • mybatis설정과 동일한데 jps관련 설정이 들어감
주의할 설정 (spring.jpa.hibernate.ddl-auto = '옵션 입력')
create 

- 해당 속성에 의해 VO에 해당하는 Table이 자동으로 DB에 생성
- 해당 테이블이 있으면 DROP하고 새로 생성
create-drop
- create와 동일하지만 종료 시점에 DROP이 됨
update
- 변경 된 것만 DB에 반영
validate
- 엔티티와 테이블이 정상적으로 맵핑되었는지 여부 확인
none
- 사용하지 않음
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:XE
spring.datasource.username=DB 아이디
spring.datasource.password=DB비밀번호
server.port=8088
server.servlet.session.timeout=36000

spring.jpa.hibernate.ddl-auto=create
spring.jpa.properties.show_sql:true
spring.jpa.properties.format_sql:true
logging.level.org.hibernaate.SQL:debug

4. VO

VO에서 사용되는 어노테이션

import javax.persistence.Entity 

@Data
- setter/getter/tostring() 

@Entity

- VO 랑 매치되는 테이블을 생성

@Table(name="goods")
- 해당 이름의 테이블만들어줌

@Id
- PK 속성 정하기 
@Data
@Entity
@Table(name = "goods")
public class GoodsVO {
	@Id
	private int 'pk로 설정할 컬럼';
	private String 일반 컬럼;
}

5. DAO

public interface DAO명 extends JpaRepository<VO명, PK의 자료형> { }
public interface GoodsDAO extends JpaRepository<GoodsVO, Integer> {

}

6. Controller

  • 특이사항 없음, mybatis에서 처럼 Controller만들면 됨

7. Service

  • 특정 비즈니스 로직을 위한 Service 
  • 여러 dao의 함수를 필요로 할 경우 따로 service 로 만듦
    예를 들어 ) 입금/출금에 해당하는 각각의 메소드를 하나의 Service로 묶는 개념
  • 기존 DAO 만들 듯이 만들고 @Service 어노테이션 붙이기

8. 결과화면

  • 자동으로 'goods' 라는 테이블이 생성되었음

JpaRepository(공통 인터페이스)

  • CRUD 처리를 위한 공통 인터페이스

 save()

  • Insert/update 함수이다
  • 주 식별자가 이미 있으면 update, 없으면 insert 한다
반응형

'개발 > 교육' 카테고리의 다른 글

(JPA) 59일차  (0) 2022.06.24
(Spring) 57일차  (0) 2022.06.22
(Spring) 41일차  (0) 2022.05.27
(JSP)36일차  (0) 2022.05.20
(JSP)35일차  (0) 2022.05.19

댓글