Hibernate:原理,小实例

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()

在这里插入图片描述

  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

在这里插入图片描述

① 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

<?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出现这样的说明成功了


SSH系列入门链接

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yilyil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值