HQL连接查询和注解

一:HQL连接查询

  1. 各种连接查询:

内连接:inner join或join

From Entity inner [inner] join [fetch] Entity.property;

左外连接:left outer join或left join

From  Entity left[outer] join [fetch] Entity.property;

迫切左外连接:left outer join fetch或left join fetch

右外连接:right outer join或right join

迫切连接:inner join fetch或join fetch

注:迫切连接要使用对象连接,不然的话会出错。

等值连接:

From  Dept d,Emp p where d=e.dept;

  1. 聚合函数

select count(*),sum(sal),min(sal),max(sal),avg(sal)from Emp;

List<Object[]>list=query.list();

for (Object[] o:list) {

System.out.println("总:"+o[0]+"和:"+o[1]+"最小值:"+o[2]+"最大值:"+o[3]+"平均数:"+o[4]);

}//省略其它代码

按职位统计员工个数:

select e.job,count(*) from Emp e group by e.job

统计每个部门下的员工个数并且大于2的显示输出:

select e.job,count(*) from Emp e group by e.job having count(*)>2;

  1. 子查询关键字:

all:子查询返回所有记录。

any:子查询返回的任意的一条记录。

some:与“any”意思相同

in:与“=any意思相同”

exists:子查询语句至少返回一条记录。

  1. 操作集合函数或属性。

size()或size:获取集合中的元素数目。

minIndex()或minIndex:对于建立索引的集合,获取最小的索引

maxIndex()或maxIndex:对于建立索引的集合,获取最大的索引。

minElement()或minElement:对于包含基本类型的元素集合,获得集合中取值最小的元素。

maxElement()或maxElement: 对于包含基本类型的元素集合,获得集合中取值最大的元素。

Elements();获取集合中的所有元素。

二:查询性能优化

  1. hibernate查询优化策略:

(1.)使用迫切左外连接,或迫切连接查询策略,配置二级缓存和查询等方式,减少select语句数目,降低访问数据库的频率。

(2.)使用延迟加载等方式避免加载多余不需要访问的数据。

(3.)使用Query接口的iterate()方法减少select语句的字段,降低访问数据库的数据量,并结合缓存等机制减少数据库的访问次数,提高查询效率。

2.HQL优化:

(1.)避免使用or操作的不当。

(2.)避免使用not。

(3.)避免使用like的特殊形式。

(4.)避免使用having子句。

(5.)避免使用distinct。

(6.)索引在以下情况下失效,使用时注意。

对字段使用函数,该字段的索引将不起作用。如:substring(aa,1,2)=’xxx’

对字段进行计算,该字段的索引将不起作用。如:price+10。

三:注解

  1. 使用hibernate注解的步骤如下:

(1.)使用注解配置持久化类及对象的关联关系。

(2.)在hibernate配置文件(hibernate.cfg.xml)中声明持久化类,语法如下:

<mapping class=”持久化类完整限定名”>

  1. 配置持久化类的常用注解:

@Entity:将一个类声明为持久化类。

@Table:为持久化映射指定表。

@Id:声明了持久化类的表示属性。

@GeneratedValue:定义表示属性的生成策略。

@UniqueConstraint:定义表的唯一约束。

@Lob:表示属性将被持久化为BLOD或者CLOD类型。

@Column:将属性映射到数据库字段。

@Transient:指定可以忽略的属性,不用持久化到数据库。

