一、Hibernate中对象状态
学习Hibernate API之前要知道Hibernate中对象的几种状态,这样对API的学习会更加深入。
对象状态:
瞬时(transient):刚new出的对象,没有跟Session关联。数据库中没有此条记录。
持久(persistent):此对象跟Session有关联,Session没有关闭,事务没有提交。数据库中已有此数据。
对象发生变化 时Hibernate还会检测到。
脱管(detached):跟Session已经没有关联,数据库中有此数据。对象发生变化时Hibernate不会检测到。也叫游离。
二、介绍一下Hibernate中主要的API:
1、org.hibernate.cfg.Configuration类
作用:配置并启动Hibernate。读取配置文件、读取映射文件。创建单实例的SessionFactory。
configure():读取"/hibernate.cfg.xml"配置文件。
buildSessionFactory():创建SessionFactory
setProperty(String key,Object value):通过代码给Hibernate设置属性值
2、org.hibernate.SessionFactory接口
作用:初始化Hibernate,负责创建Session。使用了工厂模式。
openSession():创建数据库连接,并且返回一个Session。
3、org.hibernate.Session接口
作用:执行对持久化对象的CRUD操作。包含了很多常见的SQL语句。
beginTransaction():开始一个事务,并且返回一个事务的实例。
save(Object):创建一条记录。
persist(Object) :同save(Object)方法类似。
saveOrUpdate(Object):创建或更新一条记录。
merge(Object):
get(Class, Serializable):根据id查询。
load(Object, Serializable):根据id查询 。返回的是代理,不会立刻访问数据库。懒加载的。
delete(Object) :删除一条记录
4、org.hibernate.Transaction接口
作用:负责事务的操作。
commit():事务提交
5、org.hibernate.Query接口
作用:Query可以使用HQL语言来查询数据库。
list():返回查询结果集。返回结果是List。
uniqueResult() :查询唯一的结果。返回结果是Object。
setXXX():给参数设置值
分页:
setFirstResult(int):设置分页时开始的位置。不论哪个数据库都通用
setMaxResult(int):设置分页时返回的结果数。不论哪个数据库都通用
6、org.hibernate.Criteria接口
作用:条件查询,比Query更加面向对象。
add(Criterion):添加约束条件
7、org.hibernate.criterion.Restrictions类
作用:
三、HQL语言(Hibernate Query Language)
HQL是面向对象的查询语言。HQL查询的是对象而不是表。
HQL主要通过org.hibernate.Query来操作。Query的创建方式:
Query q = session.createQuery(hql);
String hql = "from User as user where user.name=?";
q.setString(0,"zhangsan");
List<User> list = q.list();
Object o = q.uniqueResult();
命名参数方式:
String hql = "from User as user where user.name=:n"; //冒号加上变量的名字
q.setString("u","zhangsan");
四、Criteria查询方式(条件查询)
Criteria是一种比HQL更加面向对象的查询方式。
Criteria c = session.createCriteria(User.class); //参数是要查询的类
c.add(Restrictions.eq("name",n)); //添加约束条件。第一个参数是类的字段名,第二个参数是匹配的值
List<User> list = q.list();
Object o = q.uniqueResult();
联系客服