Hibernate01 - 入门概念 搭建环境 api

Hibernate概述

什么是框架?

写程序, 使用框架之后,帮我们实现一部分的功能,使用框架的好处,少写一部分的代码。

什么是Hibernate框架(重点)

  • Hibernate框架应用在javaee三层架构中 dao层架构
  • 在dao层里面做对数据库crud操作,使用Hibernate实现crud操作,Hibernate底层代码就是jdbc,Hibernate对jdbc进行封装,使用Hibernate的好处,不需要写jdbc代码了。不需要写sql语句实现
  • Hibernate开源 轻量级框架
  • hibernate版本 — 5.x

什么是orm思想?

1、hibernate使用orm思想对数据库进行crud操作

2、在web阶段学习javabean 更正确的叫法叫做实体类

3、orm:Object Relational Mapping ,对象关系映射

​ 文字描述:

​ 1) 让实体类与数据库的一一对应

​ 让实体类与数据库对应

​ 让实体类属性与表的字段对应

​ 2)、不需要直接操作数据库表,操作实体类就可以了

Hibernate入门

搭建hibernate环境

导入依赖

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <!-- 添加Hibernate依赖 -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.4.17.Final</version>
        </dependency>

        <!-- 添加Log4J依赖 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.16</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-nop</artifactId>
            <version>1.6.4</version>
        </dependency>

        <!-- 添加javassist -->
        <dependency>
            <groupId>javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.12.0.GA</version>
        </dependency>

        <!-- mysql数据库的驱动包 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
                <configuration>
                    <showDeprecation>true</showDeprecation>
                    <showWarnings>true</showWarnings>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

创建实体类

