您的位置:首页 > 其它

hibernate--4.核心api

2017-03-20 20:52 239 查看

1      核心api

1.1        配置



1.2        工厂



SessionFactory负责创建Session或EntityManager,它保存了对应当前数据库配置的所有映射关系,同时也负责维护当前的二级缓存和语句池。
SessionFactory创建过程复杂,代价高昂,因此SessionFactory采用了线程安全的设计,可以被多个线程并发访问,在应用中针对一个数据库共享一个SessionFactory即可。

 

1.3        会话



 


1.4        查询



1.5        事务



 

 

2      Hibernate核心api

2.1        Configuration

       到src下面找到名称hibernate.cfg.xml配置文件,创建对象,把配置文件放到对象里面(加载核心配置文件)

 


2.1.1      负责管理 Hibernate 的配置信息

底层信息:

       数据库的URL、用户名、密码、JDBC驱动类,数据库Dialect,数据库连接池

持久化类与数据表的映射关系:

       *.hbm.xml 文件

2.1.2      创建 Configuration 的两种方式



2.2        SessionFactory

2.2.1      SessionFactory接口

       使用configuration对象创建sessionFactory对象

       创建sessionfactory过程中做事情:

       针对单个数据库映射关系经过编译后的内存镜像,是线程安全的。

       根据核心配置文件中,有数据库配置,有映射文件部分,到数据库里面根据映射关系把表创建

 


       创建sessionFactory过程中,这个过程特别耗资源的,在hibernate操作中,建议一个项目一般创建一个sessionFactory对象

 

(1)写工具类,写静态代码块实现

* 静态代码块在类加载时候执行,执行一次

public classHibernateUtils {

static Configuration cfg = null;
static SessionFactory sessionFactory= null;
//静态代码块实现
static {
//加载核心配置文件
cfg = new Configuration();
cfg.configure();
sessionFactory= cfg.buildSessionFactory();
}

//提供方法返回sessionFactory
public static SessionFactorygetSessionFactory() {
return sessionFactory;
}

} 


(2)测试类简化



 

2.2.2      ServiceRegistry 接口

       Hibernate4新增方法

所有基于 Hibernate 的配置或者服务都必须统一向这个 ServiceRegistry  注册后才能生效

//创建 configuration 对象
Configuration configuration = new Configuration().configure();
//创建 serviceRegistry 对象
//Hibernate4 新增了一个Se
101bd
rviceRegistry 接口,所有基于 Hibernate 的配置或者服务都必须统一向这个ServiceRegistry  注册后才能生效
ServiceRegistry serviceRegistry =
new ServiceRegistryBuilder().applySettings(configuration.getProperties())
.buildServiceRegistry();
//创建  sessionFactory 对象
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry); 


2.3        Session(重点)

2.3.1      概念

       1.Session是应用程序与数据库之间交互操作的一个单线程对象,是 Hibernate 运作的中心。所有持久化对象必须在 session 的管理下才可以进行持久化操作。

       2.此对象的生命周期很短。Session 对象有一个一级缓存,显式执行 flush 之前,所有的持久层操作的数据都缓存在 session 对象处。

       3.session类似于jdbc中connection

       4.持久化类与 Session 关联起来后就具有了持久化的能力

 

2.3.2      方法

2 调用session里面不同的方法实现crud操作

(1)添加 save方法

(2)修改 update方法

(3)删除 delete方法

(4)根据id查询 get方法

 

总结:

取得持久化对象的方法: get() ,load()

持久化对象都得保存,更新和删除:save(),update(),saveOrUpdate(),delete()

开启事务: beginTransaction().

管理 Session 的方法:isOpen(),flush(), clear(), evict(), close()等

 

 

2.3.3      注意session对象单线程对象

       session对象单线程对象,单线程对象不能共用,只能自己使用

 

2.4        Transaction

2.4.1      事务对象

代表一次原子操作,它具有数据库事务的概念。所有持久层都应该在事务管理下进行,即使是只读操作。

 


2.4.2      事务提交和回滚方法,检查

commit():        提交相关联的session实例

rollback():              撤销事务操作

wasCommitted():检查事务是否提交

 


 

 

2.4.3      事务概念

(1)事务四个特性

原子性、一致性、隔离性、持久性

 

3      Hibernate的api使用

3.1        Query对象

3.1.1      写hql语句

使用query对象,不需要写sql语句,但是写hql语句

(1)hql:hibernate query language,hibernate提供查询语言,这个hql语句和普通sql语句很相似

(2)hql和sql语句区别:

       使用sql操作表和表字段

       使用hql操作实体类和属性

 

3.1.2      查询所有hql语句:

       from 实体类名称

 

3.1.3      Query对象使用

(1)创建Query对象

(2)调用query对象里面的方法得到结果

 


 

3.2        Criteria对象

3.2.1      不要语句

使用这个对象查询操作,但是使用这个对象时候,不需要写语句,直接调用方法实现

 

3.2.2      实现过程

(1)创建criteria对象

(2)调用对象里面的方法得到结果



3.3        SQLQuery对象

3.3.1      底层sql实现

 

3.3.2      实现过程

(1)创建对象

(2)调用对象的方法得到结果



返回list集合每部分是数组



 

返回list中每部分是对象形式





 

 源代码文件:http://download.csdn.net/detail/qq_26553781/9773427

4      演示常见错误

1 在映射配置文件中,把name属性值写错了,和实体类属性名称不一样,出现异常





 

2 在核心配置文件中,没有引入映射配置文件



 

3 测试配置是否正确

(1)在工具类,写静态代码块,创建sessionFactory,过程中根据配置把表创建

(2)让工具类执行,在工具类写main方法可以了



(3)如果出现异常,弹出框



点击确定,在控制台有异常输出



 

4 配置文件里面属性值,双引号里面不能有空格

 

5 注意输入法全角问题

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: