Hibernate是数据持久化工具,也是一个开放源代码的ORM解决方案。Hibernate内部封装了通过JDBC访问数据库的操作,向上层应用提供面向对象的数据访问API。
使用Hibernate完成持久化操作。需要编写的代码如:
Session session=HibernateUtil.currentSession();
Query query=session.createQuery("from User");
List<User> users=(List<User>) query.list();
Hibernate是一个自定义的工具类,用于获取Hibernate的Session对象,session是Hibernate执行持久化操作的核心API。Hibernate处理数据库查询时,编写的代码非常简洁,作为查询结果,可以直接获得一个存储着User的实例的list集合实例,避免了繁琐的重复性的数据转换过程。
Hibernate框架的优点:
(1)Hibernate功能强大,是java应用与关系数据库之间的桥梁,较之JDBC方式操作数据库,代码量大大减少,提高了持久化代码的开发速度,降低了维护成本。
(2)Hibernate支持许多面向对象的特征。如组合,继承,多态等。使得开发人员不必再面向业务领域的对象模型和面向数据库的关系数据模型之间来回切换,方便开发人员进行领域驱动的面向对象的设计与开发。
(3)可移植性好,系统不会绑定在某个特定的关系型数据库上,对于系统更换数据库,通过只需要修改Hibernate配置文件即可正常运行。
(4)Hibernate框架开源免费。可以在需要时研究源代码,改写源代码进行功能的定制,具有可扩展性。
Hibernate的缺点:
(1)不适合以数据为中心,大量使用存储过程的应用。
(2)大规模的批量插入,修改和删除不适合用Hibernate。
Hibernate环境搭配:
1.下载jar文件
2.部署jar文件
3.创建配置文件Hibernate.cfg.xml
4.创建持久化类和映射文件
使用Hibernate完成持久化操作
使用Hibernate操作数据库的七个步骤:
(1)读取并解析配置文件及映射文件
Configuration cf=new Configuration().configure();
(2)依据配置文件和映射文件的信息,创建SessionFactory对象
SessionFactory factory=cf.buildSessionFactory();
(3)打开Session
Session session=factory.openSession();
SessionFactory负责创建Session对象。
Session是Hibernate持久化操作的基础,Session作为贯穿Hibernate的持久化管理器的核心,提供了众多持久化方法,如save(),delete(),update(),get(),load()等,通过这些方法,即可透明地完成对象的增删改查。
(4)开始一个事务
Transaction tx=session.beginTransaction();
(5)数据库操作
session.save(dog); //保存操作
(6)结束事务
tx.commit(); //提交事务
或 tx.rollback(); //回滚事务
(7)如果是通过SessionFactory的openSession()方法获取的Session对象,则需关闭session
session.close();
-------------------------------------------Hibernate第一个案例----------------------------------------------------
首先创建一个类,并写上属性,进行封装
public class Dog { private String dname; private int dage; private int did;
创建小配置映射文件
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" [ <!ENTITY types SYSTEM "classpath://your/domain/types.xml">]> <hibernate-mapping package="cn.happy.entity"> <class name="Dog" table="Dog"> <id name="did" column="did"> <generator class="native"/> </id> <property name="dname" column="dname"></property> <property name="dage" column="dage"></property> </class> </hibernate-mapping>
创建大配置
<?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> <session-factory> <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property> <property name="connection.username">happyy2165</property> <property name="connection.password">happyy2165</property> <!--SQL dialect SQL方言--> <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property> <!-- <!– JDBC connection pool (use the built-in) –> <property name="connection.pool_size">1</property> --> <!--打印SQL控制台--> <property name="show_sql">true</property> <!--自动构建表结构 create先delete表结构 再创建,update直接更新表数据--> <property name="hbm2ddl.auto">update</property> <mapping resource="cn/happy/entity/Dog.hbm.xml"/> </session-factory> </hibernate-configuration>
测试类
public class Testhibernate01 {
@Test public void test01(){ //1.构建Configuration对象,读取了大配置 Configuration cf=new Configuration().configure(); //2.构建工厂 SessionFactory factory=cf.buildSessionFactory(); //3.session对象 openSession() Session session=factory.openSession(); // Dog dog=session.load(Dog.class,1); Transaction tx=session.beginTransaction(); Dog dog=new Dog(); dog.setDname("啦啦"); dog.setDage(20); session.save(dog); tx.commit(); System.out.println("OK!"); session.close(); } }pom.xml
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core--> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.2.10.Final</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.transaction/jta--> <dependency> <groupId>javax.transaction</groupId> <artifactId>jta</artifactId> <version>1.1</version> </dependency>