Hibernate:原理,小实例

Hibernate

Hibernate 是传统 Java 对象和数据库服务器之间的桥梁,用来处理基于 O/R 映射机制和模式的那些对象
Hibernate:原理,小实例_第1张图片
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()

Hibernate:原理,小实例_第2张图片

  1. 创建 Configuration 实例,加载 Hibernate 核心配置文件 (hibernate.cfg.xml)和映射文件信息 (User.hbm.xml) Configuration 对象中。
  2. 创建 SessionFactory 实例。通过 Configuration 对象读取到的配置文件信息创建 SessionFactory对象,该对象中保存了当前数据库的配置信息和所有映射关系等信息。
  3. 创建 Session 实例,建立数据库连接。Session 对数据库的增、删、改、查操作,通常一个数据库之创建一个,因为十分耗资源。
  4. 创建 Transaction 实例,开启一个事务。Transaction 用于事务管理,一个 Transaction 对象对应的事务可以包含多个操作。在使用 Hibernate 进行增、删、改操作时,必须先创建 Transaction 对象。注意:Hibernate 的事务默认是关闭的,需要手动开启事务和关闭事务。
  5. 利用 Session 接口通过的各种方法进行持久化操作。
  6. 提交事务,对实体对象持久化操作后,必须提交事务。
  7. 关闭 Session ,断开与数据库的连接

二丶hibernate.cfg.xml与User.hbm.xml

Hibernate:原理,小实例_第3张图片

① POBJ类 【Plain Old Java Object】
  1. 必须为公有的类
  2. 必须提供公有的不带参数的默认的构造方法
  3. 属性私有
  4. 属性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】

  1. 配置数据库:JDBC驱动程序类数据库实例的 JDBC URL数据库用户名,密码等等
  2. 写入映射文件: < 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



<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



<hibernate-configuration>
    <session-factory>
        <property name="connection.username">xxproperty>
        <property name="connection.password">xxproperty>
        <property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriverproperty>
        <property name="connection.url">jdbc:sqlserver://xxxx;database=ShareFileDBproperty>
        <property name="dialect">org.hibernate.dialect.SQLServerDialectproperty>

        <property name="show_sql">trueproperty>
        <property name="format_sql">trueproperty>
        <property name="hbm2ddl.auto">createproperty>

        <mapping resource="Student.hbm.xml"/>
        
        
    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(); //关闭会话工厂
    }
}

⑥ 检测结果

Hibernate:原理,小实例_第4张图片
run出现这样的说明成功了


SSH系列入门链接

  1. Sturts2
  2. Spring
  3. Hibernate 【当前】

你可能感兴趣的:(Web开发,#,数据库,Hibernate)