【问题标题】:Grails pure sql and domain classGrails 纯 sql 和域类
【发布时间】:2014-10-19 20:03:52
【问题描述】:
  1. 我有一个现有的 MySQL 数据库,在 grails 控制器中我想使用纯 SQL 查询而不是 GORM(运行逆向工程插件太难了)。

  2. 我要返回json对象

所以我的想法是,在控制器中,执行一个 sql 查询并将结果映射到一个对象,然后在 json 中呈现该对象(我已经看到了 grails REST 教程)。

要将 sql 查询结果映射到对象,我可以使用 grails 域类还是必须创建一个纯 groovy 对象?

我可以使用命令吗:

grails create-domain-class

或者我必须创建一个 DTO groovy 对象(在 src/groovy 文件夹中)?

【问题讨论】:

    标签: grails groovy grails-orm


    【解决方案1】:

    如果您的结果足够简单,您可以使用groovy.sql.Sql 类并直接在控制器中进行查询:

    def results = []
    Sql db = new Sql( dataSource )
    db.eachRow( "select avg( rating ) as rating, main_profile_id as id from profile" ) {
      results << [ it.id, it.rating ]
    }
    db.close()
    

    【讨论】:

      【解决方案2】:

      如果你想传递原生的sql那么你也可以使用spring jdbcTemplate。

      配置:

      导入 org.springframework.jdbc.core.JdbcTemplate

      豆子 = { ………… jdbcTemplate(JdbcTemplate) { 数据源 = ref('数据源') } }

      控制器:

      def jdbcTemplate
      List actionMethod(){
       String query = "your pure native query example select ........from table"
       List results =  jdbcTemplate.queryForList(queryStr)
       return   results as JSON
      ])
      }
      

      创建 DTO 对象并一一映射所需的列。我使用 DTO 方法,因为我要映射的列数非常少。

      【讨论】:

        【解决方案3】:

        您不需要创建 DTO 来解决您的问题,您只需要使用 HQL,如下所示:

        def result = Domain.executeQuery("FROM DOMAIN WHERE conditions");
        
        render result as JSON;
        

        我希望这能解决你的问题。

        【讨论】:

        • 域类在 grails 中默认是持久的。我不想使用域类,因为我不使用 GORM....我想我不能使用 HQL 对吗?
        • 请记住,Grails/GORM 使用 Hibernate 来提供对数据库的基本操作,但这是一种常规方式。因此,您使用 hibernate 编写的所有代码也使用 GORM 编写。但在你的情况下,这个插件很有用:grails.org/plugin/dto
        猜你喜欢
        • 2012-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多