grails - 用大量变量更新域类对象的最佳方法是什么

标签 grails groovy constructor

假设我有 Employee 域类,我想从来自 UI 端的参数映射创建域类的对象。

我可以通过以下两种方式创建对象

  • 普通方式

  • Employee employee = new Employee(name: params.name, rollNo: params.rollNo)



    等等。如果域类有 20 个变量,那么我们需要在上面的构造函数中写入所有变量。
  • 以下是创建对象的最佳方法

  • Employee employee = new Employee(params)



    上面的构造函数将使用匹配的参数填充对象。对。

    现在我的问题来了。

    如果假设我有从 DB 获取的现有域类对象,现在我想从来自 UI 的 params 映射更新这个对象。
    什么是最好的方法(就像我们在上面的第二个选项中所做的那样)。

    最佳答案

    我认为最好使用命令对象并将其绑定(bind)到 Employee。

    这是示例伪代码:

    class EmployeeMgmtController {
        def editEmp(EmployeeCmd cmd){
            Employee editEmp = Employee.get(1)
            editEmp.properties = cmd
            editEmp.save()
        }
    }
    
    class EmployeeCmd{
        String id
    
        static constraints = {
            id blank:false,nullable:false
        }
    }
    

    或者,

    如果您在 Controller 上,并且仍想使用参数(并排除您不想绑定(bind)的任何字段):
    bindData(editEmp, params, [exclude:['firstName', 'lastName']])
    

    关于grails - 用大量变量更新域类对象的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35218182/

    相关文章:

    grails - 在 Grails PluginDescriptor.groovy 文件中注入(inject)服务?

    grails - 用 grails 开发 web 应用程序 - 不知道它是如何工作的

    java - Java中重载构造函数时

    grails - 是否可以在多对多关系中添加额外的属性?

    database - grails h2数据库创建表

    hibernate - 仅将一些属性绑定(bind)到 grails 域对象上?

    gradle - 将项目资源添加到Gradle Custom插件

    grails - 如何从输入中编写不包含一系列空格字符(' '的匹配项?

    java - 使用另一个类的方法而不使用构造函数

    java - 链表之外的字符串,对象的高效构造函数