Hibernate入门
一 Hibernate的由来
由于面向对象的编程语言都是以对象形式持有数据,在把对象的数据转而存储到关系数据库的表中时就会发生如下不匹配的问题:
(1)对象模型中对象与对象之间的关联关系与关系模型中数据库之间的关系无法一一对应
(2)对象模型中的对象的继承关系在关系模型中无法直接表示
(3)对象模型中对象的等值性在关系模型中无法直接实现
(4)对象模型中有关联的对象之间的导航访问在关系模型中无法直接实现
注:对象的导航是通过一个对象查找到另一个对象
二 Hibernate的作用
(1)它是连接java应用程序和关系数据库的中间件
(2)它是JDBC API进行了封装,负责java对象的持久化
(3)在分层的软件架构中它位于持久化层,封装了所有数据访问细节,使业务逻辑层可以专注于实现业务逻辑
(4)它是一种ORM工具,能够建立面向对象的域模型和关系模型的映射
三 搭建hibernate应用开发环境 --- 下载和安装配置
(1)首先登入到Hibernate的官方网站http://www.hibernate.org.6.html去下载一个Hibernate Core的二进制包 hibernate-distribution-3.6.8.GA-dist.zip
(2)解压这个压缩包,其中在根目录下有一个hibernate3.jar文件,它既是Hibernate Core的核心类库文件。在配置环境的时候需要导入的包都从此压缩包中获得,分别要导的是:
根目录下:
hibernate.jar
在根目录下的lib\required:
antlr-2.7.6.jar
commons-collections-3.1.jar
dom4j-1.6.1.jar
javassist-3.12.0.GA.jar
jta-1.1.jar
slf4j-api-1.6.1.jar 是日志服务通用库
在根目录下的lib\jpa
hibernater-jpa-2.0-api-1.0.1.Final.jar
数据库的连接驱动
mysql-connector-java-5.1.5-bin.jar
这九个包是必备的,但是因为是和数据库建立的映射,所以要有和数据库连接的配置文件才行,而这个配置文件而是和映射文件连接的桥梁,配置文件一般情况下取名为hibernate.cfg.xml,里面的内容包括和数据库连接的驱动、用户名、密码等等,每一个hibernate都有一个配置文件,这个配置文件是放在src下的,其实是放在classes文件下的,当放到src下的时候,会自动导入到classes文件夹下,配置文件的信息为:
<!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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!—要连接的数据库名-à
<property name="hibernate.connection.url">jdbc:mysql:///demo1</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">1234</property>
<!-- 方言-- 针对哪个数据库Mysql -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!—在向数据库中插入的时候,如果没有就更新-->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 执行的sql语句显示出来 为了更好的指定执行的过程,即是将数据库shema的DDL导出到数据库-->
<property name="hibernate.show_sql">true</property>
</session-factory>
</hibernate-configuration>
这样,就配置好了hibernate的环境,可以搭建hibernate的应用开发环境了,
下面我们来搭建第一个hibernate应用程序
四 第一个hibernate应用程序
1.搭建环境的步骤:
(1)创建持久化实例类
(2)把创建了实例类映射到配置文件(hibernate.hbm.xml)中,使得读取的时候通过配置文件去找到实例类对应的映射文件
(3)映射持久化类到数据库中建表
(4)使用hibernate API进行持久化操作,即是执行方法去测试并插入
2.下面通过代码一起按照步骤来分析操作吧!
(1)创建持久化类,以user为类来分析,user中有三个属性id,name,birthday
package com.hbsi.domain;
import java.util.Date;
public class User {
private int id;
private String name;
private Date birthday;
public User() {
super();
// TODO Auto-generated constructor stub
}
public User(int id, String name, Date birthday) {
super();
this.id = id;
this.name = name;
this.birthday = birthday;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
(2)创建完之后,要到配置文件中去配置
<!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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///demo</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">1234</property>
<!-- 方言 针对哪个数据库Mysql -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 在程序运动的时候,增加自动创建表的属性,在程序终止 的时候销毁,但是在表格再次使用时,会重新建 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 执行的sql语句显示出来 -->
<property name="hibernate.show_sql">true</property>
<!-- 指定映射文件的位置 -->
<mapping resource="com/hbsi/domain/User.hbm.xml" />
</session-factory>
</hibernate-configuration>
注:配置文件中唯一多的一条语句就是:
<mapping resource="com/hbsi/domain/User.hbm.xml" />,作用是通过配置文件去查找实体类
(3)创建实体类的映射文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.hbsi.domain">
<!-- 缺省table 表明和类名是一样的 -->
<class name="User" table="user">
<!-- 将java类中的属性映射成表的字段 -->
<!--列名和属性名一样 column可省略-->
<id name="id" column="id">
<generator class="native" />
</id>
<property name="name" />
<property name="birthday" />
</class>
</hibernate-mapping>
说明:
(1)<class>标签是对User类的映射,table可以不写,如果不写,就相当于在数据库中的映射表和name相同
(2)native是主键生成器,也就是说实体类中的id是自动增长的
(3)<property>标签是普通属性的标签,name实体类的名字,如果没有写column,则代表向数据库中插入的字段名为实体类的属性名
(4)使用hibernate的 API进行持久化操作 写一个插入的方法来建表并插入
public static void main() {
Configuration cfg = new Configuration();
cfg.configure();
SessionFactory sessionFactory = cfg.buildSessionFactory(); Session session = sessionFactory.openSession();
Session session = null;
Transaction tx = null;
try {
session = HibernateUtil.getSession();
tx = session.beginTransaction();// 开启事务
session.save(user);
user.setName("dfs");// 立即更新数据库
user.setBirthday(new Date());// 一次更新
tx.commit();
} finally {
// 使资源得到释放
if (session != null) {
session.close();
}
}
}
注:从上面的例子可以看出有这么几个类
(1) Configuration类是hibernate的入口,它是负责配置ing启动hibernate,hibernate框架通过Configuration实例加载配置文件信息,然后读取指定的对象关系映射文件的内容并创建SessionFactory实例
(2) SessionFactory接口负责初始化hibernate,通过它来获取Session接口,它是重量级的,因为它需要一个很大的缓存,用来存放预定义的sql语句以及映射元数据等,
所以说如果一个应用程序中只访问一个数据库,则创建一个全局的SessionFactory实例
(3) Session接口是hibernate中应用最频繁的接口,sessio也被称为是持久化的管理器,它可以是对数据库的增删改查,它是单线程的,而且是轻量级的,并且Session有一个缓存,它存放当前工作单元加载的对象,Session缓存被称为Hibernate的第一个缓存
(4) Transaction接口是Hibernate的事务接口,用来开始事务和提交事物才可以成功插入,因为hibernate不是自动提交的,所以要用事务开启手动提交
总结:Hiberante的入门的知识就这些,如果按照要求做,肯定不会错,想学Hibernate赶紧来看看吧!!!