Hibernate是一个基于元数据轻量级的ORM框架。
1.元数据(Meta Data):data about data(数据的数据),也就是说描述一个对象数据,相当于这个对象的上下文环境。
2.ORM(Object-Relational-Mapping) 对象关系的映射。
ORM的设计目的和思想就是将数据访问的细节从业务逻辑层分离开来,把数据库访问层操作的细节单独分到持久层(数据库层,只做数据库连接的事情,) Hibernate ORM框架
中使用XML文件或注解来描述对象关系的映射,封装了数据库访问的操作,实现了实体对象持久化,将业务逻辑层和数据层进行分离解耦。
a.和前边几个框架的大概流程一样,首先需要在我们lib目录下拷入必备的jar包。
导入数据库连接池c3p0的包
b.引入我们的配置文件:
hibernate.cfg.xml Hibernate核心配置文件(包括数据库的连接配置,映射文件的读取等)
hibernate.hbm.xml 映射文件(一个实体类对应一个类的映射文件。)
c.先写我们的核心配置文件:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <!-- 构造数据库的连接工厂,这是Hibernate的核心类 --> <session-factory> <!-- 数据库连接的基本信息,替换掉我们的util包里的MyConnection类以及实现类 --> <property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property> <property name="connection.url">jdbc:sqlserver://localhost:1433;DatabaseName=SSH</property> <property name="connection.username">sa</property> <property name="connection.password">123</property> <!-- 方言:根据指定的方言与数据库打交道,完成SQL的具有语句生成,因为不同的数据库sql语法是有区别的, 这里相当于告诉Hibernate框架,我们使用的是什么数据库。 --> <property name="dialect">org.hibernate.dialect.SQLServer2008Dialect</property> <!-- 创建数据库的连接对象 --> <property name="connection.pool_size">5</property> <!-- 在控制台输出我们的sql语句 --> <property name="show_sql">true</property> <!-- 在控制台格式化我们的sql语句 --> <property name="format_sql">true</property> <!-- 如果数据库不存在则会自动创建一个表 --> <property name="hbm2dll.auto">update</property> <!-- 管理映射资源文件,应该将映射配置文件设置到这里,这样我们框架就能找到我们的hbm.xml的映射文件了 --> <mapping resource="java_entity/BookJava.hbm.xml"></mapping> </session-factory> </hibernate-configuration>
d.写我们的映射文件(把我们的映射文件跟POJO放在同一个包里面)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Generated 2016-8-30 10:28:51 by Hibernate Tools 3.5.0.Final --> <hibernate-mapping> <!-- 实体类class和数据库表table的映射 table写的是表名--> <class name="java_entity.BookJava" table="bookJava"> <!-- id元素对应了表中的主键,持久化生成一个对象标识符来建立内存中的对象和数据表中的对应关系 --> <id name="cid" type="int"> <column name="cid"></column> <generator class="increment"></generator> </id> <!-- 普通属性的映射 name 表示类中的属性名称;type 表示表中数据的类型;column 表示表中的列名称--> <property name="name" type="java.lang.String"> <column name="name"></column> </property> <property name="BookDate" type="java.sql.Date"> <column name="BookDate"></column> </property> <property name="deposit" type="java.math.BigDecimal"> <column name="deposit"></column> </property> </class> </hibernate-mapping>
e. 在上面我们的核心配置文件跟映射文件已经创建好了,现在我们可以通过Hibernate框架提供的方法进行对数据库的数据操作了,简单看一个dao层类的实现:
import org.hibernate.query.Query; import java_entity.BookJava; public class JavaBookDaoImpl implements JavaBookDao { @Override public List<BookJava> getAllJavaBookDao() { //1.dao这一层只做访问数据库 //2.任何与数据库无关的代码,统统不参与 //创建Configuration类的实例,调用configure()方法加载 hibernate.cfg.xml配置文件 Configuration cg=new Configuration().configure("hibernate.cfg.xml"); //创建连接工厂 SessionFactory sf=cg.buildSessionFactory(); //会话对象,表示与数据库的连接会话过程,相当于jdbc的connection连接对象,并获取会话对象 Session session=sf.openSession(); //写查询的hql语句,BookJava是实体类的名字(不是表名) Query query=session.createQuery("from BookJava"); //获取到表里的数据封装在list集合里面 List<BookJava> list=query.getResultList(); //关闭资源 session.close(); sf.close(); return list; } }
hibernate框架搭建已经写的差不多了,想说的是这里只是写出了Hibernate框架是从创建sessionFactory对象,然后创建session对象,通过session对象进行对数据库的操作。