新手上路之Hibernate入门和基本操作

Hibernate概述

1.什么是Hibernate框架

  1. hibernate框架应用在javaee三层结构中 dao层框架
  2. 在dao层里面做对数据库crud操作,使用hibernate实现crud操作,hibernate底层代码就是jdbc,hibernate对jdbc进行封装,使用hibernate好处,不需要写复杂jdbc代码了,不需要写sql语句实现。
  3. 并且,hibernate是开源的轻量级的框架。

2.理解ORM思想

简单来说orm就是一种映射思想。在Hibernate中,我们把数据库中的实体类(也就是JavaBean,后面统称为实体类)进行一对一的映射,数据库中表的字段与实体类的属性一一映射。如下图所示:
映射关系
我们只需要操作实体类和实体类的属性,Hibernate在底层会根据我们的操作而对数据库的表和字段进行crud。换句话来说,就是让我们程序员更专心地进行代码的编写工作。

3.Hibernate入门

3.1 搭建hibernate环境

1>>> new一个Project
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
第一次打开的话可能要下载一些配置文件,所以可能会有点慢,接下来就等着………………
2 >>> 检查所需jar包
在这里插入图片描述
在这里插入图片描述

现在我们有Jdk中的一些jar包、Hibernate的一些Jar包、WebApplication所需的一些jar包。但我们还需要添加一个Mysql的connector包。
这时候我们可以把我们的项目升级为maven项目,这样就不用我们自己辛辛苦苦去网上找jar包了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这样我们就把自己的项目升级为一个Maven项目了,我们可以在下面的pom.xml里面引包了。

在这里插入图片描述

<dependencies>
		<!--mysql的依赖,因为下面我们用的也是mysql数据库-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        <!--这是用来便于测试的依赖,在方法的上面添加@test标签来使用-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13-beta-3</version>
            <scope>compile</scope>
        </dependency>
</dependencies>

添加依赖后,需要将包放入lib包里面,在idea里面可以用快捷键Ctrl+Shift+Alt+s进入下面这个页面:
在这里插入图片描述
进行上列操作后,我们可以看到
在这里插入图片描述

3.2 创建实体类

在这里插入图片描述

  • 添加自定义属性和get、set、toString方法
    在这里插入图片描述
3.3 配置实体类和数据库表一一对应关系(映射关系)
  • 创建Hibernate的xml格式的配置文件(建议名称:实体类名称.hbm.xml)

  • 配置是是xml格式,在配置文件中首先引入dtd约束,这边教你们怎么找
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    这样就把dtd约束引人进来了
    在这里插入图片描述

  • 配置映射关系(重点⭐)

<hibernate-mapping>
<!-- 1 配置类和表对应 
           class标签
           name属性:实体类全路径
           table属性:数据库表名称
       -->
    <class name="edu.jxutcm.entity.Product" table="product">
        <!-- 2 配置实体类id和表id对应 
            hibernate要求实体类有一个属性唯一值
            hibernate要求表有字段作为唯一值
        -->
        <!-- id标签
            name属性:实体类里面id属性名称
            column属性:生成的表字段名称
         -->
        <id name="pid" column="pid">
            <!-- 设置数据库表id增长策略 
                native:生成表id值就是主键自动增长
            -->
            <generator class="native"></generator>
        </id>
        <!-- 配置其他属性和表字段对应 
            name属性:实体类属性名称
            column属性:生成表字段名称
        -->
        <property name="pname" column="pname"></property>
        <property name="count" column="count"></property>
        <property name="price" column="price"></property>
    </class>
</hibernate-mapping>
3.4 创建hibernate的核心配置文件(重点⭐)
  • 核心配置文件格式xml,但是核心配置文件名称和位置固定的
  • 位置:必须src下面(建议放入resouces文件夹内)
  • 名称:必须hibernate.cfg.xml

同上面的.hbm.xml文件一样找到hibernate-configuration-3.0.dtd引入dtd约束

<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
  • hibernate操作过程中,只会加载核心配置文件,其他配置文件不会加载
  1. 配置数据库信息 必须的
 <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernatetest1</property>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">mysql123</property>
  1. 配置hibernate信息 可选的
<!--配置数据库方言-->
        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.format_sql">true</property>
  1. 配置数据库方言
<!-- 指定自动生成数据表的策略 -->
        <property name="hibernate.hbm2ddl.auto">update</property>
  1. 配置映射路径
<!--配置映射路径-->
        <mapping resource="User.hbm.xml"/>

在这里插入图片描述

