[Java学习笔记]Hibernate

本文深入解析Hibernate框架的工作原理,包括配置、映射、主键生成策略及执行过程。从配置文件到Session操作,全面覆盖Hibernate在Java应用中的角色与实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hibernate框架工作模式

在这里插入图片描述
Hibernate在三层模型中承担的正是Dao(数据访问层)层中的反复sql查询工作
在这里插入图片描述

实现步骤

一、导jar包

1.hibernate.final/lib/required下的所有jar包
在这里插入图片描述
2.数据库驱动类库
在这里插入图片描述
3.准备数据库

4.配置文件准备

全局配置文件hibernate.cfg.xml

五项必填内容 数据库方言、驱动类名、数据库url、数据库用户名、密码

		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.url">jdbc:mysql:///ssh</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">123456</property>

选填功能

		<property name="hibernate.show_sql">true</property><!--每次数据库操作打印使用的sql语句-->
		
		<property name="hibernate.format_sql">true</property><!--展示sql时格式化-->
		
        <property name="hibernate.hbm2ddl.auto">update</property><!-- 自动建表  -->
        

加载映射文件
值得注意的是:mapping的属性使用的是resource!

        <mapping resource="beans/User.hbm.xml"/>

其中

    <property name="hibernate.hbm2ddl.auto">xxx</property>
  • create-drop
    每次在创建sessionFactory时候执行创建表。当调用sesisonFactory的close方法的时候,删除表!

  • create
    每次都重新建表; 如果表已经存在就先删除再创建

  • update
    如果表不存在就创建; 表存在就不创建;对象中有别的属性,insert的时候也会创建新列,说白了就是保证update操作一定执行

  • validate
    执行验证: 当映射文件的内容与数据库表结构不一样的时候就抛出异常

映射配置文件 *.hbm.xml

映射文件: 映射一个实体类对象; 描述一个对象最终实现可以直接保存对象数据到数据库中

通常地,我们都是一个JavaBean对象对应一个映射配置文件,并且配置文件和JavaBean对象是放在同一个目录下的

我们按照快速入门的映射配置文件一步一步来讲解:

<hibernate-mapping package="com.zxd.domain">

    <!--类名为User,表名也为User-->
    <class name="User"  table="user">

        <!--主键映射,属性名为id,列名也为id-->
        <id name="id" column="id">
            <!--根据底层数据库主键自动增长-->
            <generator class="native"/>

        </id>

        <!--非主键映射,属性和列名一一对应 (相同的时候可以省略column)-->
        <property name="username" column="username"/>
        <property name="cellphone" column="cellphone"/>
        <property name="password" column="password"/>
    </class>
</hibernate-mapping>
  • hibernate-mapping节点
    常用的属性:
    package【要映射的对象所在的包(可选,如果不指定,此文件所有的类都要指定全路径)】
    auto-import
    默认为true, 在写hql的时候自动导入包名

    如果指定为false, 再写hql的时候必须要写上类的全名;

  • class节点
    class 映射某一个对象的(一般情况,一个对象写一个映射文件,即一个class节点)
    常用的属性:
    name【指定要映射的对象的类型】
    table【指定对象对应的表】
    如果没有指定,默认与对象名称一样

  • property节点
    property是普通属性的映射,即JavaBean普通的成员变量属性就使用property来描述!
    常用的属性:
    name 指定对象的属性名称
    column 指定对象属性对应的表的字段名称
    如果不写默认与对象属性一致。
    length 指定字符的长度, 默认为255
    type 指定映射表的字段的类型,如果不指定会匹配属性的类型
    java类型:
    必须写全名【例:java.lang.String】
    数据库类型varchar int
    hibernate类型: 直接写类型,都是小写

    值得注意的是:如果列名称为数据库关键字,需要用反引号或改列名。当然啦,我们一般不使用关键字来作为列名

id节点
id是主键映射…
name 指定对象的属性名
column 指定对象属性对应的表的字段名称
<id>节点下还有子节点 <generator class=""/>

主键的自动生成策略

identity 自增长(mysql,db2)
sequence 自增长(序列), oracle中自增长是以序列方法实现
native 自增长会根据底层数据库自增长的方式选择identity或sequence
如果是mysql数据库, 采用的自增长方式是identity
如果是oracle数据库, 使用sequence序列的方式实现自增长
increment 自增长(会有并发访问的问题,一般在服务器集群环境使用会存在问题
指定主键生成策略为手动指定主键的值

assigned
指定主键生成策略为UUID生成的值

uuid
foreign(外键的方式, one-to-one讲)

Hibernate执行过程

在这里插入图片描述

Configuration

配置管理类:主要管理配置文件的一个类

  • configure方法
    方法用于加载配置文件
  • 加载主配置文件的方法
    如果指定参数,那么加载参数的路径配置文件 如果不指定参数,默认加载src/目录下的hibernate.cfg.xml
  • buildSessionFactory
    buildSessionFactory()用于创建Session工厂

SessionFactory

SessionFactory–>Session的工厂,也可以说代表了hibernate.cfg.xml这个文件…hibernate.cfg.xml的就有<session-factory>这么一个节点,他有点类似于DataSource连接池,可以用来获得连接Connection

  • openSession方法
    创建一个Session对象
  • getCurrentSession方法
    创建Session对象或取出Session对象

Session

Session是Hibernate最重要的对象,Session维护了一个连接(Connection),只要使用Hibernate操作数据库,都需要用到Session对象

更新操作

我们在快速入门中使用到了save(Objcet o)方法,调用了这个方法就把对象保存在数据库之中了。Session对象还提供着其他的方法来进行对数据库的更新

session.save(obj); 【保存一个对象】
session.update(obj); 【更新一个对象】
session.saveOrUpdate(obj); 【保存或者更新的方法】

save:瞬时态对象-》持久化对象
update:游离态对象-》持久化对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值