如何在grails中传递sql查询

时间:2014-03-04 11:42:13

标签: sql grails grails-2.0 gsp

目前我正在使用grails和MySQL.i想要在点击锚标签时执行我自己的查询示例“SELECT fullName from User”。

我的例子,我解决了

class InsertDataController {

def index() { }
def sample() {
    InsertData insertData=new InsertData();
    insertData.show();
}
}

域类

import groovy.sql.Sql 
class InsertData {

def dataSource

def show(){
   System.out.println("demo show");
   def sql = new Sql(dataSource)
        def rows = sql.rows("SELECT fullName from User")

        rows.each { row ->
                System.out.println("demo data"+row.fullName);
            log.debug row.fullName
        }

        sql.close()
}


class User {
        String userName
        String password
        String fullName
        String toString(){
            "${fullName}"
        }
    static constraints = {
        fullName();
        userName(unique:true);
        password(password:true);
    }
}

任何人都可以建议如何解决这个问题 我想知道如何为这个

编写控制器和模型

谢谢,

3 个答案:

答案 0 :(得分:0)

InsertData类将是一个服务(InsertDataService),它将注入到控制器InsertDataController中。 User类将是一个域类。

控制器类看起来像:

class InsertDataController {
    def insertDataService

    def index() { }
    def sample() {
        insertDataService.show()
    }
}

答案 1 :(得分:0)

您无需注入数据源来执行自定义查询,请在show方法中尝试此操作:

User.findAll(“usr.fullName from User usr”)?. each {user->     println用户 }

答案 2 :(得分:0)

        Instead of using def sql = new Sql(dataSource) in domain class use 
         def sql = Sql.newInstance(dataSource)


        your Domain class can be modified as 

        import groovy.sql.Sql 
        class InsertData {

        def dataSource

        def show(){

            def sql = Sql.newInstance(dataSource)
                sql.eachRow("SELECT fullName from User")
    {
    println "the fullname is ${it.fullname}"
    }

        }



YOUR CONTROLLER AS

class InsertDataController {

def index() { }
def sample() {
    InsertData insertData=new InsertData();
    insertData.show();
}
}