Hibernate框架1

一,概述

什么是Hibernate框架?

  • 一个框架
  • 一个java领域的持久化框架
  • 一个ORM(object relation Mapping)框架

对象的持久化

在这里插入图片描述

ORM(对象/关系 映射)

object relation Mapping

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

流行的ORM框架

  • Hibernate:
    非常优秀、成熟的ORM框架。
    完成对象的持久化操作
    一Hibernate允许开发者采用面向对象的方式来操作关系数据库。
    消除那些针对特定数据库厂商的SQL代码

  • myBatis :
    -相比Hibernate灵活高,运行速度 快
    开发速度慢,不支持纯粹的面向对象操作,需熟悉sq|语
    句,并且熟练使用sq|语句优化功能

  • TopL ink

  • OJB

二,HelloWord代码

2.1 准备HIbernate环境

导入Hibernate和加载数据库的jar包,使用Maven仓库

		<!-- hibernate jar包 -->
		<dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.2.4.Final</version>
        </dependency>

    	<!-- mysql加载驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.23</version>
        </dependency>

2.2 Hibernate的开发步骤

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-olvbO1S4-1645959532486)(C:\Users\无敌维\AppData\Roaming\Typora\typora-user-images\1645929356376.png)]

1.创建Hibemate配置文件

使用IDEA,快速创建 *.cfg.xml文件 设置中配置文件模板 setting —>Editor -->file and code Templates(也可以直接创建)

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>

        <!--
        #hibernate.dialect org.hibernate.dialect.MySQLDialect
        #hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
        #hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
        #hibernate.connection.driver_class com.mysql.jdbc.Driver
        #hibernate.connection.url jdbc:mysql:///test
        #hibernate.connection.username gavin
        #hibernate.connection.password
        -->
        <!-- 数据库驱动 -->

        <property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
        <!-- 数据库url -->
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/sgg_hibernate?serverTimezone=GMT</property>
        <!-- 数据库连接用户名 -->
        <property name="hibernate.connection.username">root</property>
        <!-- 数据库连接密码 -->
        <property name="hibernate.connection.password">****</property>
        <!-- 数据库方言
        不同的数据库中,sql语法略有区别. 指定方言可以让hibernate框架在生成sql语句时.针对数据库的方言生成.
        sql99标准: DDL 定义语言  库表的增删改查
         DCL 控制语言  事务 权限
         DML 操纵语言  增删改查
        注意: MYSQL在选择方言时,请选择最短的方言.
        -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>


        <!--
        #hibernate.show_sql true
        #hibernate.format_sql true
        -->
        <!-- 将hibernate生成的sql语句打印到控制台 -->
        <property name="hibernate.show_sql">true</property>
        <!-- 将hibernate生成的sql语句格式化(语法缩进) -->
        <property name="hibernate.format_sql">true</property>
        <!--
        ## auto schema export  自动导出表结构. 自动建表
        #hibernate.hbm2ddl.auto create自动建表.每次框架运行都会创建新的表.以前表将会被覆盖,表数据会丢失.(开发环境中测试使用)
        #hibernate.hbm2ddl.auto create-drop 自动建表.每次框架运行结束都会将所有表删除.(开发环境中测试使用)
        #hibernate.hbm2ddl.auto update(推荐使用) 自动生成表.如果已经存在不会再生成.如果表有变动.自动更新表(不会删除任何数据).
        #hibernate.hbm2ddl.auto validate校验.不自动生成表.每次启动会校验数据库中表是否正确.校验失败.
        -->
        <property name="hibernate.hbm2ddl.auto">update</property>
        
        <!-- 
			引入orm元数据路径书写: 填写src下的路径
        -->
        <mapping class="com.sgg.pojo.User"/>
        <mapping resource="Mapper/User.hbm.xml"/>

<!--        <mapping resource="cn/itheima/domain/Customer.hbm.xml" />-->

    </session-factory>
</hibernate-configuration>

2.创建持久化类

就是一个实体类,对应数据库中的各字段

3.创建对象关系映射文件

*.hbt.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="com.sgg.pojo.User" table="user" schema="sgg_hibernate">
    <id name="id" column="id"/>
    <property name="name" column="name"/>
    <property name="password" column="password"/>
</class>
</hibernate-mapping>

4.通过Hibemate API编写访问数据库的代码

 @Test
    public void test1(){
        //1.创建一个SessionFactory对象
        SessionFactory sessionFactory =null;     
        //1)创建Configuration对象:对应hibernate的配置信息和关系映射信息
        Configuration configuration= new Configuration().configure();        
        //sessionFactory = configuration.buildSessionFactory();
        //2)创建一个serviceRegistry对象:hibernate4.0后新添加的对象
        //hibernate 的任何配置和服务都需要在该对象中注册才有效。
        ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(
                configuration.getProperties()).buildServiceRegistry();
        //3)
        sessionFactory = configuration.buildSessionFactory(serviceRegistry);
        
        //2.创建一个Session对象
        Session session = sessionFactory.openSession();
        
        //3.开启事务
        Transaction transaction = session.beginTransaction();
        
        //4.执行并保存事务
        User u = new User("lisi","123");
        session.save(u);
        
        //5.提交事务
        transaction.commit();
        
        //6.关闭资源 session对象  sessionFaction对象
        session.close();
        sessionFactory.close();

2.3 HelloWord详解释

1,持久化类

在这里插入图片描述

在这里插入图片描述

2,对象关系映射文件

在这里插入图片描述

3,Hibernate配置文件

在这里插入图片描述

4,通过HIbernate API编写访问数据库的代码

使用Hibernate进行数据持久化操作, 通常有如下

步骤:

  • 编写持久化类: POJO+映射文件
  • 获取Configuration对象
  • 获取SessionFactory对象
  • 获取Session ,打开事务
  • 用面向对象的方式操作数据库
  • 关闭事务,关闭Session
Configuration类

在这里插入图片描述

SessionFaction接口

在这里插入图片描述

Session接口

在这里插入图片描述

在这里插入图片描述

Transaction(事务)

在这里插入图片描述

三,Session对象

在这里插入图片描述

Hibernate 一级缓存

在这里插入图片描述

在这里插入图片描述

/**
flush:使数据表中的记录和Session缓存中的对象的状态保持-致。为了保持-致,则可能会发送对应的Sql语句
	1.在Transaction的commit()方法中:先调用session的flush方法,再提交事务
	2. flush() 方法会可能会发送SQL语句,但不会提交事务。
	3.注意:在未提交事务或显式的调用session. flush()方法之前,也有可能会进行flush()操作。
		1)执行HQL 或 QBC 查询,会先进行flush操作,以得到数据库的最新操作
		2)save 若记录的ID是由底层数据库使用自增的方式生成的,则在调用save() 方法后,就会立即发送			INSER因为save方法后,必须保证对象的ID是存在的!

**/

在这里插入图片描述

在这里插入图片描述

# refresh():会强制发送 SELECT语句,以使Session缓存中对象的状态和数据表中对应的记录保持一致!
    数据库隔离级别:4

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值