【HIBERNATE框架开发之八】HIBERNATE 查询语言QUERY LANGUAGE(HQL)

本站文章均为 李华明Himi 原创,转载务必在明显处注明: 
转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/hibernate/824.html

    生成一条HQL查询语句  Query,  使用Session的createQuery(“hql语句”)生成Query

HQL语句:

1. “from className”

class是类名;Hibernate会自动到数据库中找对应生成的表;

 

2.“from className cn where cn.name > ‘xx’”

cn 是className的别名,  ‘xx’表示条件

 

3. “from ClassName cn order by cn.name desc”

按照className的名字倒序排列

 

4. “select distinct cn from ClassName cn order by cn.name desc”

互相之间不会重复的对象(主键不同)的按照倒序排列

 

5. “from ClassName cn where cn.id > :min and cn.id< :max”

然后设置其Parameter(min和max)   :

query.setParameter(“min”, 2);           query.setParameter(“max”, 8);

query.setInteger(“min”, 2);                  query.setInteger(“max”, 8);

(两段实现相同功能,使用setParameter则自动转换类型,下面属于手动转换类型);

 

6.”select cn.id,cn.name from ClassName cn order by cn.name desc”

取出特定的两个字段 id 和 name

 

7. “from ClassName cn where cn.group.id =1 ”

找到在ClassName生成的表中中的group对象的id为1的那个ClassName对象

 

8.  “select cn.id,g.name from ClassName cn Join cn.group g”

映射ClassName的cn.id对应ClassName中group对象里的name属性;join 建立导航关系

 

9.  “select count(*) from ClassName cn”

使用聚合函数, 注意count(*)返回Long类型;

 

10. “select max(cn.id), min(cn.id), avg(cn.id), sum(cn.id) from ClassName cn”

聚合函数

 

11. “from ClassName cn where cn.id between 3 and 7”

两者之间

 

12. “from ClassName cn where cn.id in (3,4,5)”

是否在其中

 

13. “from ClassName cn where cn.name is not null”

不为null

 

14.   “from ClassName cn where cn.set is empty”

判断集合属性是否为空

is not empty 测试某一个属性是否为空

 

15.  “from ClassName cn where cn.name like ‘%4′”

“from ClassName cn where cn.name like ‘_4′”

%: 表示0个或者多个

_:表示一个

 

16.”select lower(cn.name),lower(cn.name),upper(cn.name),trim(cn.name),concat(cn.name),length(cn.name) from ClassName cn”

一些常用函数

 

17. “select abs(cn.id),sqrt(cn.id) from ClassName cn”

一些函数

 

18. “select current_date,current_time,current_timestamp,t.id from ClassName t”

时间日期

 

19. “from ClassName cn where cn.createDate < :date”

日期的比较

 

20. “select cn.name,count(*) from ClassName cn group by cn.name”

.分组查询

 

21. “select cn.name,count(*) from ClassName cn group by cn.name having count(*) >= 2”

.

22. “from ClassName cn where cn.id < (select avg(cn.id) from ClassName cn)”

哪个id值<平均值

 

23. “from ClassName cn where cn.id < ALL(select cn.id from ClassName cn where mod(cn.id ,2) = 0)”

id 小于ALL(2,4,6,8)所有值   ps..小于最小值 =   select min

 

24. “update ClassName cn set cn.name = upper(cn.name)”

更新

 

Query函数:

1. Query 中 有个 list()函数,直接获取其数据返回一个list对象;

2. Query 中uniqueResult()函数,得到唯一返回的值;

3. executeUpdate() 更新

 

时间: 2024-10-30 06:02:44

【HIBERNATE框架开发之八】HIBERNATE 查询语言QUERY LANGUAGE(HQL)的相关文章

【HIBERNATE框架开发之一】搭建HIBERNATE环境并成功运行第一个项目HELLOHIBERNATE并解决3个常出现的运行问题;

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/hibernate/783.html OK,从这篇开始Himi将与大家一起进入Hibernate框架的学习啦,新手新手的说,希望大家多多指教: 对于Hibernate概述一下: "  Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. H

【HIBERNATE框架开发之三】搭建HIBERNATE日志(SLF4J转LOG4J)环境并搭建JUNIT单元测试环境!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/hibernate/806.html 由于最新写cocos2dx动作编辑器的解析和框架所以没更新,那么从今天开始继续来学习Hibernate,那么接着第二篇文章讲解,那么首先copy,第二篇的第一个Annotation的项目改个名字"LogForHibernate":           首先搭建log4j环境: 第一步我们之前设置

【HIBERNATE框架开发之二】第一个HIBERNATE-ANNONATION项目(采用@ENTITY、@ID直接映射实体类)

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/hibernate/789.html 紧接上一篇,这里Himi直接copy上一篇创建的HelloHibernate项目,然后改名为:HelloAnnonation,Ok:  OK,准备工作: 首先第一步,继续再我们自定义的user libraries 中添加Annotation所需的包,如下3个jar包(共11个包):            

【HIBERNATE框架开发之五】HIBERNATE对象的三种状态&amp;&amp;SESSION的常用方法

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/hibernate/814.html  1. Hibernate对象的三种状态:(图解如下:)   如图所示,Hibernate对象有三种状态,1.Transient  2.Persistent 3.Detached; 三种状态的区别如下: 1. 当对象处于Transient时,只在内存中有一个对象,没ID,而且在缓存和数据库中没有: 2.

【hibernate框架】搭建hibernate环境

我这次创建的是一个叫做student的表,里面存有id.name和age字段,我将搭建一个hibernate环境,利用框架的核心API对student进行数据插入.数据库用的是Mysql. 1.首先在工程中添加hibernate的jar包: 将解压路径中hibernate3.jar和lib路径下的required.jpa子目录下所有JAR包添加到应用的类加载路径中. hibernate的帮助文档在 hibernate-distribution-3.6.0.Final\documentation\

【HIBERNATE框架开发之九】HIBERNATE 性能优化笔记!(遍历、一级/二级/查询/缓存、乐观悲观锁等优化算法)

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/hibernate/825.html 1.   循环分页或者循环进行部分读取处理数据的时候,使用 session.clear() ;   2.    对应1+N(N+1)问题使用如下解决方式: 1): 使用createCriteria进行查询(join fetch) 2):HQL -> join fetch 3): 使用@fetch设置LAZ

【HIBERNATE框架开发之四】HIBERNATE-ANNOTATION常用的注解归总&amp;&amp;ID的生成策略&amp;&amp;联合主键

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/hibernate/811.html 这篇主要讲解Hibernate中Annotation的常用注解和ID的生成策略以及联合主键三块:     首先介绍些常用的Annotation注解: 1.  当表名与类名不一致: @Table(name="数据库表名")        (javax.persistence)      如果类名与

【HIBERNATE框架开发之七】HIBERNATE使用ANNOTATION中各种关系映射的CRUD(增删改查)&amp;&amp;集合映射&amp;&amp;继承映射

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/hibernate/822.html       首先对于Annotation中CRUD的C(Create)操作:-------- 假设 :   User (MonyToOne)       Group OK,那么有如下 Junit Code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Conf

【HIBERNATE框架开发之六】HIBERNATE中ANNOTATION的关系映射&amp;&amp;组件映射!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/hibernate/821.html 准备工作,新建两个实体类如下: Husband.class: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 package com.himi;   import ja