Grails sql查询

Vic*_*tin 10 sql grails

想象一下,我有这样的事情:

def example = {
   def temp = ConferenceUser.findAllByUser(User.get(session.user))
   [temp: temp]
}
Run Code Online (Sandbox Code Playgroud)

解释我的问题:虽然动态查找器非常易于使用和快速学习,但我必须替换我的网站的动态查找器以进行SQL查询,因为这是一项要求.由于我不太了解SQL,我的主要问题是:

a)我正在使用一个SQLS数据库,配置好驱动程序和数据源,我的网站就像现在一样工作.如果我想为sql语句替换"findAllByUser",我应该这样做:

def dataSource
...
def db = new Sql(dataSource)
def temp = db.rows("SELECT ... ")
Run Code Online (Sandbox Code Playgroud)

b)这会有效吗?我的意思是,如果我使用"findAllByUser",临时对象将是一个列表,我是否需要打开与数据库的连接=?

jam*_*man 22

使用Grails,您可以使用Dynamic Finders,Criteria Builders,Hibernate Query Language(HQL)Groovy SQL.

要使用Groovy SQL:

  1. import groovy.sql.Sql
  2. 请求带有def dataSourcedef sessionFactory用于事务的数据源引用
  3. Sql使用def sql = new Sql(dataSource)或创建对象def sql = new Sql(sessionFactory.currentSession.connection())
  4. 根据需要使用Groovy SQL

Grails将自动管理与数据源的连接.

Sql.rows返回一个可以传递给您的视图的列表.

例如:

import groovy.sql.Sql

class MyController {
    def dataSource
    def example = {
        def sql = new Sql(dataSource)
        [ temp: sql.rows("SELECT . . .") ]
    }
}
Run Code Online (Sandbox Code Playgroud)

在交易中:

import groovy.sql.Sql

class MyController {
    def sessionFactory
    def example = {
        def sql = new Sql(sessionFactory.currentSession.connection())
        [ temp: sql.rows("SELECT . . .") ]
    }
}
Run Code Online (Sandbox Code Playgroud)

我推荐使用Grails Persistence with GORM和GSQL这本书获取很多很棒的技巧和技巧.


hvg*_*des 10

是的,使用grails你可以做普通的sql和hql查询.HQL是'hibernate query language',允许您编写类似sql的语句,但使用您的域类和属性而不是表名和列名.要执行hql查询,请执行类似的操作

def UserList = ConferenceUser.executeQuery('from ConferenceUser cu where cu.user = ?', [user]),  
Run Code Online (Sandbox Code Playgroud)

你在这里有一个参数化查询 - executeQuery看到了什么?在hql字符串中,并将数组中的参数替换为方法的第二个参数([user]在本例中).

请参阅 http://grails.org/doc/latest/ref/Domain%20Classes/executeQuery.html

你可以看到如何使用Grails进行SQL查询

用于在grails中插入的SQL查询