사적인 블로그
[JPA] CRUD 와 scaffold 본문
이걸 이슈라고 해야할지 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>
'TIL' 카테고리의 다른 글
[JS] HTML <a>태그에서 JS로 alert 띄우기 (0) | 2024.12.18 |
---|---|
[OS/Window] 포트 찾고 프로세서 kill 하는 CMD 명령어 (0) | 2024.12.13 |
[Java] String = 파라미터, null 인가 "" 인가 (1) | 2024.12.13 |
[보안] reCAPTCHA site key(client key), secret key(server key) (1) | 2024.12.13 |
[SEO] 검색엔진 잘 잡히려면 robots, sitemap (2) | 2024.12.10 |