Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

사적인 블로그

[JPA] CRUD 와 scaffold 본문

TIL

[JPA] CRUD 와 scaffold

DevYeri 2024. 12. 5. 17:07

이걸 이슈라고 해야할지 TIL로 해야할지? 이슈를 풀면서 배웠으니 일단 TIL에 넣는다.

 

 

Grails를 쓰는데, 서버가 돌아가는데에 있어서는 악명이 높은 듯 하지만

JPA와 같은 CRUD 기능을 딸깍-으로 해주는 편리한 기능이 있다.

scaffold 기능인데,

(사담이지만 scaffold를 듣고 볼때마다 007 시리즈 OST였던 skyfall이 생각남,,, 먼가 웅장쓰)

흐름은 매우 간단하다.


1. 도메인을 만든다.

1) 컬럼명을 차곡차곡 넣는다.
특징 : FK를 사용할 때에는 연동할 도메인을 통째로 생성해 넣는다. ex) User user
특징 : id는 별도 생성이 필요하지 않다.

 

2) static constraints = { ex) dateCreated nullable : true, maxsize:50, unique:true }
와 같이 컬럼에 필요한 제약조건들을 넣는다.

 

3) static mapping ={ datasources 또는 디폴트값, 조회시 order 기준 등을 넣는다 }

 

 

- 도메인을 만들면 똑똑한 IDE에서 도메인별로 Controller, Service, Views 딸깍 버튼을 만들어준다.

이미지 예시는 인텔리제이임

 

2. Controller를 생성한다.

 

위 버튼 중 Controller를 딸깍 하면 Controller명은 [도메인명]Controller 이렇게 생성됨.

 

- 컨트롤러를 생성하면 자동으로 기본적인 CRUD를 할 수 있는 기본 메서드들을 생성해준다.

index, show, create, save, edit, update, delete

 

여기서 기본 CRUD 기능으로만 끝낼거라면

static scaffold = true 한스푼 추가해주면 자동 스캐폴딩이 된다.

 

그런데 만약 같은 update라고 하더라도 상세 조건을 추가로 주게된다면

static scaffold = false로 바꾸던가 없애던가 하셔야!

추가로, view 페이지도 자동생성 해주는데, 여기서도 자동으로 스캐폴딩되지 않도록 코드를 잘 봐야한다

<g:form url="[resource:domainInstance, action:'delete']" method="DELETE">
   <fieldset class="buttons">
      <g:link class="edit" action="edit" resource="${domainInstance}">
          <g:message code="default.button.edit.label" default="Edit" />
      </g:link>
      <g:actionSubmit class="delete" action="delete" 
          value="${message(code: 'default.button.delete.label', default: 'Delete')}" 
        onclick="return confirm('${message(code: 'default.button.delete.confirm.message', 
        default: 'Are you sure?')}');" />
   </fieldset>
</g:form>