Hibernate进阶

552 阅读2分钟

使用HQL

几种简单的用法

  • 查询全部(这里的‘表名’是实体类的类名)
HQL:from Person
  • 模糊查询 和sql一样,可以使用set方法对其进行赋值
HQL:from Person where pname like ?
Query q = session.createQuery(hql);
q.setString(0, "%"+str+"%");
  • 使聚合函数
from Person order by pid
select count(*) from Person

其中注意的是Query所提供的方法:
可以查看他的源码,在hibernate3包下,名字为Query的接口,点击它前面的小三角查看它所提供的方法。
常用的方法如下:

  • q.list(); 返回值类型是list,用来获得查询所得的结果集合(List<T>)
  • q.setFirstResult((page-1)*pageSize):用来实现分页,获得本页的第一个数据位置
  • q.setMaxResults(pageSize):用来实现分页,获得本页的第一个数据位置
  • q.uniqueResult() :用来获得查询结果的总结果数,返回值为int

区别懒加载(延迟加载)和直接加载

在session提供的方法中,有两个作用是一样的,他们分别是get()和load()方法,他们都可以来查询一条数据,但是他们有着很大的区别。

  • get方法:直接加载,当程序运行到此方法时,就直接与数据库进行交互取出数据
  • load方法:懒加载(延迟加载),当执行到此方法的时候,不会立即取出数据,当调用数据的时候才会从数据库取。

Save()和SaveorUpdate()

  • Save()方法,只执行增加操作
  • SaveorUpdate(),当数据库没有本条数据的话(主键唯一),进行增加操作,当数据库存在本条信息的话,就进行update()方法。

线程绑定模式

<property name="current_session_context_class">thread</property>
在hibernate.xml中插入以上变量,表示让hibernate处于线程绑定模式 当我们使用线程绑定模式的时候,我们获取session就可以使用SessionFactory.getCurrentSession()这个方法。这样提供的session当事务提交之后,会自动关闭session,确保线程安全。同时注意,在使用线程绑定模式的时候,我们使用查询语句也需要开启事务