what
Hibernate是一个开源的,实现对象关系映射ORM思想的,轻量级的持久化框架
ORM:(Object Relational Mapping的缩写)对象关系映射,即将实体的变化翻译成sql脚本,并执行到数据库中去, 即实体的变化映射到表的变化。这样我们在操作具体的实体对象时,就不需要再去和复杂的SQL语句打交道,只需操作实体对象的属性和方法就行了。
轻量级框架:它没有侵入性,即不依赖任何容器(Servlet的启动必须依赖Tomacat容器),这样就启动时间较短,易于通用。是相对重量级框架而言的,重量级框架的概念就恰恰和它相反了
持久化框架:持久化是将程序数据在持久状态和瞬时状态间转换的机制。通俗讲就是:如果关闭你的应用或系统然后重启先前的数据依然存在。(就拿实体和数据库表的变化,当你添加一个实体对象时,但还没添加到数据库,这时如果你关闭程序,这个实体对象数据就会丢失;但是当你保存到数据库后,再关闭程序,数据也不会丢失,因为它永久性的保存在了数据库里,即瞬时数据持久化为持久数据;应用了POJO持久化对象,应用层抽象出业务的POJO对象并通过Hibernate及映射文件的定义来实现其业务对象的持久化管理),持久化框架就是实现数据持久化的一种框架。实现持久化的方式有很多,比如写文件,写数据库
where
一般应用在企业中,以为在企业中数据(各种订单数据,库存数据,客户数据)比应用程序本身更重要,这时就需要将数据持久化
why
Hibernate对JDBC访问数据库的代码进行了轻量级封装,很大程度的简化了DAO层复杂sql语句的编写
优点:
- 提高生产力 (启动不依赖任何容器)
- 使开发更加对象化【阻抗不匹配】 (操作面向实体对象,不再去直接操作数据库;对象—关系阻抗不匹配是指对象模型当中特有的“继承”,“组合”,“聚合”,“依赖”的概念在关系模型当中是不存在的,但是这种模型的“阻抗不匹配”最终在存储模型是还是能够统一起来的;实体对象中字段的数据类型可自动转换为数据库中的数据类型)
- 可移植性 (很容易更改数据库,只需改一下配置文件)
- 没有侵入行,支持透明持久化 (透明指具体怎么去操作数据库的我们不知道)
缺点
- 使用数据库特性的语句,将很难调优
- 对大批量数据更新存在问题
- 系统中存在大量的统计查询功能
how
创建一个Hibernate简单项目的步骤,主要步骤如下:
- 创建java项目
- 引入依赖包,可以创建User Library引入
1>lib/*.jar
2>hibernate3.jar
3>加载数据库驱动(MySql驱动) - 提供hibernate.cfg.xml配置文件,完成基本的配置
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory >
<property name="hibernate.connection.driver_class" >com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url" >jdbc:mysql://localhost:3306/hibernate_many2many</property>
<property name="hibernate.connection.username" >数据库名称</property>
<property name="hibernate.connection.password" >数据库密码</property>
<property name="hibernate.dialect" >org.hibernate.dialect.MySQLDialect</property>
<!--显示生成的sql语句-->
<property name="hibernate.show_sql">true</property>
<!--生的sql语句的格式-->
<property name="hibernate.format_sql" >true</property>
<mapping resource="com/bjpowernode/hibernate/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
我们这使用的是MySql数据库,我们可以去根据etc下的hibernate.properties文件编写,在其文件中找到有关MySql的配置
4. 建立实体类User.java
5. 提供User.hbm.xml映射文件,完成实体类的映射
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="com.bjpowernode.hibernate.User" table="t_user">
<!-- 设置主键 -->
<id name="id">
<!-- 设置主键生成策略 -->
<generator class="uuid"></generator>
</id>
<!-- 普通字段 -->
<property name="name" />
<property name="password" />
</class>
</hibernate-mapping>
常用的主键生成策略有:identity,sequence,uuid,native,assigned,foreign
6. 将User.hbm.xml文件加入到hibernate.cfg.xml文件中,此时Hibernate已知道映射的存在了
7.通过Hibernate API编写访问数据库的代码,即 编写工具类(如ExportDB.java)将hbm生成ddl。也就是hbm2ddl
package com.bjpowernode.hibernate;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
public class ExportDB {
public static void main(String[] args) {
//默认读取hibernate.cfg.xml文件
Configuration cfg = new Configuration().configure();
SchemaExport export = new SchemaExport(cfg);
export.create(true, true);
}
}
即根据实体生成数据库表
8. 建立客户端类Client,添加用户数据到MySql