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的基本查询学习了一下,但是只有基本查询很显然不能满足我们的需求,那么就需要一下复杂查询比如" ...
随机推荐
- 富文本编辑器CKEditor的使用
由于最近在架构一个pc端b/s结构的项目,项目中有个论坛模块,当用户发帖时,需要用到富文本编辑器,考虑了一下,决定使用CKEditor富文本编辑器,虽然现在问世的富文本编辑器很丰富,比如还有百度的UE ...
- Go语言备忘录:反射的原理与使用详解
目录: 预备知识 reflect.Typeof.reflect.ValueOf Value.Type 动态调用 通过反射可以修改原对象 实现类似“泛型”的功能 1.预备知识: Go的变量都是静态类 ...
- Python自学笔记-列表生成式(来自廖雪峰的官网Python3)
感觉廖雪峰的官网http://www.liaoxuefeng.com/里面的教程不错,所以学习一下,把需要复习的摘抄一下. 以下内容主要为了自己复习用,详细内容请登录廖雪峰的官网查看. 列表生成式 列 ...
- cocos2dx - Sqlite简单封装使用
前言: 一般游戏需要在手机上记录一些简单的信息,用来保存游戏的进度,玩家的分数等.SQLite作为轻量级.跨平台的关系型数据库,相当适合用于游戏数据的存储. 由于没有加密,有安全性问题,数据上还需要自 ...
- 根据Dockerfile创建docker dotnet coer 镜像
那我们先来看看Dockerfile文件内容,注意这个文件是没后缀名的. #依赖原始的镜像,因为我们是要创建dotnet coer镜像,所以我就用了官方给的镜像[microsoft/dotnet:lat ...
- svn解除控制
转自 :http://guoyong123.blog.163.com/blog/static/162543782010428102928353/ 一直在研究svn,今天让我们组将文件加入到服务器上,但 ...
- 手机1520 win8.1升级win10
昨天买了手机1520,卖家不错:https://item.taobao.com/item.htm?id=525484481986 于是我想把win8.1升级为win10 首先去http://www.i ...
- eclipse环境下,java操作MySQL的简单演示
首先先通过power shell 进入MySQL 查看现在数据库的状态(博主是win10系统) 右键开始,选择Windows powershell ,输入MySQL -u用户名 -p密码 选择数据库( ...
- Lustre文件系统测试——obdfilter-survey测试
Lustre文件系统测试--obdfilter-survey测试 介绍 该测试主要是在lustre文件系统工作环境下进行,将直接在ost上生成工作负载模拟并行文件访问,可准确检测盘阵在lustre文件 ...
- vue-cli + sass 的正确打开方式
关于在vue-cli搭建的项目中怎么配置sass,网上搜到的基本是这种答案: 但是我认为,直接将样式写在每个单文件的<style>里,是十分不明智的做法.且不说node-sass安装过程的 ...