Hibernate-- (二)核心类和接口
来源:互联网 发布:win7摄像头打开软件 编辑:程序博客网 时间:2024/04/30 08:55
这一章简单说一下hibernate的核心类和几个重要的接口,因为我是菜鸟,还在学习中,所以有什么不对的地方,还希望指出来。
废话不多说,直接进入正题
1.Configuration类
Configuration类有什么作用那?
(1)负责管理hibernate的配置信息。
(2)读取hibernate.cfg.xml
(3)加载hibernate.cfg.xml配置文件中配置的驱动、URL、用户名、密码、连接池。
(4)管理 *. hbm.xml对象关系文件。
代码举例:
Configuration cf = new Configuration().configure();
2.hibernate.cfg.xml文件
(1)该对象文件主要用于指定各个参数,是hibernate核心文件。
(2)默认放在src目录下,也可以放在别的目录下。
(3)指定连接数据库的驱动、用户名、密码、URL、连接池。
(4)指定对象关系映射文件的位置。
(5)也可使用hibernate.properties文件来替代该文件,不过一般使用hibernate.cfg.xml
3.对象关系映射文件( * . hbm . xml )
(1) 该文件主要作用是建立表和类的映射关系,是不可或缺的重要文件。
(2)一般放在其映射的类同一个目录下。
(3)命名方式一般是 类名 . hbm . xml 。
(4)示意图:
4.SessionFactory(会化工厂)接口
(1)缓存Sql语句和某些数据
(2)在应用程序初始化的时候创建,是一个重量级的类(会占用比较多的内存),一般使用单例模式保证一个应用中只需要一个SessionFactor实例。
(3)如果某个应用访问多个数据库,则需要创建多个会化工厂实例,一般是一个数据库一个会化工厂实例。
(4)通过SessionFactory接口可以获得Session(会话)实例,SessionFactory获取Session的两个方法为openSession()和getCurrentSession();
openSession是获得一个全新的Session,而getCurrentSession则是获得和当前线程绑定的Session,在同一线程中,获取的是同一个Session,这样可以利于事务的控制。
在使用getCurrentSession()时,需要在hibernate.cfg,xml文件中配置如下代码:
<property name="carrent_session_context_clss">thread</property>
在 SessionFactory启动的时候,Hibernate会根据配置创建相应的CurrentSessionContext,在getCurrentSession()被调用的时候,实际被执行的方法是CurrentSessionContext.currentSession()。在currentSession()执行时,如果当前Session为空,currentSession会调用SessionFactory的openSession。
这就是openSession()和getCurrentSession()的联系。
5.Session接口
(1)Session一个实例代表与数据库的一次操作(可以是CRUD的组合)。
(2)Session实例通过SessionFactory获取,所以用完之后需要关闭。
(3)Session是线程不同步的,所以它不安全,因此要保证在同一线程中使用,可以用getCurrentSession()。
(4)Session可以看做是持久化管理器,它是与持久化操作相关的接口。
Session几个重要的方法:
1.保存一个对象:
public Serializable save(String entityName, Object object) throws HibernateException
2.删除一个对象:
public void delete(String entityName, Object object) throws HibernateException
3.查询一个对象:
public Object get(String entityName, Serializable id, LockMode lockMode) throws HibernateException
或
public Object load(String entityName, Serializable id, LockMode lockMode) throws HibernateException
4.修改一个对象:
public void update(String entityName, Object object) throws HibernateException
6.get()和load()区别
上面提到Session中查询对象的方法有两个,那他们之间有什么区别那?
1、get()方法直接返回实体类,如果查不到数据则返回null。而load()会返回一个实体代理对象(当前这个对象可以自动转化为实体对象),但当代理对象被调用时,如果没有数据不存在,就会抛出个org.hibernate.ObjectNotFoundException异常。
2.load()方法先到缓存(session缓存/二级缓存)中去查,如果没有则返回一个代理对象(不马上到DB中去找),等后面使用这个代理对象操作的时候,才到DB中查询,这就是常说的load()方法在默认情况下支持延迟加载。
3. get()先到缓存(session缓存/二级缓存)中去查,如果没有就到DB中去查(即马上发出sql)。总之,如果确定DB中有这个对象就用load(),不确定就用get()(这样效率高)。
好了,这一章节就介绍这些,欢迎大家点评。
- Hibernate-- (二)核心类和接口
- Hibernate基本知识(二)--Hibernate核心接口
- Hibernate核心接口和类
- Hibernate核心接口和类
- hibernate核心类和接口
- Hibernate核心接口和类
- Hibernate核心接口和类
- Hibernate核心类和接口
- Hibernate核心类和接口
- 【Hibernate框架学习】:Hibernate进阶之Hibernate核心接口和类(二)
- Hibernate(2)Hibernate核心类和接口
- hibernate笔记二 核心接口与类
- Hibernate(三):Hibernate核心类,接口
- (第3讲)hibernate的核心类和接口
- Hibernate的核心类和接口
- Hibernate的核心类和接口
- Hibernate核心类和接口详细介绍
- hibernate的核心类和接口
- achartengine显示日期柱状图(不显示x轴的值)
- 时的故事的个是德国大使馆
- C语言的谜题
- ASP.NET的控件
- 你真正理解java的字符类型了吗?(bit,byte,short,int等字符类型)
- Hibernate-- (二)核心类和接口
- 自己动手编写一个VS插件(七)
- Link形式离线安装EclipseMaven插件
- CMake用法(1)
- R0中HOOK读写内存句柄转换问题
- 一道C++试题的出题考虑和考后反思
- .net环境下,服务器端运行Javascript
- 文件操作
- 自己动手编写一个VS插件(八)