Hibernate框架简介
⼀、什么是 Hibernate?
Hibernate 是⼀个基于元数据的轻量级的 ORM 框架:
1、元数据(Meta Data):data about data(数据的数据),也就是说描述⼀个对象数据,相当于这个对象的上下⽂环境。
2、轻量级:占⽤资源少,没有侵⼊性。(其实我认为这只是相对⽽⾔,如果和 Ibatis 相⽐,它到成重量级的了)。
3、ORM:(Object Relation Mapping)对象关系数据库的映射这是 Hibernate 框架的重点,也就是说将我们程序中的实体(bean,这⾥也叫 POJO)和数据库中的表进⾏映射。java 类型和 sql类型映射,⾯向对象设计和关系型数据库设计的映射,从⽽我们只需要将更多的精⼒放到业务中,⽽不是 sql 数据库⽅⾯。
4、POJO:(Plain Ordinary Java Object),⽆格式的普通 java 对象,也就是上边说的实体,和数据库做映射的简单类。只是在这⾥提出了⼀个新的名词⽽已。
总⽽⾔之,Hibernate 就是将我们的数据库表和程序的 POJO 类进⾏映射,数据的操作进⾏了封装,使我们不⽤把数据库弄得⾮常精通,我们会⾯向对象编程就可以了,这样⼤⼤提⾼了我们的编程效率,⽽且对个⼈的知识要求也降低了。
⼆、Hibernate 基础 ----- 数据库操作
在 Hibernate 出现之前,对数据库操作是基于 JDBC,这中间经历了操作 JDBC、封装 JDBC、ORM 三个阶段。
1、操作 JDBC 阶段:
本阶段即在调⽤ JDBC 连接数据库的包时,需要⾃⼰进⾏编写的进⾏数据库⽤户登录验证的那段代码。在这段代码中可以执⾏ SQL 语句进⾏数据查询、插⼊、删除等。
2、封装 JDBC 阶段:
由于仅仅只是操作 JDBC,使得在实现不同逻辑功能时,都要重新编写进⾏数据库⽤户登陆验证的那段代码,使得代码重复很严重。为此,引⼊了 JavaBean的技术,书写⼀个 DBAccess.java 类进⾏数据库⽤户登陆验证和数据库操作,并把其中进⾏数据库操作部分封装成不同的函数,那么实现后续的逻辑功能时只需调⽤这些函数即可实现。
3、ORM 阶段:
在对 JDBC 进⾏封装之后,能够⽅便的实现数据库的操作。但是,在⾯向对象的编程开发中,数据库的操作与普通的⾯向对象的 Java 代码,显然是两种不同的开发思路。于是就产⽣了 ORM 阶段——使原来直接操作数据库变成了直接操作普通的 Java 类来实现相应的数据库操作。
三、Hibernate 理论基础是ORM 对象关系映射
ORM 是 Object Relational Mapping 的简称,即对象关系映射。它是⼀种为了解决⾯向对象与关系数据库存在的互不匹配技术。简单地
说,ORM 是通过使⽤描述对象和数据库之间映射的元数据,将 Java 程序中的对象持久化到关系数据库中。下⾯请看⼀个⽤户实体(建⽴数据表时,要描述的现实世界中的实现)、数据表(实体建⽴完后,抽象分析完成数据表建⽴)、Java 类(此处就是 ORM要完成的任务⽽抽象⽣成的 Java 类):
ORM 实现了数据表到 Java 对象的映射,这正是 ORM 的作⽤
四、持久层概念
ORM 是通过使⽤描述对象和数据库之间映射的元数据,将 Java 程序中的对象⾃动持久化到关系数据
库中。由此便引⼊了以下两个新概念:(1)持久化:就是对数据和程序状态的保持。⼤多数情况下特别是企业级应⽤,数据持久化往往也就意味将内存中的数据保存到磁盘上加以固化,⽽持久化的实现过程则⼤多通过各种关系数据库来完成。
(2)持久层:把数据库实现当做⼀个独⽴逻辑拿出来,即数据库程序是在内存中的,为了使程序运⾏结束后状态得以保存,就要保存到数据库。持久层是在系统逻辑层⾯上,专致于实现数据持久化的⼀个相对独⽴的领域。持久层的⽬的是通过持久层的框架将数据库存储服务从服务层中分离出来,⽽ Hibernate 是⽬前最流⾏的持久层框架。
五、具体开发步骤:
1、在Eclipse中配置开发环境:
(1)安装Hibernate插件:
A、下载Hibernate插件,采⽤link⽅式安装
(2)添加XML约束⽂件
2、新建Maven⼯程,导⼊Hibernate的核⼼jar包、⽀持C3P0数据库连接池的jar包:
c3p0-0.9.5.2.jar
hibernate-c3p0-5.2.17.Final.jar
<!-- -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.17.Final</version>
</dependency>
<!-- -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>5.2.17.Final</version>
</dependency>
<!-- -->
<dependency>
<groupId&hange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
2、创建Hibernate配置⽂件:
<session-factory>
<!-- 配置C3P0 -->
<property name="tion.provider_class">tion.C3P0ConnectionProvider </property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.timeout">120</property>
<!--1 配置Oracle数据库的⽅⾔ -->
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<!--2、配置驱动 -->
<property name="tion.driver_class">oracle.jdbc.driver.OracleDriver</property>
<!--3、配置连接字符串 -->
<property name="tion.url">jdbc:oracle:thin:@localhost:1521:orcl</property> <!--4、配置⽤户名、密码 -->
<property name="tion.username">scott</property>
<property name="tion.password">root</property>
、配置是否是否在控制台打印
是否在控制台打印sql语句-->
<!--5、配置是否
<property name="hibernate.show_sql">true</property>
<!--6、是否格式化sql语句 -->
<property name="hibernate.format_sql">true</property>
<!--7、是否⾃动⽣成数据表 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 配置POJO类的映射⽂件 -->
<mapping resource="com/cn/pojo/l"/>
</session-factory>
2、创建持久化类:
public class Product {
private Integer p_id;
private String p_name;java类的概念
private Double p_price;
private String p_phone;
private String p_address;
......//省去set/get⽅法
}
3、创建对象-关系映射⽂件:
<hibernate-mapping>
<class name="com.pojo.Product" table="TB_PRODUCT">
<id name="p_id" type="java.lang.Integer">
<column name="P_ID" />
<generator class="sequence">
<param name="sequence">TB_PRODUCT_SEQ</param>
</generator>
</id>
<property name="p_name" type="java.lang.String">
<column name="P_NAME" />
</property>
<property name="p_price" type="java.lang.Double">
<column name="P_PRICE" />
</property>
<property name="p_phone" type="java.lang.String">
<column name="P_PHONE" />
</property>
<property name="p_address" type="java.lang.String">
<column name="P_ADDRESS" />
</property>
</class>
</hibernate-mapping>
4、在Hibernate配置⽂件中加⼊映射⽂件:
<mapping resource="com/pojo/l"/>
5、通过Hibernate API 编写访问数据库的代码:
//1.创建Configuration对象,并调⽤configure()⽅法从默认路径加载l⽂件
Configuration config = new Configuration().configure();
//2.获取SessionFactory类实例(相当于JDBC中的⼯⼚类)
SessionFactory sessionFactory = config.buildSessionFactory();
//3.获取Session实例(相当于JDBC中的Connection对象)
Session session = sessionFactory.openSession();
/
/4.开启事务
Transaction ts = session.beginTransaction();
//5.封装数据
Product pro = new Product();
pro.setP_name("钢笔");
pro.setP_price(12.55);
pro.setP_phone("029********");
pro.setP_address("咸阳");
//6.执⾏保存操作
session.save(pro);
//7.提交事务
tsmit();
session.close();
注意:
1)4.0以前的版本使⽤,现在已经废弃;
sessionFactory = configuration.buildSessionFactory();
2)创建⼀个ServiceRegistry对象:hibernate4.x以后新添加的对象,hibernate的任何配置对象和服务都必须在该对象中注册了才能使⽤ //Hibernate4.2之前版本的写法:
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().Properties())
.buildServiceRegistry();
//Hibernate4.3之后版本的写法:
ServiceRegistry serviceRegistry =
new StandardServiceRegistryBuilder().Properties()).build();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论