Hibernate HQL



HQL查询

HQL查询:简单属性查询:

1.单一属性查询,返回属性结果集列表,元素类型和实体类中相应的属性类型一致。

2.多个属性查询,多个属性查询返回的是对象数组,对象数组的长度取决于属性的个数,对象数组中元素的类型取决于属性在实体类中属性的类型。 (我们可以使用增强for循环结合数组下标来获得属性具体信息)

3.如果觉得返回数组不够对象化,那么我们可以在实体中构造我们需要的构造方法,来获得我们需要的实体对象

 

HQL查询:对象实体查询:

N + 1问题,就是发出了N+1sql语句

1:首先发出查询对象id列表的语句

N:根据id到缓存中查询,如果缓存中不存在与之匹配的数据,那么会根据id发出相应的sql语句

  listiterate的区别?

    list: 默认情况下list每次都会发出sql语句,list会将数据放到缓存中,而不利用缓存

    iterate:默认情况下iterate利用缓存,如果缓存中不存在会出现N+1问题

    备注:Hibernate4.x之后好像已经避免了N+1问题了吧。

 

HQL条件查询:

1.可以采用拼字符串的方式传递参数(不推荐使用,就有点类似jdbc中的Statement)

2.可以采用? 填充占位符的形式来添加参数(推荐使用,就类似jdbc中的PreapredStatement)

3.可以使用参数名来传递参数(类似于占位符但是要符合一定格式比如  name=:myname) 不是特殊情况就不要使用这种方式,也没看到有什么好处。

4.如果传递多个参数,可以采用setParamterList方法:就当是一个小技巧吧,没有它也能做。

5.hql中可以使用数据库函数 如:date_format

备注:填充占位符的时候:索引下标是从0开始的,jdbc是从1开始的。

方法链式编程推荐使用

如果知道返回结果肯定是唯一的话,我们就不需要使用list()方法了,我们直接使用uniqueResult()方法

 

HQL查询:直接使用原生SQL查询

hibernate直接使用sql语句查询

备注:它只是把HQL转换为SQL其它的所有都没有变化。该怎么用就怎么用.

备注:如果遇到Hibernate性能瓶颈或是使用HibernateHQL实现太复杂的话,我们就需要考虑使用原生SQL了。

HQL查询外置命名查询

1.咋映射文件中使用<query>标签定义hql  (完全不推荐,除非是有什么特殊要求)

2.在程序中使用session.getNamedQuery()方法得到hql查询串。

 

HQL查询查询过滤器

1.在映射文件中定义过滤参数

2.在类的映射中使用过滤参数

3.在程序中必须显示的启用过来长期,并且为过滤器参数赋值

HQL查询:  分页查询

1.setFirstResult(),从哪开始

2.setMaxResults(),每页显示的记录数

分页查询很重要,一定要很掌握。

 

HQL查询:对象导航查询

 有时候它使用起来比SQL更方便。

HQL查询:连接查询

1.内连接  (即左右两边都有数据)    记录是最少的

2.外连接 (分为左外连接、右外连接)

按道理来说,外联结应该还有一个全连接的,但是我并没有在hibernate出发现,不过在Oracle中全外连接记录是最多的。

HQL查询:统计查询

统计查询(挺重要的)

备注:分组函数

 

HQL查询:DML风格的操作(尽量少用,因为和缓存不同步)


参考我自己写的程序hibernate4.x项目


导出建表语句的方法:

Configuration cfg = new Configuration().configure(); 
  SchemaExport export = new SchemaExport(cfg);
  export.create(true, true);





 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值