想象一下,我有这样的事情:
def example = { def temp = ConferenceUser.findAllByUser(User.get(session.user)) [temp: temp] }
解释我的问题:尽管动态查找器非常易于使用和学习,但是我必须替换网站的动态查找器以进行sql查询,因为这是必需的。由于我不太了解SQL,所以我的主要问题是:
a)我使用的是SQLS数据库,其驱动程序和数据源配置正确,我的网站现在可以正常工作。如果我想将“ findAllByUser”替换为sql语句,我应该做这样的事情:
def dataSource ... def db = new Sql(dataSource) def temp = db.rows("SELECT ... ")
b)那行得通吗?我的意思是,如果使用“ findAllByUser”,则临时对象将是一个列表,是否需要打开与数据库的连接=?
是的,使用grails,您既可以执行普通sql查询,也可以进行hql查询。HQL是“休眠查询语言”,允许您编写类似sql的语句,但使用域类和属性而不是表名和列名。要进行hql查询,请执行以下操作
def UserList = ConferenceUser.executeQuery('from ConferenceUser cu where cu.user = ?', [user]),
您在这里拥有的是一个参数化查询-executeQuery看到了吗?在hql字符串中,并为您替换方法中第二个参数([user]在本例中)的数组中的参数。
[user]
参见 http://grails.org/doc/latest/ref/Domain%20Classes/executeQuery.html