Hibernate
Hibernate 是传统 Java 对象和数据库服务器之间的桥梁,用来处理基于 O/R 映射机制和模式的那些对象
Hibernate 将 Java 类映射到数据库表中,从 Java 数据类型中映射到 SQL 数据类型中,并把开发人员从 95% 的公共数据持续性编程工作中解放出来。
一丶Hibernate工作流程
hibernet4:hibernate的使用例子讲解
Configuration configuration = new Configuration().configure();
SessionFactory factory = configuration.buildSessionFactory()
Session session = factory.openSession();
session.save(user);
Transaction transaction = session.beginTransaction();
transaction.commit();
session.close();
factory.close()
- 创建
Configuration
实例,加载Hibernate
核心配置文件(hibernate.cfg.xml)
和映射文件信息(User.hbm.xml)
到Configuration
对象中。 - 创建
SessionFactory
实例。通过Configuration
对象读取到的配置文件信息创建SessionFactory
对象,该对象中保存了当前数据库的配置信息和所有映射关系等信息。 - 创建
Session
实例,建立数据库连接。Session
对数据库的增、删、改、查操作,通常一个数据库之创建一个,因为十分耗资源。 - 创建
Transaction
实例,开启一个事务。Transaction
用于事务管理,一个Transaction
对象对应的事务可以包含多个操作。在使用Hibernate
进行增、删、改操作时,必须先创建Transaction
对象。注意:Hibernate 的事务默认是关闭的,需要手动开启事务和关闭事务。 - 利用
Session
接口通过的各种方法进行持久化操作。 - 提交事务,对实体对象持久化操作后,必须提交事务。
- 关闭
Session
,断开与数据库的连接
二丶hibernate.cfg.xml与User.hbm.xml
① POBJ类 【Plain Old Java Object】
- 必须为公有的类
- 必须提供公有的不带参数的默认的构造方法
- 属性私有
- 属性setter/getter封装
② 映射文件 【User.hbm.xml】
映射文件是 < hibernate-mapping >
为根元素的 XML 文件
1. < class >
标签是用来定义从一个 Java 类到数据库表的特定映射
2. < id >
标签将类中独一无二的 ID 属性与数据库表中的主键关联起来
3. < property >
标签用来将 Java 类的属性与数据库表的列匹配
注: < id >
和< property >
都有name 属性引用类的性质,column 属性引用数据库表的列。type 属性保存 Hibernate 映射的类型,这个类型会将从 Java 转换成 SQL 数据类型。
③ 核心配置文件 【hibernate.cfg.xml】
- 配置数据库:JDBC驱动程序类数据库实例的 JDBC URL数据库用户名,密码等等
- 写入映射文件:
< mapping >
标签写入以< hibernate-mapping >
为根元素的 XML 文件
代码:实现对学生的添加
①添加Student类
这里有点报错,但是不妨碍
public class Student {
private int id;
private String name;
Student(){}
Student(int id,String name){this.id=id; this.name=name;}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setId(int id) {
this.id = id;
}
public int getId() {
return id;
}
}
②数据库中建立表
create table Student
(
id int identity
constraint Student_pk
primary key nonclustered,
name varchar(20)
)
go
③ 添加Student.hbm.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Student" table="Student">
<id name="id" type="int">
<column name="id"/>
<generator class="assigned"/>
</id>
<property name="name" type="java.lang.String">
<column name="name"/>
</property>
</class>
</hibernate-mapping>
④ 添加hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.username">xx</property>
<property name="connection.password">xx</property>
<property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<property name="connection.url">jdbc:sqlserver://xxxx;database=ShareFileDB</property>
<property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="hbm2ddl.auto">create</property>
<mapping resource="Student.hbm.xml"/>
<!-- DB schema will be updated if needed -->
<!-- <property name="hbm2ddl.auto">update</property> -->
</session-factory>
</hibernate-configuration>
⑤ 使用Main测试一下
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
public class Main {
public static void main(String Arg[])
{
StandardServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().configure().build();
SessionFactory sessionFactory=new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();
//会话对象
Session session = sessionFactory.openSession();
//生成学生对象
Student s= new Student(2,"哈哈");
session.save(s); //保存对象进入数据库
//开启事务
Transaction transaction = session.beginTransaction();
transaction.commit(); //提交事务
session.close(); //关闭会话
sessionFactory.close(); //关闭会话工厂
}
}
⑥ 检测结果
run出现这样的说明成功了