grails笔记------Controller中直接使用SQL语句

本文介绍了在Grails的Controller中如何直接使用SQL语句进行查询。由于GQL不支持某些复杂的HQL语法,作者选择了使用JDBC。通过引入Apache的dbcp库,配置Spring的数据源,并在Controller中注入dataSource,然后获取连接并执行SQL,实现了多表查询的需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

grails的Controller中查询一般可以用 类名.findAll或者 类名.executeQuery()来查询

但是必须使用gql语句,gql与hql语句语法类似,但经我试用有些hql能使用的语法gql不能用,比如多表左右连接,所以我直接用jdbc写了

gql普通关联的语句如:

def xx = Goodsinput.executeQuery("select (sum(i.gooEnter*i.gooEnterprice) - sum(o.gooDepletion*o.gooPrice)) as sumprice from Goodsinput i , Goodsdepletion o where i.gooName = o.gooName and i.shoId ='888888888888' and o.shoId = '888888888888' and i.gooName.id = 'SP1000000229'")

这是一条计算库存商品平均价的gql,经测试成功,但外连接 left outer join on 、 i.gooName = o.gooName(+)都不符合gql语法。

使用JDBC也很简单:

1.使用spring加载dataSource到Controller中。

a.将apache的dbcp包放入grail的lib目录

b.在conf/spring目录下resources中.配置bean:dataSourc

注意:以前是xml的,现在是直接用groovy了

代码如下:

groovy版:

import org.apache.commons.dbcp.BasicDataSource
beans = {
dataSource(BasicDataSource) {
driverClassName = "org.hsqldb.jdbcDriver"
url = "jdbc:hsqldb:mem:devDB"
username = "sa"
password = ""
}
xml版:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

<bean id="dataSource" class=" org.apache.commons.dbcp.BasicDataSource ">
<property name="driverClassName"> <value>org.hsqldb.jdbcDriver</value></property>
<property name="url"> <value>jdbc:hsqldb:hsql://localhost</value></property>
<property name="username"> <value>sa</value></property>
<property name="password"> <value></value></property>
</bean>
</beans>

c.在Controller中定义dataSource,代码如下:

def dataSource

2.获取连接,代码如下:

def conn = dataSource.getConnection()

3.执行sql语句,代码如下:

PreparedStatement ps = conn.prepareStatement("select * from customer");
ResultSet rs = ps.executeQuery();

while (rs.next()) {

println rs.getString("cus_name")

}

ok!这样就搞定了.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值