Hibernate基础(一)

一.Hibernate核心类

以下几个核心类几乎在任何实际开发中都会用到,通过这些类,不仅可以存储和获得持久对象,并且能够进行事物控制。下面一一进行·介绍。

1.Configuration类

Configuration类的作用是对hibernate进行配置,以及对它进行启动。可以完成以下几项工作:

        a)加载配置文件

Configuration类的实例首先定位映射文档的位置,读取这些配置,然后创建一个SessionFactory对象。eg:

Configuration config=new Configuration().configure();

Hibernate会自动在当前的classpath中搜寻hibernate.cfg.xml或者hibernate.properties文件并将其读到内存中作为后继操作的基础配置。

如果不希望使用默认的hibernate.cfg.xml文件作为配置文件,也可以指定配置文件名:

File file=new File("d:\\xautjzd\\myhibernate.xml");

Configuration config=new Configuration().configure(file);

b)动态添加映射文件

可以利用Configuration类在程序中添加xml映射定义文件。如果映射定义文件在classpath中,则:

Configuration cfg=new Configuration();

cfg.addResource("User.hbm.xml");

或者指定被映射的类,让hibernate寻找映射定义文件:

Configuration cfg=new Configuration().addClass(org.hibernate.auction.User.class);

c)可以通过Configuration指定配置属性

Configuration cfg=new Configuration().setProperty("hibernate.dialect","org.hibernate.dialect.MySQLDialect");


2.SessionFactory类

它是在整个应用中共享。但是当项目需要操作多个数据库时,必须为每个数据库指定一个SessionFactory。一般通过如下方式获得SessionFactory实例:

Configuration config=new Configuration().configure();

SessionFactory sessionFactory=config.buildSessionFactory();

然后从SessionFactory获得Session对象:

Session session=sessionFactory.openSession();

SessionFactory.close()用于释放某些资源,如缓存、连接池等。


3.Session类

Session类对于hibernate开发人员来说是最重要的一个类。Session是持久层操作的基础,相当于JDBC的Connection。Session实例通过SessionFactory实例来获取,之后就可以调用Session所提供的save、get、load、update、delete、flush等方法完成持久层操作。

eg:  Session session=sessionFactory.openSession();

Person person=new Person();

person.setName("xautjzd");

person.setAge(23);

session.save(person);

session.flush();

Session的flush方法是强制数据库同步,即强制hibernate将person实例立即同步到数据库中。如果在事物中则不需要flush方法,在事物提交的时候,hibernate会自动执行flush方法,另外当Session关闭时,也会自动执行flush方法。


4.Query和Criteria类

通过Query类可以方便地对数据库及持久对象进行查询,有两种表达方式:HQL语言或者本地数据库的SQL语言。

Criteria类与Query类非常类似,可以认为Criteria Query是传统SQL的对象化表示。


5.Transaction接口


二.Session清理缓存的时间点

   Session通过setFlushMode()来设置清理缓存的时间点。FlushMode类定义了三种不同的清理模式:FlushMode.AUTO、FlushMode.COMMIT、FlushMode.NEVER,无论哪种,当调用session.flush()都会清理缓存。区别是:

 设置为FlushMode.AUTO时,则session.find()、session.iterate()、transaction.commit().session.flush()都将会清理。

 设置为FlushMode.COMMIT时,则只有transaction.commit()方法调用时才会自动清理缓存。

 设置为FlushMode.NEVER时,则只能通过session.flush()来清理。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值