grails在查询方面也保留了hibernate的hql和criteria查询功能。hql自然不必多说基本不会有什么变化,grails的criteria查询在hibernate上面做了微调使用起来更加方便了,这次就这两个特点分享下我这几天的所学

1.grails的criteria查询

先来个简单的,通过criteria来构造一个in条件查询

def  useCriteria2(){
def c=CityInfo.createCriteria()
def result=c.list{
'in'("id",[1,2,3])
}
Iterator<CityInfo> it=result.iterator()
def buf=new StringBuffer();
while(it.hasNext()){
CityInfo info=it.next()
buf.append(info.getName()+"-")
}
render buf.toString()
}

这里查询的是id在1,2,3这个集合里城市信息。来看看结果:

接下来弄个略微复杂一点的,弄个范围查询和模糊查询综合起来的样例

def  useCriteria(){
def c=CityInfo.createCriteria()
def result=c.list{
gt("id",3)
and{
like("name","%兴%")
}
}
Iterator<CityInfo> it=result.iterator()
def buf=new StringBuffer();
while(it.hasNext()){
CityInfo info=it.next()
buf.append(info.getName()+"-")
}
render buf.toString()
}

and里面能够写多个条件,当然了假设是or条件也能够这样用。上面的程序执行效果例如以下:

2.grails的hql查询

def useHql(){
def hql="from CityInfo where id>:id and code in:code"
def result=CityInfo.executeQuery(hql,["id":2,code:["NB","NJ"]])
response.setHeader("Content-Type","text/html; charset=UTF-8")
[result:result]
}

这个查询相信大家都看得懂,这里我想略微做下扩展,应为默认情况下grails使用gsp或者jsp作为视图页面。个人认为学习gsp会添加学习成本,jsp的话也不是太方便,velocity用的也不多,因此打算使用freemarker来作为视图。

因为grails并没有默认支持freemarker,因此要在项目里加入这个插件,因为版本号的差异安装插件的方式也有所不同

(1)grails 1.x的版本号

使用命令:grails install-plugin  插件的路径

(2)grails 2.x的版本号

打开BuildConfig.groovy,找到plugins节点,在花括号的最后加上 compile ":freemarker:0.1.1"。例如以下所看到的:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2Fsa2NvZGU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" height="292" width="700" alt="">

图上的0.1.2是为了能让大家看到那个黄色的提示改的,用0.1.1版本号就足够我们用了,加上之后点一下红色箭头所指的地方或者重新启动下项目。插件就成功安装了

接下来就是jar包了,我们要在lib以下加上freemarker的jar包,这个jar包到struts2里面能够找到,这步完毕后假设freemarker插件文件有编译错误的话就要把freemarker的jar包引入构建路径,例如以下所看到的:

到这一步为止。我们就能够使用freemarker了,上面的useHql的视图页面例如以下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>查询结果</title>
</head>
<body>
<#list result as item>
${item.id}, ${item.name}<br/>
</#list>
</body>
</html>

这里的result是返回的map相应的key,这样子数据就显示出来了

安装插件的时候要注意,假设版本号选不正确。那么一切工作都是徒劳。

官网说的那个0.4版本号我试过貌似用不成

最新文章

  1. 为什么使用Junit Test而不用普通java main方法来完成测试?
  2. putty+xming远程登录Ubuntu16.04图形界面
  3. 漫谈可视化Prefuse(一)---从SQL Server数据库读取数据
  4. 关于Can&#39;t connect to local MySQL server through socket &#39;/tmp/mysql.sock&#39; (2)的问题
  5. Java中的blank final
  6. [MAC OSX - 1] OSX10.10不能安装JKD8,不能使用eclipse
  7. jquery如何判断滚动条滚到页面底部并执行事件
  8. avalonjs1.5 入门教程
  9. CSS样式 初学
  10. python基础15上_迭代器_生成器
  11. IDEA 远程调试 Tomcat 和 Debugger
  12. golang并发(1)介绍
  13. Thinkphp 3.2 验证码图片显示错误解决方法
  14. 20155207 EXP7 网络欺诈技术防范
  15. C#编程(十四)----------构造函数
  16. How to create a Multi-device Site - some details
  17. JProfiler 简要使用说明
  18. 和为S的两个数字★★
  19. PHP项目学习1
  20. python单继沿用父类属性的两种方法

热门文章

  1. 进程池_Pool
  2. mfc消息
  3. 利用CWinThread实现跨线程父子MFC窗口
  4. Caused by: java.io.FileNotFoundException: Could not open ServletContext resource [/config/spring/applicationContext.xml]
  5. Java垃圾回收之回收算法
  6. swift详解之九---------------自动引用计数、循环引用
  7. 解决sqlplus无法退格问题
  8. LeetCode(75) Sort Colors
  9. 杭电 4004 The Frog&#39;s Games 青蛙跳水 (二分法,贪心)
  10. 创建ArrayList集合对象并添加元素