[Grails] GORM의 간단한 사용법

8614 단어 Grails

노트 단계


각양각색의 모델을 구상했기 때문에 매번 기본적인 모델을 추가할 계획이다.

전제 조건

  • 기본적으로 Grails가 생성되며 version 열을 사용하지 않습니다.
  • 표는dbCreate 모드에서Grails를 이용하여 자동으로 생성된 표(진행하지 않은 상황에서 매번 설명)
  • 다비1


    예를 들어 회사 책상과 직원 책상이 있고 한 회사에서 여러 명의 직원이 일하는 경우.
    다음 두 가지 소스:.
    Company.groovy
    class Company {
        // 会社テーブルに該当するCompanyドメイン
        String name
        static constraints = {
        }
        static mapping = {
            version false
        }
    }
    
    Employee.groovy
    class Employee {
        // 社員テーブルに該当するEmployeeドメイン
        String name
        Company company
        static constraints = {
        }
        static mapping = {
            version false
        }
    }
    
    Employee 도메인에는 Company 도메인의 속성이 있습니다.
    그래, 어서 해 보자!그전에 Grails를 시작할 때 테스트 데이터를 등록하려고 Bootstrap을 했습니다.편집grooy는 다음과 같습니다.
    Bootstrap.groovy
    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 = {
        }
    }
    
    준비 완료!
    Grails를 활성화하면 다음 테이블이 생성됩니다.

    Company 테이블의 ID는 Employee 테이블(Employee 도메인)에 있습니다.
    느낌이 좋아요. 일반적인 탁자로 구성되어 있어요.
    그렇다면 실제로는 어떻게 Grails에서 가치를 얻는 게 좋을까요?이런 샘플은 아래와 같다.
    OneToMany
    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
        }
    }
    
    테스트이기 때문에 컨트롤러에 먼저 기입하세요.
    assert가 들어갔기 때문에 그렇습니다. 하지만 이 컨트롤러에 접근하면 Mr.A & Mr.B & Mr.C가 표시됩니다.

    좋은 웹페이지 즐겨찾기