[Grails] GORM의 간단한 사용법
8614 단어 Grails
노트 단계
각양각색의 모델을 구상했기 때문에 매번 기본적인 모델을 추가할 계획이다.
전제 조건
다비1
예를 들어 회사 책상과 직원 책상이 있고 한 회사에서 여러 명의 직원이 일하는 경우.
다음 두 가지 소스:.
Company.groovyclass Company {
// 会社テーブルに該当するCompanyドメイン
String name
static constraints = {
}
static mapping = {
version false
}
}
Employee.groovyclass Employee {
// 社員テーブルに該当するEmployeeドメイン
String name
Company company
static constraints = {
}
static mapping = {
version false
}
}
Employee 도메인에는 Company 도메인의 속성이 있습니다.
그래, 어서 해 보자!그전에 Grails를 시작할 때 테스트 데이터를 등록하려고 Bootstrap을 했습니다.편집grooy는 다음과 같습니다.
Bootstrap.groovyclass BootStrap {
def init = { servletContext ->
Environment.executeForCurrentEnvironment {
development {
def cmp1 = new Company(name:"BIG-Company").save(flush:true)
def cmp2 = new Company(name:"SMALL-Company").save(flush:true)
new Employee(name:"Mr.A", company: cmp1).save(flush:true)
new Employee(name:"Mr.B", company: cmp1).save(flush:true)
new Employee(name:"Mr.C", company: cmp1).save(flush:true)
new Employee(name:"Taro", company: cmp2).save(flush:true)
}
test {
println "test!"
}
production{
println "production!"
}
}
}
def destroy = {
}
}
준비 완료!
Grails를 활성화하면 다음 테이블이 생성됩니다.
Company 테이블의 ID는 Employee 테이블(Employee 도메인)에 있습니다.
느낌이 좋아요. 일반적인 탁자로 구성되어 있어요.
그렇다면 실제로는 어떻게 Grails에서 가치를 얻는 게 좋을까요?이런 샘플은 아래와 같다.
OneToManypackage bindingtest
class ManyToOneSampleController {
def index() {
// ドメインクラスにfindByNameなんてメソッドは定義してないぞ!?
// これがGORMの必殺技、ダイナミックファインダー!!
Company company = Company.findByName("BIG-Company")
// Employeeでも必殺ダイナミックファインダー!
// ちなみに複数のレコードを返す可能性がある場合は、findAllを使う。
// 全部のレコード取得するぜ、ちなみにCompanyプロパティにcompanyを持っている人ね。
List employees = Employee.findAllByCompany(company)
def text = employees.collect{it.name}.join(" & ")
// 取得されるレコードは当然BIG-Companyに所属する3人
// Taro さんはSMALL-Company所属なので取得されない
assert 3 == employees.size()
assert 'Mr.A & Mr.B & Mr.C' == text
// さて、取得された社員達ですが、彼らはプロパティにCompanyを持っています。
// と言う事は、ドメインのプロパティを使って別のドメインにアクセス出来るのです!
// ちなみにhead()は、リストの先頭要素を返すメソッド。
assert "BIG-Company" == employees.head().company.name
render text
}
}
테스트이기 때문에 컨트롤러에 먼저 기입하세요.
assert가 들어갔기 때문에 그렇습니다. 하지만 이 컨트롤러에 접근하면 Mr.A & Mr.B & Mr.C가 표시됩니다.
Reference
이 문제에 관하여([Grails] GORM의 간단한 사용법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/saba1024/items/7bddfa705c584af65117
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
class Company {
// 会社テーブルに該当するCompanyドメイン
String name
static constraints = {
}
static mapping = {
version false
}
}
class Employee {
// 社員テーブルに該当するEmployeeドメイン
String name
Company company
static constraints = {
}
static mapping = {
version false
}
}
class BootStrap {
def init = { servletContext ->
Environment.executeForCurrentEnvironment {
development {
def cmp1 = new Company(name:"BIG-Company").save(flush:true)
def cmp2 = new Company(name:"SMALL-Company").save(flush:true)
new Employee(name:"Mr.A", company: cmp1).save(flush:true)
new Employee(name:"Mr.B", company: cmp1).save(flush:true)
new Employee(name:"Mr.C", company: cmp1).save(flush:true)
new Employee(name:"Taro", company: cmp2).save(flush:true)
}
test {
println "test!"
}
production{
println "production!"
}
}
}
def destroy = {
}
}
package bindingtest
class ManyToOneSampleController {
def index() {
// ドメインクラスにfindByNameなんてメソッドは定義してないぞ!?
// これがGORMの必殺技、ダイナミックファインダー!!
Company company = Company.findByName("BIG-Company")
// Employeeでも必殺ダイナミックファインダー!
// ちなみに複数のレコードを返す可能性がある場合は、findAllを使う。
// 全部のレコード取得するぜ、ちなみにCompanyプロパティにcompanyを持っている人ね。
List employees = Employee.findAllByCompany(company)
def text = employees.collect{it.name}.join(" & ")
// 取得されるレコードは当然BIG-Companyに所属する3人
// Taro さんはSMALL-Company所属なので取得されない
assert 3 == employees.size()
assert 'Mr.A & Mr.B & Mr.C' == text
// さて、取得された社員達ですが、彼らはプロパティにCompanyを持っています。
// と言う事は、ドメインのプロパティを使って別のドメインにアクセス出来るのです!
// ちなみにhead()は、リストの先頭要素を返すメソッド。
assert "BIG-Company" == employees.head().company.name
render text
}
}
Reference
이 문제에 관하여([Grails] GORM의 간단한 사용법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/saba1024/items/7bddfa705c584af65117텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)