1.0、Hibernate-快速入门初体验
Hibernate 和 mybatis 一样是 ORM (Object Relation Mapping) 对象关系映射框架,将面向对象映射成面向关系。
如何使用呢?
1、导入依赖;
2、创建 Hibernate 配置文件;
3、创建实体类;
4、创建实体类 - 关系映射文件;
5、调用 Hibernate API 完成操作;
具体操作,如下所示:
第一步:打开 IDEA 创建一个 maven 项目,连接好 mysql 数据库,创建数据库 hibernate ,创建好一张表 people【 id 主键要设置为自增】,如下图所示->

第二步:导入相关的 pom 依赖,依赖如下:
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.10</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.19</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.4.10.Final</version>
        </dependency>
    </dependencies>
<!--    IDEA工程中默认在Java文件夹下的 xml文件是读取不到的,所以加上以下配置让他能够读取到 Java 文件夹下的 xml 文件-->
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
    </build>第三步:在 resource 文件夹下创建 hibernate.cfg.xml 文件,这个配置文件的名字不要乱改。
核心配置:session-factory;
SessionFactory:针对单个数据库映射经过编译的内存镜像文件,将数据库转换为一个 Java 可以识别的镜像文件;
构建 SessionFactory 非常耗费资源,所以通常一个工程只需要创建一个SessionFactory;
这里有些语句会报红是因为有些文件还没创建,没关系接着步骤往下走即可,配置文件如下所示->
<?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>
    <!--数据源配置,数据库账号密码配自己的-->
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>
        <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/hibernate?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC</property>
<!--        C3P0 连接池-->
<!--        每次不够用的时候,自增10个-->
        <property name="hibernate.c3p0.acquire_increment">10</property>
<!--        多少时间之后会自动 -> 释放资源-->
        <property name="hibernate.c3p0.idle_test_period">10000</property>
<!--        超时时间-->
        <property name="hibernate.c3p0.timeout">5000</property>
<!--        最大连接数-->
        <property name="hibernate.c3p0.max_size">30</property>
<!--        最小连接数-->
        <property name="hibernate.c3p0.min_size">5</property>
<!--        sql的最大线程数-->
        <property name="hibernate.c3p0.max_statements">10</property>
<!--        设置数据库方言,现在我们用的是mysql所以设置mysql的方言,这样 hibernate 可以根据 mysql 的语法去生成执行语句-->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!--        打印SQL语句,方便排查-->
        <property name="show_sql">true</property>
<!--        格式化SQL语句,方便排查-->
        <property name="format_sql">true</property>
<!--        是否自动生成数据表-->
        <property name="hibernate.hbm2ddl.auto">update</property>
<!--        注册实体关系映射文件-->
        <mapping resource="com/hkl/pojo/People.hbm.xml"></mapping>
    </session-factory>
</hibernate-configuration>
第四步:在com.hkl.pojo文件夹下创建 People.java 实体类文件 ->
People.java 文件如下所示->
package com.hkl.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class People {
    private Integer id;
    private String name;
    private String sex;
}
第五步:将 实体类 和 数据库表 关系映射关联起来,在 com.hkl.pojo 文件夹下创建一个 People.hbm.xml 文件 ->
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
        <!--这里将实体类 People 和表 people 关联映射起来-->
    <class name="com.hkl.pojo.People" table="people">
        <!--键映射,数据库表中的主键字段用 id 配置,而 name = "id" 这个 id 指的是 Customer 实体类中的 id 属性名-->
        <id name="id" type="java.lang.Integer">
            <!--数据库表 id 主键字段配置-->
            <column name="id"></column>
            <!--设置主键自增方式 -> identity-->
            <generator class="identity"></generator>
        </id>
        <property name="name" type="java.lang.String">
            <column name="name"></column>
        </property>
        <property name="sex" type="java.lang.String">
            <column name="sex"></column>
        </property>
    </class>
</hibernate-mapping>
第六步:将关联映射文件注册到 hibernate 配置文件当中【这句代码在之前的配置文件中已经配置过了,这里主要是强调一下他的作用】 ->
<!--        注册实体关系映射文件-->
        <mapping resource="com/hkl/pojo/People.hbm.xml"></mapping>
好了到这里配置基本结束,我们来测试一下能否操作数据库 ->
第一步:在 test 文件夹下创建一个 Test.java 文件,如下所示 ->
import org.hibernate.cfg.Configuration;
public class Test {
    public static void main(String[] args) {
//        创建 Configuration
        Configuration configuration = new Configuration().configure();
        System.out.println(configuration);
    }
}

        可以看到没有报错,假设我们的 hibernate 配置文件名不叫 hibernate.cfg.xml 的话那么会报错说找不到 hibernate.cfg.xml 这个文件;
         如果就是不想用这个名字,那么我们只需要在 configure() 中指定这个配置文件的名字即可,如下所示->
Configuration configuration = new Configuration().configure("指定配置文件名.xml");第二步:在成功获取到 configuration之后,再去获取 SessionFactory 和 Session 对象->
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class Test {
    public static void main(String[] args) {
//        创建 Configuration
        Configuration configuration = new Configuration().configure();
//        获取 SessionFactory
        SessionFactory sessionFactory = configuration.buildSessionFactory();
//        获取 Session 对象
        Session session = sessionFactory.openSession();
    }
}
第三步:使用 hibernate API 去完成数据操作 ->
import com.hkl.pojo.People;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class Test {
    public static void main(String[] args) {
//        创建 Configuration
        Configuration configuration = new Configuration().configure();
//        获取 SessionFactory
        SessionFactory sessionFactory = configuration.buildSessionFactory();
//        获取 Session 对象
        Session session = sessionFactory.openSession();
        People people = new People();
        people.setName("小澜");
        people.setSex("男");
        session.save(people);
        session.beginTransaction().commit();
        session.close();
    }
}


可以看到后台没有报错,并打印出了 sql 语句,最后查看数据库中的数据确实添加成功~


















