1.什么是hibernate?
首先,hibernate是数据持久层的一个轻量级的框架。数据持久层的框架有很多比如:iBATIS,my Batis… hibernate是一个开源orm(object relations model)框架,提供了查询获取数据的方法,用面向对向对象来操作数据库,节省处理数据的时间。
2.hibernate的优点
(1)使用简洁的hql语句(hibernate query language)。可以不使用传统的增删改sql语句例如(insert,delete,update等)。比如insert一个对象,传统做法 insert into 表名称 value(值1,值2,值3,…)现在的做法是:save(对象)
public static void main(String[] args) {
//1. 获取SessionFactory
SessionFactory sf = new Configuration().configure().buildSessionFactory();
Session s = sf.openSession();//2. 通过SessionFactory 获取一个Session
s.beginTransaction();//3. 在Session基础上开启一个事务
Category c = new Category();
c.setName("分类1");
s.save(c);//通过调用Session的save方法把对象保存到数据库
s.getTransaction().commit();//5. 提交事务
s.close();//6. 关闭Session
sf.close();//7. 关闭SessionFactory
}
}
(2)使用or映射。对象到关系数据库之间的映射。是从对象的角度操作数据库,体现面向对象的思想,原来的方法:首先有表,然后映射到实体对象(实体类)。而现在的做法直接由对象映射到表。
<hibernate-mapping package="com.hy.pojo">
<class name="Product" table="product_"><!-- 映射 Product类对应数据库中的product_表-->
<id name="id" column="id"><!--表示属性id,映射表里的字段id 如果是连接oracle数据库,可以指定sequnce作为id自增长方式 -->
<generator class="native"><!-- 意味着id的自增长方式采用数据库的本地方式 -->
</generator>
</id>
<property name="name" />
<property name="price" />
</class>
</hibernate-mapping>
(3)没有浸入性,移植性比较好,什么叫没有浸入性?就是hibernate采用了pojo对象,所谓的pojo对象就是没有继承hibernate类或hibernate接口,这样的话就是一个普通的java类,所以移植性较好。
(4)支持透明持久化。透明是针对上层而言的。三层架构的理念是上层对下层的依赖,只依赖接口不依赖具体实现,而hibernate中的透明是指对业务逻辑层提供一个接口session,而其他的都封装隐藏。持久化是指把内存中的数据放到磁盘上的文件中。
3.hibernate的缺点
世界上没有一样事物是十全十美的,即使再优秀的hibernate也有弱点。比如:若是对大量数据的操作,则不适用hibernate。并且一个持久化对象不能映射到多张表。
4.hibernate中的5个接口
(1)Configuration接口:负责配置及启动hibernate,用来创建SessionFactory。
(2)SessionFactory接口:一个SessionFactory对另一数据源储存,简单的理解就是一个数据库对应一个SessionFactory。SessionFactory用来创建Session对象。并且SessionFactory是线程安全的,可以由多个线程访问sessionFactory共享。
(3)Session接口:这个接口是hibernate中常用的接口,主要用于对数据库操作(增删改查)。这个Session不是线程安全的,不能共享。
(4)Query接口:用于数据库查询对象。
(5)Transaction接口:hibernate事务接口。它封装了底层的事务操作,比如JTA(java transaction architecture)所有事务的操作,增删改查都写在事务中。