Hibernate----学习(2)----Hibernate环境搭建及简单测试
1. 导入hibernate必须的jar包:
2. 加入数据库驱动的jar包:
MySQL驱动
oracle驱动
3.简单示例。
3.1 创建 Hibernate 配置文件 hibernate.cfg.xml文件
Hibernate 从其配置文件中读取和数据库连接的有关信息,这个文件应该位于应用的 classpath 下
<?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="connection.username">okaya10</property>
<property name="connection.password">okaya10</property>
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:[email protected]//10.0.7.208:1521/ORCL</property>
<!-- 指定数据库所使用的 SQL 方言 -->
<property name="dialect">org.hibernate.dialect.Oracle9iDialect</property>
<!-- 指定程序运行时是否在控制台输出 SQL 语句 -->
<property name="show_sql">true</property>
<!-- 指定是否对输出 SQL 语句进行格式化 -->
<property name="format_sql">true</property>
<!-- 指定程序运行时是否在数据库自动生成数据表 -->
<property name="hbm2ddl.auto">update</property>
<!-- 指定关联的.hbm.xml文件 -->
<mapping resource="com/lishenhuan/hibernate/News.hbm.xml"/>
</session-factory>
</hibernate-configuration>
3.2 创建持久化类 News
Hibernate 不要求持久化类继承任何父类或实现接口,这可以保证代码不被污染。这就是Hibernate被称为低侵入式设计的原因
package com.lishenhuan.hibernate;
public class News {
private Integer id;
private String title;
private String author;
public News() {
}
@Override
public String toString() {
return "News [id=" + id + ", title=" + title + ", author=" + author
+ "]";
}
public News(String title, String author) {
this.title = title;
this.author = author;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
}
3.3 创建对象-关系映射文件 News.hbm.xml
Hibernate 采用 XML 格式的文件来指定对象和关系数据之间的映射。
在运行时 Hibernate 将根据这个映射文件来生成各种 SQL 语句
映射文件的扩展名为 .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">
<!-- Generated 2019/03/02 17:15:53 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="com.lishenhuan.hibernate.News" table="NEWS">
<id name="id" type="java.lang.Integer">
<column name="ID" />
<!-- 指定主键的生成方式,native:使用数据库本地的方式 -->
<generator class="native" />
</id>
<property name="title" type="java.lang.String">
<column name="TITLE" />
</property>
<property name="author" type="java.lang.String">
<column name="AUTHOR" />
</property>
</class>
</hibernate-mapping>
3.4 . 通过 Hibernate API 编写访问数据库的代码 测试类HabernateTest.java
package com.lishenhuan.hibernate;
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;
import org.junit.Test;
public class HabernateTest {
@Test
public void test() {
//1.创建一个SessionFactory对象
SessionFactory sessionFactory = null;
//1.1创建Configuration对象:对应hibernate的基本配置信息和对象关系映射信息。
Configuration configuration = new Configuration().configure();
/*
* 1.2 创建serviceRegistry对象:hibernate 4.x新添加的对象
* hibernate的任何配置文件和服务都需要在该对象中注册后才能有效
*/
ServiceRegistry serviceRegistry =
new ServiceRegistryBuilder().applySettings(configuration.getProperties())
.buildServiceRegistry();
//1.3
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
//2 .创建一个session对象
Session session = sessionFactory.openSession();
//3.开启事务
Transaction transaction = session.beginTransaction();
//4.执行保存操作
News news = new News("java", "lishenhuan");
session.save(news);
//5.提交事务。
transaction.commit();
//6.关闭session
session.close();
//7.关闭sessionFactory
sessionFactory.close();
}
}
控制台截图:
3.5 对应API解释:
3.5.1 Configuration 类 负责管理 Hibernate 的配置信息。包括如下内容:
–Hibernate 运行的底层信息:数据库的URL、用户名、密码、JDBC驱动类,
数据库Dialect,数据库连接池等(对应 hibernate.cfg.xml 文件)。
–持久化类与数据表的映射关系(*.hbm.xml 文件)
3.5.2 SessionFactory 接口
•针对单个数据库映射关系经过编译后的内存镜像,是线程安全的。
•SessionFactory 对象一旦构造完毕,即被赋予特定的配置信息
•SessionFactory是生成Session的工厂
•构造 SessionFactory 很消耗资源,一般情况下一个应用中只初始化一个 SessionFactory 对象。
•Hibernate4 新增了一个 ServiceRegistry 接口,所有基于 Hibernate 的配置或者
服务都必须统一向这个 ServiceRegistry 注册后才能生效
•Hibernate4 中创建 SessionFactory 的步骤
3.5.3 Session 接口
Session 是应用程序与数据库之间交互操作的一个单线程对象,是 Hibernate 运作的
中心,所有持久化对象必须在 session 的管理下才可以进行持久化操作。
此对象的生命周期很短。Session 对象有一个一级缓存,显式执行 flush 之前,
所有的持久层操作的数据都缓存在 session 对象处。相当于 JDBC 中的 Connection。
3.5.4 Transaction(事务)
•代表一次原子操作,它具有数据库事务的概念。
所有持久层都应该在事务管理下进行,即使是只读操作。
Transaction tx = session.beginTransaction();
3.5.5 Hibernate 配置文件配置项
hbm2ddl.auto:该属性可帮助程序员实现正向工程, 即由 java 代码生成数据库脚本,
进而生成具体的表结构. 。取值 create | update | create-drop | validate
–create : 会根据 .hbm.xml 文件来生成数据表, 但是每次运行都会
删除上一次的表 ,重新生成表, 哪怕二次没有任何改变
–create-drop : 会根据 .hbm.xml 文件生成表,
但是SessionFactory一关闭, 表就自动删除
–update : 最常用的属性值,也会根据 .hbm.xml 文件生成表,
但若 .hbm.xml 文件和数据库中对应的数据表的表结构不同,
Hiberante 将更新数据表结构,但不会删除已有的行和列
–validate : 会和数据库中的表进行比较, 若 .hbm.xml 文件中的列
在数据表中不存在,则抛出异常