Hibernate常用接口及方法总结
来源:互联网 发布:电信云计算地址 编辑:程序博客网 时间:2024/05/20 20:46
一、hibernate常用的接口和类的方法 网易博客cyeagle
A、Configuration 此类是创建配置文件(hibernate.cfg.xml)的对象的类,当它创建好时调用的是configure()方法即可加载配置文件
eg: Configuration cfg=new Configuration().configure();
如果项目中涉及到多个数据源,那么必须针对每个数据源创建一个配置文件
B、SessionFactory是Session的工厂对象,一个数据源有且只能创建一个此对象,此类的作用是对数据库的链接,根据所配置的信息来产生session对象
C、Session接口,是一个提供数据的CRUD操作以及持久化对象的持久操作
常见的主要方法:save(),update(),delete(),clear(),close(),flush(),get(),load(),beginTransaction()。
1.save():将持久化对象保持到session缓存中,切忌并不是数据库中,它主要做的事情是:a.根据持久化对象标识生成策略去标识,如:native,会在oracle数据库中产生序列 的nextval即:hibernate_sequence.nextval。assigned,要手动的输入主键。b.将获取到的标识数据通过持久化对象的setter方法放入对象中,所以对象在sava方法里才能够获得标识 的值。c.将持久化对象放入session缓存,在commit()的时候会生成insert语句
2.update(): 将保存在session缓存中的持久化对象的数据进行更新,但不能跟新持久化标识,在commit()的时候会生成update语句
3.delete():此方法用于从数据库中删除与Java对象对应的记录。如果传入的参数是持久化对象,Session就计划执行一个delete语句。如果传入的参数是游离对象,先使游离对象被 Session关联,使它变为持久化对象,然后计划执行一个delete语句。值得注意的是,Session只有在提交事务的时候的才执行delete语句。此外,只有当调用Session的close()方法时 ,才会从Session的缓存中删除该对象。
例如以下代码先加载一个持久化对象,然后通过delete()方法将它删除:
- Session session1 = sessionFactory.openSession();
- Transaction tx1 = session1.beginTransaction();
- // 先加载一个持久化对象
- Customer customer = (Customer)session.get(Customer.class, new Long(1));
- session.delete(customer); // 计划执行一个delete语句
- txt1.commit(); // 清理缓存,执行delete语句
- session.close();子// 从缓存中删除Customer对象
以下代码直接通过delete()方法删除一个游离对象:
- Session session2 = sessionFactory.openSession();
- Transaction tx2 = session1.beginTransaction();
- // 假定customer是一个游离对象,先使它被Session关联,使它变为持久化对象,
- // 然后计划执行一个delete语句
- session2.delete(customer);
- tx2.commit(); // 清理缓存,执行delete语句
- session2.close(); // 从缓存中删除customer对象
如果希望删除多个对象,可以使用另一种重载形式的delete()方法:
- session.delete("from Customer as c where c.id>8");
以上delete()方法的参数为HQL查询语句,delete()方法将从数据库中删除所有满足查询条件的记录。
4.clear(),clear(),close(),flush():都是清空session中的对象
5.get(),load():如果未能发现符合条件的记录,get方法返回null,而load方法会抛出一个ObjectNotFoundException。get方法如果在session缓存中找到了该id对应的对象 ,如果刚好该对象前面是被代理过的,如被load方法使用过,或者被其他关联对象延迟加载过,那么返回的还是原先的代理对象,而不是实体类对象,如果该代理对象还没有加载实体 数据(就是id以外的其他属性数据),那么它会查询二级缓存或者数据库来加载数据,但是返回的还是代理对象,只不过已经加载了实体数据。load()是延迟加载,当使用加载的对象的时候,hibernate才会发出sql语句。
6.beginTransaction():它是对事务的开启
D. Transaction,是一个接口,提供了事务的控制操作。
常见的方法主要有:
begin():开始事务
commit(): 清空session中的对象,并且更新到数据库中
rollback():回滚事务
二、hibernate的持久化对象的状态变化
A. 瞬态:对象不存在于session中,也不存在于数据库中
B. 持久态:对象存在于session中,数据库中存不存在没关系
C. 游离态:对象不存在于session中,存在于数据库中
session的save()、update()、get()、load()会将对象变成持久态
session的clear()、close()、flush()会将对象变成托管态或者瞬态(没有进行事物提交)
session的delete()会将对象变成瞬态
经过研究,瞬态在经过session.sava(obj)后,在commit()时就会将瞬态转化为持久态,游离态在session.update(obj)后,在commit()时就会将游离态转化为持久态,最终是将瞬态,游离态转化为持久态与数据库打交道
尽管以上的内容很繁琐,但是只需要记住一点:session中可以保存对象,并且session中不同对象,标识不能相同。
- Hibernate常用接口及方法总结
- session方法及hibernate接口
- 常用Unity3d方法及接口
- hibernate中session接口方法总结
- hibernate框架的session接口方法总结
- hibernate中session接口方法总结
- hibernate中session接口方法总结
- hibernate中session接口方法总结
- SERVLET类常用接口及方法
- SERVLET类常用接口及方法
- SERVLET类常用接口及方法
- Hibernate三种状态及常用方法
- Hibernate核心接口总结
- request对象分析及常用方法总结
- SharePoint 2010 -- 常用技巧及方法总结
- ListView常用方法及问题解决办法总结
- servlet常用属性及方法总结
- Handler总结常用方法及常见问题
- 百度地图之云检索功能
- hdu 1799 循环多少次? 动态规划
- Study FlexBuilder《4.6版本及SDK下载》
- socket阻塞与非阻塞,同步与异步、I/O模型
- C++ builder系列之------项目文件及项目初始程序介绍
- Hibernate常用接口及方法总结
- 判断整数是否是回文数
- 10款免费且开源的项目管理工具
- 【Struts2】用Struts2实现列表显示和分页功能
- SDJZUOJ 1035 放大的X
- 教你如何分割大体积的ISO镜像文件
- socket perror 为operation on non-socket 解决
- 直接拿来用!最火的Android开源项目(二)
- 不良编程文化