引言
hibernate虽然现在使用范围不是很广,但依然很多历史企业在使用,甚至有些功能不能不替代。本篇文章从工作原理、优势讲解、下载安装、程序示例进行展示。欢迎大家学习探讨!
一、hibernate概念
1.1、了解概念前先知道ORM(hibernate是ORM框架的一种)ORM全程是(object relation maping)即对象关系映射。
对象关系映射:如今流行的数据库如oracle、mysql确是关系型数据库。我们使用编程语言访问数据库数据时必然需要做一些转换。而ORM框架能够自动地帮我们完成这一步。ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中。
1.2、 什么是hibernate
ORM框架hibernate帮我们做的就是将类映射为数据表,我们的最终目的是对数据库的操作,可我们利用hibernate框架的话,只要实例化类的对象,对对象进行操作,框架能帮我们映射后对数据库的记录进行增删改查的操作。
二、使用与不使用hibernate有何区别
例如:实现对数据库 User表的增删改查工作。
1.1、不使用hibernate情况
第一步需要创建在数据库里面创建一个用户表。
第二部需要在代码里面创建用户表创建一个持久实体类。
第三部需要在代码里面持久类编写一个DAO底层数据访问类。
第四步写业务逻辑层代码。
可以想到以上的工作量主要是在数据访问层 UserDAO类的编写,但是我们如果使用了hibernate框架的一切就变得简单起来了。
1.2、使用hibernate情况
前提配置好hibernate框架。
package com.hibernate.DAO;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import com.hibernate.entity.User;
public class UserDAO {
public User user;
public UserDAO(User user){
this.user=user;
}
//增
public void save(){
// 下面方法默认加载hibernate.cfg.xml文件
Configuration conf = new Configuration().configure();// 以Configuration创建SessionFactory
SessionFactory sf = conf.buildSessionFactory(); // 创建Session
Session sess = sf.openSession(); // 开始事务
Transaction tx = sess.beginTransaction(); // 创建消息实例
sess.save(user); // 保存用户到数据库
tx.commit(); // 提交事务
sess.close(); // 关闭Session
sf.close();
}
//改
public void update(){
// 下面方法默认加载hibernate.cfg.xml文件
Configuration conf = new Configuration().configure();// 以Configuration创建SessionFactory
SessionFactory sf = conf.buildSessionFactory(); // 创建Session
Session sess = sf.openSession(); // 开始事务
Transaction tx = sess.beginTransaction(); // 创建消息实例
sess.update(user); // 更新用户到数据库
tx.commit(); // 提交事务
sess.close(); // 关闭Session
sf.close();
}
//删
public void delete(){
// 下面方法默认加载hibernate.cfg.xml文件
Configuration conf = new Configuration().configure();// 以Configuration创建SessionFactory
SessionFactory sf = conf.buildSessionFactory(); // 创建Session
Session sess = sf.openSession(); // 开始事务
Transaction tx = sess.beginTransaction(); // 创建消息实例
sess.delete(user); // 删除用户到数据库
tx.commit(); // 提交事务
sess.close(); // 关闭Session
sf.close();
}
//查
public User find(){
// 下面方法默认加载hibernate.cfg.xml文件
Configuration conf = new Configuration().configure();// 以Configuration创建SessionFactory
SessionFactory sf = conf.buildSessionFactory(); // 创建Session
Session sess = sf.openSession(); // 开始事务
Transaction tx = sess.beginTransaction(); // 创建消息实例
User u =(User)sess.get(User.class,user.getId()); //通过id 查找用户
tx.commit(); // 提交事务
sess.close(); // 关闭Session
sf.close();
return u;
}
}
三、hibernate使用流程
3.1、hibernate 开发包的下载
Hibernate. Everything data.这个链接是下载官网。
3.2安装hibernate开发包
解压下载好的开发包,将开发包lib文件夹里的,requied、jpa子文件夹中的jar包复制到WEB-INF\lib目录下。
选择Build Path|Configure Biuld Path... 选项。
选择ADD external Jars,在对话框中依次指定requied、jpa文件夹的位置,点击打开按钮。
至此hibernate开发包安装完成。
将数据库的驱动也要安装在工程中。步骤和上述hibernate开发包类似
3.3、编写使用
第一步创建数据库 user表、编写User类。步骤和上述类似
第二步编写映射文件 User.hbm.xml(hibernate 要做的就是将实体类的对象映射为数据库表的记录。我们先要用XML文件告诉hibernate这种映射关系).
该XML文件一般和实体类放在一个目录下:
<?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">
<hibernate-mapping>
<!-- com.hibernate.entity.User类映射为 数据库的User表-->
<!--name指定实体类类名 table指定数据库表名-->
<class name="com.hibernate.entity.User" table="User">
<!--user类的id属性映射为user表的u_id字段 类型为整型-->
<!--因为“id”属性对应的“u_id”字段是表的主键所以 XML文件中用id元素描述-->
<id name="id" column="u_id" type="java.lang.Integer">
<generator class="increment"></generator>
</id>
<!-- 其他属性对应表的普通字段 XML文件中用 property 元素描述-->
<!-- name指定实体类的属性,column指定数据库 表的字段-->
<property name="name" column="u_name" type="java.lang.String" >
</property>
<property name="phone" column="u_phone" type="java.lang.String" >
</property>
<property name="password" column="u_password" type="java.lang.String" >
</property>
<property name="type" column="u_type" type="java.lang.String" >
</property>
</class>
</hibernate-mapping>
第三步编写映射文件 Hibernate.cfg.xml(Hibernate.cfg.xml用来告诉hibernate框架和数据库的链接和运行时各个属性的值。)
<?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">com.mysql.jdbc.Driver</property>
<!-- 指定连接数据库的url,hibernate连接的数据库名 -->
<property name="connection.url">jdbc:mysql://localhost:3306/SSH</property>
<!-- 指定连接数据库的用户名 -->
<property name="connection.username">root</property>
<!-- 指定连接数据库的密码 -->
<property name="connection.password">wstz5461.</property>
<!-- 指定数据库方言 -->
<!--<property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>-->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 根据需要自动创建数据表 -->
<property name="hbm2ddl.auto">update</property>
<!-- 显示Hibernate持久化操作所生成的SQL -->
<property name="show_sql">true</property>
<!-- 将SQL脚本进行格式化后再输出 -->
<property name="hibernate.format_sql">true</property>
<!-- 罗列所有的映射文件 -->
<mapping resource="com/hibernate/entity/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
第四步编写数据访问层UserDAO类和业务逻辑层UserService类