Hibernate教程之二:实例讲解
原创
©著作权归作者所有:来自51CTO博客作者wx5bddc0ab0cfc8的原创作品,请联系作者获取转载授权,否则将追究法律责任
一、创建Hibernate 配置文件 hibernate.cfg.xml:
<?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>
<!-- 1、数据库基本信息 -->
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.password">gcki_test</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@192.168.4.9:1521:orcl</property>
<property name="hibernate.connection.username">gcki_test</property>
<!-- 2、数据库方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<!-- 3、 执行sql时是否在控制台打印-->
<property name="show_sql">true</property>
<!-- 4、是否对 SQL 进行格式化 -->
<property name="format_sql">true</property>
<!-- 5、指定自动生成数据表的策略
create:每次运行删除上次的表,新建一张表
create-drop:SessionFactory一关闭, 表就自动删除
update: 根据.hbm.xml文件生成表, 但若 .hbm.xml文件和数据库中对应的数据表的表结构不同,
Hiberante将更新数据表结构,但不会删除已有的行和列
validate : 会和数据库中的表进行比较, 若 .hbm.xml 文件中的列在数据表中不存在,则抛出异常
-->
<property name="hbm2ddl.auto">update</property>
<!-- 6、设置数据库事务隔离级别: -->
<property name="connection.isolation">2</property>
<!-- 7、指定关联的 对象关系映射文件: .hbm.xml 文件 -->
<mapping resource="com/yang/model/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
二、创建持久化类:将数据库表映射成的一个对象
package com.yang.model;
public class User {
private Integer id;
private String name;
private String telPhone;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTelPhone() {
return telPhone;
}
public void setTelPhone(String telPhone) {
this.telPhone = telPhone;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", telPhone=" + telPhone + "]";
}
}
三、创建对象-关系映射文件:声明数据库表和持久化类之间的关系
<?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.yang.model.User" table="RE_HIBERNATE_USER">
<id name="id" type="java.lang.Integer">
<column name="ID" />
<!--主键生成策略-->
<generator class="native" />
</id>
<property name="name" type="java.lang.String">
<column name="NAME" />
</property>
<property name="telPhone" type="java.lang.String">
<column name="TELPHONE" />
</property>
</class>
</hibernate-mapping>
四、通过 Hibernate API 编写访问数据库的代码
package Test;
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.After;
import org.junit.Before;
import org.junit.Test;
import com.yang.model.User;
public class StanderTest {
private SessionFactory sessionFactory;
private Configuration configuration;
private Session session;
private Transaction transaction;
@Before
public void init(){
//自动加载classPath路径下,名为“hibernate.cfg.xml”文件,封装连接数据库的基本信息
configuration=new Configuration().configure();
//将连接数据库的信息向ServiceRegistry对象注册
ServiceRegistry serviceRegistry=new ServiceRegistryBuilder()
.applySettings(configuration.getProperties())
.buildServiceRegistry();
//sessionFactory的创建相当耗费资源,在生产中将这个变量设置为静态
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
//创建session对象
session = sessionFactory.openSession();
//开启事务:不开启事务将没办法执行操作
transaction = session.beginTransaction();
}
@After
public void destory(){
/*
* 1、transaction在调用commit时会先调用session的flush方法,将session对象的状态(就是这个对象的各种属性值)
* 与数据库对应的记录保持一致
* 2、本质上就是执行了一条sql语句(session.flush)
* 3、最后提交事务,才是数据库记录的最终改变
* */
transaction.commit();
session.close();
sessionFactory.close();
}
@Test
public void testSave(){
User user=new User();
user.setName("miemie");
user.setTelPhone("258369");
session.save(user);
}
}