使用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
区别懒加载(延迟加载)和直接加载


- get方法:直接加载,当程序运行到此方法时,就直接与数据库进行交互取出数据
- load方法:懒加载(延迟加载),当执行到此方法的时候,不会立即取出数据,当调用数据的时候才会从数据库取。
Save()和SaveorUpdate()
- Save()方法,只执行增加操作
- SaveorUpdate(),当数据库没有本条数据的话(主键唯一),进行增加操作,当数据库存在本条信息的话,就进行update()方法。
线程绑定模式
<property name="current_session_context_class">thread</property>
在hibernate.xml中插入以上变量,表示让hibernate处于线程绑定模式
当我们使用线程绑定模式的时候,我们获取session就可以使用SessionFactory.getCurrentSession()这个方法。这样提供的session当事务提交之后,会自动关闭session,确保线程安全。同时注意,在使用线程绑定模式的时候,我们使用查询语句也需要开启事务