什么是Hibernate?

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO((Plain Ordinary Java Object)简单的Java对象)与数据库表建立映射关系,完成数据持久化的重任。

Hibernate的思想

采用的ORM思想,O就是Object、R就是Relations、M就是Mapping。
1:翻译过来就是对象关联映射
2:就是实体类的属性和数据库表里面的字段进行一一对应
3:这个对应操作不用我们实现,只需要配置就可以实现
画个图表示如下:
在这里插入图片描述

Hibernate的使用方式

1.创建一个项目(普通项目或者Web项目)
2.导入相应的Jar包(要记得导入日志和mysql驱动jar包)
在这里插入图片描述
3.配置实体类和数据库表的一一对应关系
创建一个实体类
在这里插入图片描述
创建映射关系
1.是一个xml格式的配置文件
2.位置最好在实体类的包里创建
3.名字建议:实体类名字.hbm.xml格式(如user.hbm.xml)
在这里插入图片描述
创建核心配置文件hibernate.cfg.xml
1.名字是固定的
2.位置也是固定的(在src目录下面)

<!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>
        <!--第一部分:配置数据库信息,这一步是必须的-->
        <!--这里是mysql,可以去hibernate.propertity文件下找相应的驱动-->
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <!--配置数据库的路径,数据库要已经存在最后部分是数据库名字-->
        <property name="hibernate.connection.url">jdbc:mysql:///hibernate_day1</property>
        <!--配置数据库的连接信息(用户名和密码)-->
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">529558445</property>
        
        <!--第二部分:配置hibernate信息,可选部分-->
        <!--输出底层sql语句-->
        <property name="hibernate.show_sql">true</property>
        <!--这里是配置底层MySQL输出格式化-->
        <property name="hibernate.format_sql">true</property>
        <!--这个配置是hibernate帮忙创建表-->
            <!--其中update是有表更新,无表创建,还有其他三种
            create、create-drop、validate-->
        <property name="hibernate.hbm2ddl.auto">update</property>
        <!--配置方言-->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL57Dialect</property>

        <!--第三部分:把映射文件放到核心配置文件中加载,这一步是必须的-->
        <mapping resource="com/lfm/Entity/user.hbm.xml"></mapping>

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

写一个测试类测试一下能否成功

package com.lfm.Test;

import com.lfm.Entity.User;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;

/**
 * 创建一个测试类测试数据库表的创建
 * ClassName:HibernateTest
 * Author:LFM
 * Date:2019/6/30 21:50
 **/
public class HibernateTest {
    @Test
    public void testAdd(){
       //第一部分加载hibernate核心配置文件
        //他会去src下找到核心配置文件hibernater.cfg.xml
        Configuration cfg = new Configuration();
        cfg.configure();

        //第二部分创建SessionFactory对象
        //读取hibernate的配置文件,创建sessionFactory
        //在这过程中根据映射关系,在配置数据库里把表创建
        SessionFactory sessionFactory = cfg.buildSessionFactory();

       //第三部分,使用SessionFactory创建session对象
        //这个类似于jdbc里面的连接conn
        Session session = sessionFactory.openSession();

        //第四部分开启事务
        Transaction tx = session.beginTransaction();

        //第五部分写具体的逻辑操作crud
        User user = new User();
        user.setUsername("廖子默");
        user.setPassword("123456");
        user.setAddress("广州");
        session.save(user);

        //第六部分提交事务
        tx.commit();
        //第七部分关闭资源
        session.close();
        sessionFactory.close();
    }
}

我们去看一看数据库是否有表和记录
在这里插入图片描述
发现建表成功同时记录也插入了表里面,我们再插入一条新的数据测试主键增长
在这里插入图片描述

最后总结如下

映射配置文件的属性详解
1.映射配置文件的位置和名字没有强制要求,但是建议放到实体类的包下,且以hbm.mxl结尾
2.property标签里面的column的属性值可以不写,默认是和name的值是一样

核心配置文件属性详解
1.名称和位置是固定的,在src下叫hibernate.cfg.xml
2.里面有两部分必须的,一部分可选的。这个可以生成一份模板,以后只要修改mapping标签里面的resource值就行了。

附录:Hibernate的核心API

1.Configuration

Configuration cfg = new Configuration();
        cfg.configure();

他要做的事情就是去加载核心配置文件

2.SessionFactory
使用configuration对象创建sessionFactory对象
创建sessionFactory过程中主要做的事情是根据核心配置文件的数据库配置,到数据库去把表创建了

 <property name="hibernate.hbm2ddl.auto">update</property>

由于它创建过程中会创建表,所以这个过程是非常耗资源的,我们应该一个项目只创建一个这样的对象,可以使用工具类来实现:
用静态代码块在类加载的时候创建,工具类创建如下:
在这里插入图片描述
测试一下执行效果:
在这里插入图片描述
在这里插入图片描述
3.Session
1.这个类似于jdbc中的连接操作connection

2.里面有不同的方法(crud)
save、update、delete、根据id查询

3.这是一个单线程的对象,session对象不能共用,只能自己使用(最大的特点)

4.Transaction
事务对象

Transaction tx = session.beginTransaction();

事务包括提交(commit)、回滚(rollback)(这个例子没有实现)
事务由四个特性(ACID)原子性、一致性、隔离性、持久性
原子性:要么都成功要么都失败
一致性:数据的总量不变
隔离性:事物之间没有干扰
持久性:事务的修改是永久的

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