文档章节

Liferay 6.1开发学习(二十):Dynamic Query高级查询

攻城狮不是猫
 攻城狮不是猫
发布于 2015/07/03 09:31
字数 1073
阅读 39
收藏 0

在上一篇的博客《Liferay 6.1开发学习(十九):Liferay ServiceBuilder之自定义查询》之中介绍了一部分简单的Dynamic Query方法,可以满足简单的条件查询,但有些场景这样的查询不能满足我们的需求,同时使用HQL可能有稍显麻烦,在这里介绍一些Dynamic Query的高级技巧。(Dynamic Query的查询持续更新到此篇博客)

Group By 查询

Dynamic Query中实现group by的查询其实非常简单,示例代码如下:

1.     DynamicQuery query = this.dynamicQuery();   

2.     ProjectionList list = ProjectionFactoryUtil.projectionList();   

3.     list.add(ProjectionFactoryUtil.rowCount());   

4.     list.add(ProjectionFactoryUtil.groupProperty("bookNo"));   

5.     list.add(ProjectionFactoryUtil.groupProperty("userId"));   

6.     query.setProjection(list);  

上面的代码等效于select count(*),bookNo,userId from xxx group by bookNo,userId

如果要再添加相应的过滤条件,则再query上再添加相应的语句,如:

query.add(PropertyFactoryUtil.forName("bookName").like("xxx"));

最后调用dynamicQuery(query);即可

子查询

1.     DynamicQuery query = this.dynamicQuery();   

2.     DynamicQuery subQuery = new DynamicQueryFactoryUtil().forClass(Author.class);   

3.     subQuery.setProjection(ProjectionFactoryUtil.property("authorId"));   

4.     subQuery.add(PropertyFactoryUtil.forName("sex").eq(Boolean.FALSE));   

5.     query.add(PropertyFactoryUtil.forName("authorId").in(subQuery));   

6.     return dynamicQuery(query);  

示例代码如上,等效于以下的SQL

Select * from books where authorId in(select authorId from author where sex=false)

OR查询

Dynamic query中实现or查询有两种方法:

方法一:

Junction junction = RestrictionsFactoryUtil.disjunction();
junction.add(PropertyFactoryUtil.forName("xxxx").like("%"+keyWord+"%"));
junction.add(PropertyFactoryUtil.forName("xxx").like("%"+keyWord+"%"));
junction.add(PropertyFactoryUtil.forName("xxx").like("%"+keyWord+"%"));

query.add(junction);

方法二:

query.add(RestrictionsFactoryUtil.or("条件1",RestrictionsFactoryUtil.or("条件2",RestrictionsFactoryUtil.or("条件3", "条件4"))))

Dynamic Query的学习方法

Liferay中的Dynamic Query是封装的HibernateCriteria QueriesDynamic Query的资料虽然相对较少,全面的文档更是难以找到,如果要学习,可以参考hibernateCriteria QueriesAPI点击此处

Liferay中虽然和Hibernate的使用不完全一样,但是这上面的API很有参考价值,应该说是学习Dynamic Query的最好文档。

可能这里有一个疑问,既然hibernate有了Criteria QueryLiferay干嘛还要再封装一次?这不是出力又不讨好的事情么?我思考了一下,可能原因如下:

直接使用Hibernate的原生API,如果我们要在插件工程中使用,则需要在每一个插件工程中引入相应的Hibernate工程,这样对于开发是非常不方便的,现在Liferay封装了相应的接口,我们在所有的portlet工程里面都可以直接调用,不需要再引入第三方的Jar包,方便二次开发。

为JIRA6.0.2安装中文语言包

安装了JIRA 6.0.2但默认情况下是不带中文语言包的,从网上下了一些号称是中文的语言包,但是发现翻译的情况都不怎么样,而且还有大量的未翻译的情况。在搜索了一番之后,发现官方提供的有中文的语言包,现在的完成度大概为61%(自己之前还想着自己写插件呢,汗颜~)。

官方的合作翻译平台:https://translations.atlassian.com/dashboard/dashboard

点击如下图所示的位置,在弹出的页面中,点击下载语言包,会得到一个名为JIRA-6.0.2-language-pack-zh_CN.jar文件,插件的安装说明,在此下载面的下面有详细的说明。

自己翻译

如果对其中的某些翻译不满意,可以自己翻译,翻译的方法如下:

1、进入网址:https://translations.atlassian.com/dashboard/translate