public class User {
    /**
     * 要求: hibernate要求实体类中有一个属性是唯一的*/
    private Integer uid;
    private String username;
    private String password;
    private String address;
    // 自己生成 getter  setter

使用hibernate的时候 不需要自己手动创建表,hibernate帮忙把表创建

配置实体类话数据库表一一对应

使用配置文件实现映射关系

1、 创建xml格式的配置文件

- 映射的配置文件名称和位置没有固定的要求
- 建议:在实体类所在的包中创建  ==名称建议:实体类名称.hbm.xml==

2、配置是xml格式,在配置文件中首先引入xml约束

- 使用![dtd](https://img-blog.csdnimg.cn/20200812165445207.png#pic_center)

约束

在这里插入图片描述
在这里插入图片描述

<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    
</hibernate-mapping>

3、配置hibernate映射关系

<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <!--
        1、配置类和表对应
            class标签
            name属性  : 实体类全路径
            table属性 : 数据库表的名称
    -->
    <class name="com.jsu.entity.User" table="user">
        <!--
            2、 配置实体类id 与 表id 对应
            hibernate要求实体类有一个属性唯一值
            hibernate要求表有字段作为唯一值
        -->
        <!--
            id标签  一般建议一样(不一样也可以)
            name   : 实体类里面id的名称
            column :  生成的表字段名称
        -->
        <id name="uid" column="uid">
            <!--
                设置数据库中 id 增长的策略
                native : 生成表id值就是主键自动增长
            -->
            <generator class="native"></generator>
        </id>
        <!--
            配置其他的属性和表的字段对应
            name   : 实体类属性名称
            column : 生成表字段名称
            -->
        <property name="username" column="username"></property>
        <property name="password" column="password"></property>
        <property name="address" column="address"></property>
    </class>
</hibernate-mapping>

创建hibernate核心配置文件

核心:指定生成数据库的表

1、核心配置文件格式xml,而且核心配置文件名称和位置都是固定的

​ 位置:必须src下面/resource

​ 名称:必须hibernate.cfg.xml

2、引入dtd约束

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

3、hibernate 操作过程中 只会加载核心配置文件,其他的配置文件不会加载

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory name="">
        <!--
            hibernate 操作过程中 只会加载核心配置文件,其他的配置文件不会加载
            第一部分: 配置数据库的信息
            第二部分:配置hibernate信息
            第三部分:把映射文件方法核心配置文件中
        -->
        <!--第一部分: 配置数据库的信息 -->
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/jsu</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">000</property>

        <!--第二部分:配置hibernate信息-->
        <!-- 是否显示sql语句 -->
        <property name="hibernate.show_sql">true</property>
        <!-- 是否格式化底层sql语句 -->
        <property name="hibernate.format_sql">true</property>
        <!-- 配置数据库的方言
            在mysql里面实现分页 关键字 limit  只能使用mysql里面
            在oracle数据库,实现分页rownum
            让hibernate框架识别不同数据库的自己特有的语句
        -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL55Dialect</property>
        <!--
            hibernate帮创建表  需要配置之后
            update : 如果已经有了表,更新;如果没有用这个表 创建
        -->
        <property name="hibernate.hbm2ddl.auto">update</property>
        <!-- 是否自动提交事务:针对insert有效,针对delete无效 -->
        <property name="hibernate.connection.autocommit">true</property>
        
        <!--第三部分:把映射文件方法核心配置文件中 -->
        <mapping resource="com/jsu/entity/User.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

实现添加操作

效果显示:

  • 是否生成表
  • 看表是否有记录
    流程
  • 1、加载hibernate核心配置文件(固定)
  • 2、创建SessionFactory对象(固定)
    3、使用SessionFactory创建session对象(固定)
    4、开启事务(固定)
    5、写具体逻辑 crud操作(唯一变化)
    6、提交事务(固定)
    7、关闭资源(固定)
public class HibernateTest {
    @Test
    public void testAdd() {
        //  1、加载hibernate核心配置文件(固定)
            // 到src下面找到的名称是hibernate.cfg.xml
            // 在hibernate里面封装了对象
        Configuration configuration = new Configuration();
        configuration.configure();
        //  2、创建SessionFactory对象(固定)
        // 读取hibernate核心配置文件内容。创建sessionFactory
        // 在过程中,根据映射关系,在配置数据库里面把表创建
        SessionFactory sessionFactory = configuration.buildSessionFactory();
        //  3、使用SessionFactory创建session对象(固定)
        // 类似于连接
        Session session = sessionFactory.openSession();

        //  4、开启事务(固定)
        Transaction transaction = session.beginTransaction();

        //  5、写具体逻辑 crud操作(唯一变化)
        User user = new User();
        user.setUsername("小王");
        user.setPassword("1234");
        user.setAddress("上海");
        // 调用session的方法实现添加
        session.save(user);
        //  6、提交事务(固定)
            transaction.commit();
        //  7、关闭资源(固定)
            session.close();
            sessionFactory.close();
    }
}

Hibernate核心的api

Configuration

20200810091851525

# 1、加载hibernate核心配置文件(固定)
#	到src下面找到的名称是hibernate.cfg.xml
# 2、去指定位置查找配置文件
 Configuration config = new Configuration ().configure("/config/hibernate.cfg.xml");
# 3、加载映射文件
 Configuration configuration = new Configuration () .configure ("xml文件位置");
 configuration.addResource("com/domain/User.hbm.xml")

SessionFactory(重点)

 使用Configuration对象 创建 SessionFactory 对象
  1)、创建SessionFactory对象过程中做事情:
 	- 根据核心配置文件中,有数据库配置,有映射文件部分,到数据库里面根据映射关系把表创建
    只有配置文件中有:<property name="hibernate.hbm2ddl.auto">update</property> 才会创建
 创建SessionFactory的过程中,十分的消耗资源
	1)、在hibernate操作中,建议一个项目一般创建一个sessionFactory对象
 具体实现
 	1)、写工具类,在静态代码块实现
		-静态代码块在类加载的时候,执行一次

session

 1、类似于jdbc中的connection
 2、调用session中不同的方法实现crud操作
	- 添加save方法
	- 修改update方法 
 	- 删除delete方法
 	- 根据id查询 get方法
 3、单线程对象
 	- session对象不能共用,只能自己使用

Transaction

 开启事务
 	Transaction transaction = session.beginTransaction();
 事务管理的常用方法,具体如下:
 	- commit()方法:提交相关联的session实例。
 	- rollback(方法:撤销事务操作。
 事务概念
 	1、事务四个特性
		- 原子性(都成功或都失败) 
		- 一致性(操作之前之后,数据一致) 
		- 隔离性(同时操作同一条记录,不产生影响) 
		- 持久性(对数据所作的所有改动都必须在事务成功结束前保存)

- 根据id查询 get方法

3、单线程对象

- session对象不能共用,只能自己使用

Transaction

 开启事务
 	Transaction transaction = session.beginTransaction();
 事务管理的常用方法,具体如下:
 	- commit()方法:提交相关联的session实例。
 	- rollback(方法:撤销事务操作。
 事务概念
 	1、事务四个特性
		- 原子性(都成功或都失败) 
		- 一致性(操作之前之后,数据一致) 
		- 隔离性(同时操作同一条记录,不产生影响) 
		- 持久性(对数据所作的所有改动都必须在事务成功结束前保存)


Hibernate01 - 入门概念 搭建环境 api
Hibernate02 - 缓存 一对多 多对多:
Hibernate03 -查询方式 OID hql QBC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值