Hibernate使用方法

第一个Hibernate程序

第一步:新建项目,导入jar包

添加开发hibernate项目所要用到的jar包。下载的Hibernate架包文件,解压缩以后/Hibernate/lib/required路径下有八个架包 这些就是Hibernate最小架包了 可选的就多了lib下其他的都是,可以根据需要导入.
这里写图片描述
导入数据库JAR包
这里写图片描述

第二步:添加Hibernate配置文件 hibernate.cfg.xml

hibernate下载包中配置文件路径:
路径:hibernate-release-5.0.2.Final\project\hibernate-ehcache\src\test\resources\hibernate-config

文件:hibernate.cfg.xml
Hibernate配置文件用于配置数据库连接和Hibernate运行时所需要的各种属性(如数据库驱动名称、数据库地址、用户名、密码、数据库方言等),该文件以xml文档或java属性文档(properties)形式存在于应用程序的classpath中(一般保存至项目的src根目录下),默认文件名使用hibernate.cfg.xml。Hibernate初始化时会自动在classpath中寻找该文件并读取配置信息。
hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!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/test</property>
<!--数据库用户名-->
<property name="hibernate.connection.username">root</property>
<!--数据库用户对应的密码-->
<property name="hibernate.connection.password">root</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>
<!--打开hbm2ddl.auto选项,就是如果我们的mysql里面没有该test数据库则自动创建test数据库里面的表-->
<property name="hbm2ddl.auto">update</property>
<!--配置ORM映射文件-->
<mapping resource="cn/rjtraining/model/User.hbm.xml"/>
  </session-factory>
</hibernate-configuration>

hibernate.hbm2ddl.auto:取值create、create-drop、update、validate、none

create:每次加载hibernate时都会删除上一次生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。

create-drop:每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。

update:第一次加载hibernate时根据model类自动建立表的结构(前提是先建立好数据库),以后加载hibernate时根据model类自动更新表结构,即使表结构改变但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等应用第一次运行起来后才会

validate:会和数据库中的表进行比较, 若 .hbm.xml 文件中的列在数据表中不存在,则抛出异常.(只会和数据库中的表进行比较,不会创建新表,但是会插入新值)

开发调试初始化数据的时候可以选择create、update
网站正式发布的时候,对数据库现有的数据或表结构进行自动的更新是很危险的,此时应该DBA(DateBase Administrator)同志通过手工的方式进行后台的数据库操作。hibernate.hbm2ddl.auto的值建议是“none”或“validate”。

第三步:创建持久化类

持久化类要和数据库表对应,在应用程序中操纵数据库的行为实质上转换为对持久化类的操作。以User表为例,为该表创建一个持久化类User。

package cn.rjtraining.model;
import java.io.Serializable;
public class User implements Serializable{
private Integer uid;
private String uname;
private String password;
private String role;
//省略Getters和Setters方法
}

在创建持久化类时,应注意以下几项

  1. 创建的持久化类建议实现Serializable序列化接口( hibernate有二级缓存,缓存会将对象写进硬盘,就必须序列化)
  2. 为持久类创建一个标识属性id,该属性映射数据表的主键字段
  3. 类的各属性为private类型,并为类的各属性提供public类型的访问器(setter和getter方法)

第四步:定义ORM映射文件

Hibernate 采用 XML 格式的文件来指定对象和关系数据之间的映射. 在运行时 Hibernate 将根据这个映射文件来生成各种SQL 语句
例如User类与数据表User的映射文件User.hbm.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">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<!-- 配置类名,也就是User类对应数据库中的user表,user表是test数据库中的 -->
    <class name="cn.rjtraining.model.User" table="user" catalog="test">
    <!-- 第一,配置主键,主键的数据类型为Integer -->
        <id name="uid" type="java.lang.Integer">
    <!-- 对应数据库中的列名为uid,可以不写,那么默认的就是uid -->
            <column name="uid" />
            <!-- 主键的生成策略,采用数据库中提供的生成策略 -->
            <generator class="native" />
        </id>
        <property name="uname" type="java.lang.String">
            <column name="uname" length="25" />
        </property>
        <property name="password" type="java.lang.String">
            <column name="password" length="25" />
        </property>
        <property name="role" type="java.lang.String">
            <column name="role" length="25" />
        </property>
    </class>
</hibernate-mapping>

在映射文件中以元素作为文档的根元素,根元素中包含了子元素。其中元素用来配置程序中的持久化类与数据表之间的映射关系,语法格式如下:

第五步:写一个测试类,对我们前几步搭好的hibernate环境做一个测试。

导入import org.junit.*;包进行测试。

package cn.rjtraining.model;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
public class Testhibernate {
@Test
public void test(){
SessionFactory sessionFactory = null;
Configuration configuration = new Configuration().configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
Session session = sessionFactory.openSession();
//3.开启事务
Transaction transaction = session.beginTransaction();
//4.执行保存操作
User user = new User("admin","11111","2");//无主键
session.save(user);
//5.提交事务 
transaction.commit();
//6.关闭session
session.close();
//7.关闭 SessionFactory 对象
sessionFactory.close();
}
}

第六步:运行测试类

成功运行后将在test数据库中创建一个user表,并且表中存入一条数据,说明Hibernate环境已成功搭建。


Hibernate的主要流程

第一步:读取并解析配置文件hibernate.cfg.xml,主要由Configuration类的configure()方法负责实现。
第二步:读取并解析映射文件*.hbm.xml,通过Configuration类的buildSessionFactory(serviceRegistry)方法实现,同时该方法将返回一个会话工厂SessionFactory。
第三步:打开会话Session,由SessionFactory的openSession()方法实现。
第四步:创建事务管理对象Transaction,它由Session对象的beginTransaction()方法创建。
第五步:对数据库进行操作。对数据库的操作主要依赖于Session类的一些方法来实现,如load()方法、delete()方法、save()方法等,实现对数据库的CRUD操作。
第六步:提交事务。完成了对数据库的操作之后就应该提交事务,完成数据在数据库中持久化。
第七步:关闭Session和SessionFactory对象,以释放内存空间。

猜你喜欢

转载自blog.csdn.net/xiao_ma_csdn/article/details/79704049