HQL连接查询和注解
HQL连接查询和注解
一:HQL连接查询
- 各种连接查询:
内连接: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;
- 聚合函数
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;
- 子查询关键字:
all:子查询返回所有记录。
any:子查询返回的任意的一条记录。
some:与“any”意思相同
in:与“=any意思相同”
exists:子查询语句至少返回一条记录。
- 操作集合函数或属性。
size()或size:获取集合中的元素数目。
minIndex()或minIndex:对于建立索引的集合,获取最小的索引
maxIndex()或maxIndex:对于建立索引的集合,获取最大的索引。
minElement()或minElement:对于包含基本类型的元素集合,获得集合中取值最小的元素。
maxElement()或maxElement: 对于包含基本类型的元素集合,获得集合中取值最大的元素。
Elements();获取集合中的所有元素。
二:查询性能优化
- 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。
三:注解
- 使用hibernate注解的步骤如下:
(1.)使用注解配置持久化类及对象的关联关系。
(2.)在hibernate配置文件(hibernate.cfg.xml)中声明持久化类,语法如下:
<mapping class=”持久化类完整限定名”>
- 配置持久化类的常用注解:
@Entity:将一个类声明为持久化类。
@Table:为持久化映射指定表。
@Id:声明了持久化类的表示属性。
@GeneratedValue:定义表示属性的生成策略。
@UniqueConstraint:定义表的唯一约束。
@Lob:表示属性将被持久化为BLOD或者CLOD类型。
@Column:将属性映射到数据库字段。
@Transient:指定可以忽略的属性,不用持久化到数据库。
HQL连接查询和注解的更多相关文章
- Hibernate批量处理数据、HQL连接查询
一.批量处理操作 批量处理数据是指在一个事务场景中处理大量数据.在应用程序中难以避免进行批量操作,Hibernate提供了以下方式进行批量处理数据: (1)使用HQL进行批量操作 数据库层面 ...
- 【学习笔记】Hibernate HQL连接查询和数据批处理 (Y2-1-7)
HQL连接查询 和SQL查询一样 hql也支持各种链接查询 如内连接 外连接 具体如下 左外连接 left (outer) join 迫切左外连接 left (outer) join fetch 右外 ...
- Hibernate批量处理数据、[HQL连接查询]
一.批量处理操作 批量处理数据是指在一个事务场景中处理大量数据.在应用程序中难以避免进行批量操作,Hibernate提供了以下方式进行批量处理数据: (1)使用HQL进行批量操作 数据库层面 (2)使 ...
- HQL连接查询
HQL提供了连接查询机制如内连接,外连接,,还允许显示指定迫切内连接,和迫切外联结. 连接类型 内连接 inner join 或join 迫切内链接 inner join fetch 左外联结 le ...
- HQL的内连接查询
/** * HQL的内连接查询 * String hql="from Customer c inner join fetch c.linkmans"; */ @Test publi ...
- hibernate-HQL连接查询
和SQL查询一样,HQL也支持各种各样的连接查询, 如内连接.外连接. 实例: package Test; import static org.junit.Assert.*; import java. ...
- hibernate 实现多表连接查询(转载)
http://www.cnblogs.com/lihuiyy/archive/2013/03/28/2987531.html 为了方便,直接粘过来,方便查看.不收藏了 Hibernate主要支持两种查 ...
- hql 关联查询
HQL 带的连接语句只能是实体与 该实体的属性 进行连接 其意义就是为了优化(通过延迟加载查询关联的属性)需要进行配置 from A left join A.B where (b.flag is nu ...
- 一步步学习NHibernate(9)——连接查询和子查询(1)
请注明转载地址:http://www.cnblogs.com/arhat 在前几章中,我们把HQL的基本查询学习了一下,但是只有基本查询很显然不能满足我们的需求,那么就需要一下复杂查询比如" ...
随机推荐
- vue2组件之select2调用
目前,项目中使用了纯前端的静态项目+RESTFul接口的模式.为了更好的对数据进行操作,前端使用了vue2的mvvm功能,但是由于不是单页面应用,所以,并没有涉及到其它的如vue-route等功能,也 ...
- ZOJ2212 Argus 优先队列 结构体
#include <iostream> #include <string> #include <queue> using namespace std; struct ...
- 用html +js+css 实现页面轮播图效果
html 页面 <html lang="en"> <head> <meta charset="UTF-8"> <met ...
- Java面向对象 Main函数 静态的应用 单例设计模式
Java面向对象 Main函数 静态的应用与单例设计模式 知识概要 (1)Main函数的细解 (2)静态的应用,静态变量,静态代码块,静态函数 (3)单例设计模式 1.M ...
- C#仪器数据文件解析-Word文件(doc、docx)
不少仪器数据报告输出为Word格式文件,同Excel文件,Word文件doc和docx的存储格式是不同的,相应的解析Word文件的方式也类似,主要有以下方式: 1.通过MS Word应用程序的DCOM ...
- OpenWRT UCI命令实现无线中继
本文主要功能主要是利用OpenWRT系统uci命令实现无线中继,主要是利用uci程序修改/etc/congfig/目录下的配置文件.实现步骤如下主要分为以下几步: 1) 安装 relayd (opkg ...
- python基础条件和循环
一.if语句 1.if后表达式返回值为true则执行其子代码块,然后此if 语句到此终结,否则进入下一分支判断,直到满足其中一个分支,执行后终结if 2.expression可以引入运算符:not,a ...
- 什么是git?window下安装git
一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以 ...
- LINUX 笔记-free命令
free命令可以显示Linux系统中空闲的.已用的物理内存及swap内存,及被内核使用的buffer. focus@ubuntu:~$ free -h total used free shared b ...
- [Java第一课]环境变量的配置以及eclipse一些常用快捷键
1.环境变量的配置(这里对xp系统电脑来说:) 首先安装jdk软件. 然后在我的电脑(右键)-->属性-->高级-->环境变量-->系统变量(注意)-->新建(新建两个p ...