3.5 实现添加操作(Hibernate入门案例 重点⭐)

实现添加操作包含以下几步:

第一步 加载hibernate核心配置文件

第二步 创建SessionFactory对象

第三步 使用SessionFactory创建session对象

第四步 开启事务

第五步 写具体逻辑 crud操作

第六步 提交事务

第七步 关闭资源

这边test文件夹是专门用来进行测试的,所以在绿色的Java文件夹下new一个测试类。
在这里插入图片描述

下面是一个不规范的模板

public class HibernateTest {
    //添加@test标签是表示此方法为测试方法,可以直接运行的
    @Test
    public void testAdd(){
        //加载hibernate核心配置文件
        Configuration cfg = new Configuration();
        cfg.configure();

        //创建sessionFactory工厂
        SessionFactory sessionFactory = cfg.buildSessionFactory();
        //创建session对象
        Session session = sessionFactory.openSession();

        //开启事务
        Transaction tx = session.beginTransaction();

        //写具体逻辑,下面写的增删改查之类的操作可直接放入进来
        

        //提交事务
        tx.commit();//用tx.rollback是进行回滚

        //关闭资源
        session.close();
        sessionFactory.close();
    }
}

具体逻辑里面可以添加一个产品“coffer”

//写具体逻辑
        Product product = new Product();
        product.setPname("coffer");
        product.setCount(50);
        product.setPrice(8.5);
        session.save(product);
3.6 连接数据库(万事俱备,只欠东风)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
好了,现在我们测试一下hibernate是否能自动帮我们建及其字段
点开我们的HibernateTest类,并运行之:
在这里插入图片描述
我们可以在控制台上看到以下信息
在这里插入图片描述
这些是Hibernate为我们自动创建的建表语句,以及为我们自动添加的增加字段的语句。
然后再刷新一下我们的数据库,我们可以看到表和字段已经建好了
在这里插入图片描述

4 Hibernate配置文件详解

4.1 Hibernate映射配置文件(重点⭐)

1 映射配置文件名称和位置没有固定要求

2 映射配置文件中,标签name属性值写实体类相关内容

(1)class标签name属性值实体类全路径
(2)id标签和property标签name属性值 实体类属性名称

3 id标签和property标签,column属性可以省略的

(1)不写值和name属性值一样的

4 property标签type属性,设置生成表字段的类型,自动对应类型

4.2 Hibernate核心配置文件
  1. 配置三部分要求

(1)数据库部分必须的
(2)hibernate部分可选的
(3)映射文件必须的

  1. 核心配置文件名称和位置固定的

(1)位置:src下面 (建议在resouses里面)
(2)名称:hibernate.cfg.xml

4.3 Hibernate核心api
  • Configuration代码:
		Configuration cfg = new Configuration();
        cfg.configure();

到src下面找到名称hibernate.cfg.xml配置文件,创建对象,把配置文件放到对象里面(加载核心配置文件)

  • SessionFactory(重点)
  1. 使用configuration对象创建sessionFactory对象
    (1)创建sessionfactory过程中做事情:

根据核心配置文件中,有数据库配置,有映射文件部分,到数据库里面根据映射关系把表创建

  1. 创建sessionFactory过程中,这个过程特别耗资源的
    (1)在hibernate操作中,建议一个项目一般创建一个sessionFactory对象

  2. 具体实现
    (1)写工具类,写静态代码块实现
    静态代码块在类加载时候执行,执行一次
    日后再需要使用sessionFactory的时候直接调用就可以了
    在这里插入图片描述

4.4Session(重点⭐)
  1. session类似于jdbc中connection

  2. 调用session里面不同的方法实现crud操作
    (1)添加 save方法
    (2)修改 update方法
    (3)删除 delete方法
    (4)根据id查询 get方法

  3. session对象单线程对象
    (1)session对象不能共用,只能自己使用

4.5 Transaction

1 事务对象

//开启事务
        Transaction tx = session.beginTransaction();

2 事务提交和回滚方法

tx.commit();
tx.rollback();

3 事务概念
(1)事务四个特性
原子性、一致性、隔离性、持久性

特别地:如果无法实现回滚效果,是因为Hibernate自动创建的表类型为MyISAM。我们可以新建表查询输入下列语句,将类型更改为INNODB,这样就支持事务处理了,可以实现回滚功能。

Alert TABLE tablename ENGING = INNODB;

(MySQL数据库默认的存储引擎类型是MyISAM,这种存储引擎类型不支持事务处理。)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值