2、在这里选择相应的内容,在所有产品里面选择JIRA,版本选择自己想翻译的版本内容,在版本的内容是搜索框,可以用以快速的搜索想要翻译的名称。在状态那里有三种选择:进行中、接受翻译、所有条目。

进行中:简单的说就是没有翻译过的。一般要进行中文翻译的时候可以选择此条目。

接受翻译:已经翻译过的条目,如果是对某一个翻译不满意,可以选择这个状态。

所有条目:就是以上两种的综合。

3、如果翻译完成之后,可以重复第一部分讲的中文语言包的安装,或者输入https://translations.atlassian.com/dashboard/download#/JIRA/6.0.2,会看到这里的翻译为自动的打包翻译的,我们下载新的语言包,再次上传到JIRA里面,即可更新JIAR的中文语言包。

© 著作权归作者所有

共有 人打赏支持
攻城狮不是猫
粉丝 3
博文 57
码字总数 86313
作品 0
杭州
程序员
私信 提问
liferay整理(留着备用)

Liferay 6.1开发学习(二十):Dynamic Query高级查询 在上一篇的博客《Liferay 6.1开发学习(十九):Liferay ServiceBuilder之自定义查询》之中介绍了一部分简单的Dynamic Query方法,可以...

IT小香猪
2014/07/17
0
5
Liferay Portal 6.1 CE 发布

Liferay 的新版本旗舰软件产品 Liferay Portal 6.1 CE 今天发布![下载][快速开始] Liferay 的产品团队和开发团队与我们优秀的社区协调一致,历时数月致力于 6.1 的发布,现在终于大功告成。...

红薯
2012/02/24
1K
4
初学liferay,怎么用liferay整合第三方应用程序,请高手给点建议?

本人大学实习生,刚进公司实习,刚接触liferay,请教高手们怎么用liferay去整合第三方应用程序,给点学习建议,谢谢。目前我用的是liferay版本是6.1的,是在win7系统上安装部署测试的,目的是...

jobbiss
2013/03/23
1K
2
在Tomcat 6.0.33上安装Liferay 6.1.0 CE的步骤

一、准备工作 下载tomcat 6.0.33, liferay 6.1.0 CE的war文件包、源码包、SQL脚本包以及附加依赖包。本例子采用Mysql数据库作为存储引擎,故请安装Mysql数据库并确保mysql服务已经启动。由于...

mj4738
2012/05/27
0
0
Liferay6.1学习笔记(四)--整合CAS实现单点登录

转载:http://www.ibm.com/developerworks/cn/opensource/os-cn-liferay-cas/index.html Liferay 门户介绍 Liferay 是一个基于 J2EE 架构的完整的门户解决方案,使用了 EJB、JMS 等技术, 前...

Michaelyn
2014/01/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

C++ vector和list的区别

1.vector数据结构 vector和数组类似,拥有一段连续的内存空间,并且起始地址不变。 因此能高效的进行随机存取,时间复杂度为o(1); 但因为内存空间是连续的,所以在进行插入和删除操作时,会造...

shzwork
28分钟前
1
0
Spring之invokeBeanFactoryPostProcessors详解

Spring的refresh的invokeBeanFactoryPostProcessors,就是调用所有注册的、原始的BeanFactoryPostProcessor。 相关源码 public static void invokeBeanFactoryPostProcessors(Configu......

cregu
昨天
1
0
ibmcom/db2express-c_docker官方使用文档

(DEPRECIATED) Please check DB2 Developer-C Edition for the replacement. What is IBM DB2 Express-C ? ``IBM DB2 Express-C``` is the no-charge community edition of DB2 server, a si......

BG2KNT
昨天
0
0
Ubuntu 18.04.2 LTS nvidia-docker2 : 依赖: docker-ce (= 5:18.09.0~3-0~ubuntu-bionic)

平台:Ubuntu 18.04.2 LTS nvidia-docker2 版本:2.0.3 错误描述:在安装nvidia-docker2的时候报dpkg依赖错误 nvidia-docker2 : 依赖: docker-ce (= 5:18.09.0~3-0~ubuntu-bionic) 先看一下依......

Pulsar-V
昨天
3
0
学习笔记1-goland结构体(struct)

写在前面:若有侵权,请发邮件by.su@qq.com告知。 转载者告知:如果本文被转载,但凡涉及到侵权相关事宜,转载者需负责。请知悉! 本文永久更新地址:https://my.oschina.net/bysu/blog/3036...

不最醉不龟归
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部