我有要求调用存储过程来获取数据,在这里我将通过发布数据获取存储过程名称。如何在grails中用动态名称调用mysql存储过程
我试过使用GString但没有用,任何人都可以帮我解决这个问题。
在此先感谢。
我有要求调用存储过程来获取数据,在这里我将通过发布数据获取存储过程名称。如何在grails中用动态名称调用mysql存储过程
我试过使用GString但没有用,任何人都可以帮我解决这个问题。
在此先感谢。
这是一个奇怪的,但可能的。 Grails/GORM不提供执行存储过程的方法。这只是ORM功能的一部分。而Hibernate也没有。但是,Hibernate确实提供了对JDBC连接的访问。所以你可以从Hibernate获得连接,然后用连接创建一个Groovy Sql实例,最后执行你的存储过程。这里有一个例子:
import groovy.sql.Sql
SomeDomainClass.withNewSession { session ->
session.doWork { java.sql.Connection connection ->
def sql = new Sql(connection)
sql.call("YOUR STORED PROCEDURE SQL HERE")
}
}
它的工作原理是这样的:
withSession(Closure)
得到一个Hibernate会话。doWork(Work)
访问会话的JDBC连接。现在,doWork(Work)
预计执行org.hibernate.jdbc.Work。但是,如果我没有记错,Groovy可以使用相同的参数来实现闭包,并强制它实现接口。Sql.call()
方法之一来执行存储过程。对于那些在Grails 3中使用此方法时没有现有会话的快速注释,您需要将SomeDomainClass.withSession
替换为SomeDomainClass.withNewSession
。
谢谢Emmanuel为您节省了大量时间!还有杜尔加为了要求我们需要的东西!
(我目前没有足够的信誉发表评论,但这是提交的灵光这里的答案评论)
你应该包括更多的信息,比如你已经尝试了什么例子。 –