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版本号我试过貌似用不成

grails的criteria和hql查询的更多相关文章

  1. Hibernate 、Hql查询和Criteria查询

    HQL查询: public Object query(String name){ Session s=null; try{ s=HibernateSessionFactory.getSession() ...

  2. hibernate框架学习笔记7:HQL查询、Criteria查询简介

    HQL查询:hibernate独有的查询语言 适用于不复杂的多表查询 示例: 实体类: package domain; public class Customer { private Long cus ...

  3. Hibernate的四种查询方式(主键查询,HQL查询,Criteria查询,本地sql查询)和修改和添加

    Hibernate的添加,修改,查询(三种查询方式)的方法: 案例演示: 1:第一步,导包,老生常谈了都是,省略: 2:第二步,创建数据库和数据表,表结构如下所示: 3:第三步创建实体类User.ja ...

  4. Hibernate框架之HQL查询与Criteria 查询的区别

    Hibernate框架提供了HQL查询和Criteria 查询.下面对这两种查询分别做个例子.也好对这两种查询方法有个大概的了解.就用房屋信息表做例子,查询所有房屋信息. HQL语句查询所有房屋信息: ...

  5. [NHibernate]HQL查询

    目录 写在前面 文档与系列文章 查询的几种方式 HQL查询 一个例子 总结 写在前面 上篇文章介绍了nhibernate在项目中的基本配置,包括数据库连接字符串的设置,映射文件的配置及需注意的地方,这 ...

  6. hibernate学习(7)——HQL查询

    1.HQL查询定义 Hibernate查询分类: 1. get/load 根据OID检索 2. 对象视图检索 c.getOrders 3. Sql语句 createSqlQuery 4. Hql语句 ...

  7. NHibernate系列文章二十二:NHibernate查询之HQL查询(附程序下载)

    摘要 NHibernate提供了多种查询方式,最早的HQL语言查询.Criteria查询和SQL Query,到NHibernate 3.0的Linq NHibernate,NHIbernate 4. ...

  8. HQL查询语句

    查询语言 Hibernate 查询语言(HQL)是一种面向对象的查询语言,类似于 SQL,但不是去对表和列进行操作,而是面向对象和它们的属性. HQL 查询被 Hibernate 翻译为传统的 SQL ...

  9. hibernate的hql查询

    1.概念介绍 1.Query是Hibernate的查询接口,用于从数据存储源查询对象及控制执行查询的过程,Query包装了一个HQL查询语句. 2.HQL是Hibernate Query Langua ...

随机推荐

  1. 解决VSCode中使用vetur插件格式化vue文件时,js代码会自动加上冒号和分号

    解决VSCode中使用vetur插件格式化vue文件时,js代码会自动加上冒号和分号 在设置中把"vetur.format.defaultFormatter.js": " ...

  2. 抓取oracle数据库耗费资源的sql语句

    oracle数据库连接业务系统,而有些sql语句的执行严重影响了oracle的性能,就如同mysql的慢查询一样,mysql可以开启慢查询日志定位这些造成数据库性能下降的语句,而oracle同样可以做 ...

  3. Openjudge-4115-佐助和鸣人

    这一题是一道广搜的题目,首先我们通过读入字符串读入每一行,然后顺带找到鸣人的位置. 然后我们初始化之后,就进行广搜,还是广搜的格式,但是要压入队列的条件我们可以稍微变一变,我们可以直接判断下一个要走的 ...

  4. SecureCRT 64位 破解版v8.1.4

    http://www.xue51.com/soft/1510.html#xzdz securecrt 破解版是一款支持SSH1和SSH2的终端仿真程序,这个程序能够在windows系统中登陆UNIX或 ...

  5. 16. PLUGINS

    16. PLUGINS PLUGINS表提供有关服务器插件的信息. PLUGINS表有以下列: PLUGIN_NAME :用于在诸如INSTALL PLUGIN和UNINSTALL PLUGIN之类的 ...

  6. docker使用阿里云镜像仓库docker

    1:阿里云docker仓库 https://dev.aliyun.com/search.html 2:进去注册帐号后,点击自己的管理中心. 3:在管理中心点击加速器,右边面板会有你的加速地址,右边面板 ...

  7. 不同子系统采用不同MySQL编码LATIN1和UTF8的兼容

    程序处理 这是一个历史遗留系统, 旧的系统是C++开发的, 插入数据的时候, 没有统一MYSQL各个层次(服务器, 数据库, 表, 列)的编码, 这个情况基本上是MYSQL的默认安装导致的, 实际的数 ...

  8. js layui 分页脚本

    //分页 layui.use(['laypage'], function(){ var laypage = layui.laypage; laypage.render({ elem: 'page' , ...

  9. Java:获取IP地址

    文章来源:https://www.cnblogs.com/hello-tl/p/9139323.html import java.net.InetAddress; import java.net.Un ...

  10. Django框架基础知识09-请求与响应

    视图函数接受到的request到底是个什么对象呢? HttpRequest对象: 服务器接收到http协议的请求后,会根据报文创建HttpRequest对象视图函数的第一个参数是HttpRequest ...