HQL连接查询和注解的更多相关文章

  1. Hibernate批量处理数据、HQL连接查询

    一.批量处理操作 批量处理数据是指在一个事务场景中处理大量数据.在应用程序中难以避免进行批量操作,Hibernate提供了以下方式进行批量处理数据: (1)使用HQL进行批量操作     数据库层面 ...

  2. 【学习笔记】Hibernate HQL连接查询和数据批处理 (Y2-1-7)

    HQL连接查询 和SQL查询一样 hql也支持各种链接查询 如内连接 外连接 具体如下 左外连接 left (outer) join 迫切左外连接 left (outer) join fetch 右外 ...

  3. Hibernate批量处理数据、[HQL连接查询]

    一.批量处理操作 批量处理数据是指在一个事务场景中处理大量数据.在应用程序中难以避免进行批量操作,Hibernate提供了以下方式进行批量处理数据: (1)使用HQL进行批量操作 数据库层面 (2)使 ...

  4. HQL连接查询

    HQL提供了连接查询机制如内连接,外连接,,还允许显示指定迫切内连接,和迫切外联结. 连接类型 内连接 inner join 或join 迫切内链接 inner join fetch 左外联结  le ...

  5. HQL的内连接查询

    /** * HQL的内连接查询 * String hql="from Customer c inner join fetch c.linkmans"; */ @Test publi ...

  6. hibernate-HQL连接查询

    和SQL查询一样,HQL也支持各种各样的连接查询, 如内连接.外连接. 实例: package Test; import static org.junit.Assert.*; import java. ...

  7. hibernate 实现多表连接查询(转载)

    http://www.cnblogs.com/lihuiyy/archive/2013/03/28/2987531.html 为了方便,直接粘过来,方便查看.不收藏了 Hibernate主要支持两种查 ...

  8. hql 关联查询

    HQL 带的连接语句只能是实体与 该实体的属性 进行连接 其意义就是为了优化(通过延迟加载查询关联的属性)需要进行配置 from A left join A.B where (b.flag is nu ...

  9. 一步步学习NHibernate(9)——连接查询和子查询(1)

    请注明转载地址:http://www.cnblogs.com/arhat 在前几章中,我们把HQL的基本查询学习了一下,但是只有基本查询很显然不能满足我们的需求,那么就需要一下复杂查询比如" ...

随机推荐

  1. __无标题栏的窗口拖动___javafx

    遇到困难::添加mouseevent监听,我用的mouse_DragedDetected配合MouseEvent.Pressed,,闪的不行,后来借鉴swing的pressed,move,releas ...

  2. this到底指向哪里

    this指向调用它的对象 首先要明确,this指向调用方,谁调用,this指向谁. 直接调用 举个栗子: var test = 'window' ; function testThis () { va ...

  3. Xp下麦克风设备及音量检测

    从Vista开始,windows底层的音频架构发生了改变:原本是底层API的waveXXX.mixerXXX等都在Core Audio APIs的基础上进行了重构,上升为了高层API:底层API变为C ...

  4. C# 判断文件编码

    我们的项目中会包含有很多文件,但是可能我们没有注意到的,我们的文件的编码不一定是utf-8,所以可能在别人电脑运行时出现乱码.最近在做一个项目,这个项目可以把我们的文件夹里的所有文本,判断他们是什么编 ...

  5. C语言第一次实验报告

    一.实验题目,设计思路,实现方法 7-7 计算火车运行时间(15 分) 4-5 求简单交错序列前N项和(15 分) 4-2-7 装睡(10 分) 思路:7-7须将时间统一单位,化为以分钟计算再将两者相 ...

  6. 【NOIP2015提高组】Day1 t1神奇的幻方

    一大淼题,直接瞎搞即可,不过一定要仔细看题目给定的条件. #include<iostream> #include<cstdio> #include<cstring> ...

  7. URL的编码和解码

    URL的编码和解码 参考:阮一峰--关于URL编码 1 为什么要URL编码 在因特网上传送URL,只能采用ASCII字符集 也就是说URL只能使用英文字母.阿拉伯数字和某些标点符号,不能使用其他文字和 ...

  8. java:凯撒密码及String的应用

    一,凯撒密码 古罗马皇帝凯撒在打仗时曾使用过以下方法加密军事情报 现在用java实现 程序设计思想: 1,字符串首先要转化为字符数组,才能依次加密 2,当原来的字符为X,Y,Z时,加密后要转化为A,B ...

  9. Python学习之二:Python 与 C 区别

    引自http://www.lxway.com/181844.htm 从开始看Python到现在也有半个多月了,前后看了Python核心编程和Dive into Python两本书.话说半个月看两本,是 ...

  10. python爬虫如何入门

    学爬虫是循序渐进的过程,作为零基础小白,大体上可分为三个阶段,第一阶段是入门,掌握必备的基础知识,第二阶段是模仿,跟着别人的爬虫代码学,弄懂每一行代码,第三阶段是自己动手,这个阶段你开始有自己的解题思 ...