2014-03-04 39 views
0

当前我正在使用grails和MySQL.i想要执行我自己的查询示例“SELECT fullName from User”,同时单击锚标签。如何在grails中传递sql查询

它我的例子中,我摸索出

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); 
    } 
} 

任何人可以提出如何解决这个 我想知道如何写这个

控制器和模型

谢谢,

+2

你能不能摆脱InsertData'的',只是有你的控制器返回'[名称:U ser.list()。fullName]' –

+2

我强烈建议你阅读GORM手册。有很多方法可用于查询数据。 –

+0

iam将该查询作为示例写入。实际上,我想通过自己的查询来执行。 – user3363670

回答

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(); 
} 
} 
0

InsertDat一个类将是一个服务(InsertDataService),并将注入到控制器InsertDataController中。类User将是一个域类。然后

Controller类会是什么样子:

class InsertDataController { 
    def insertDataService 

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

你并不需要注入数据源为执行您的自定义查询,试试这个在您的显示方法:

User.findAll(“USR .fullName从使用者USR“)?每个{用户> 的println用户 }