Hibernate:快速入门

前言:

hibernate是一个ORM框架,与mybatis相似,但它是全自动的,也就是说,开发人员无在关注sql了,优点就是统一了sql接口,无需在因为数据库方言(数据库类型:mysql/oracle),而花费经历去了解,

缺点就是每次事务的执行都需建立一个sqlsession,并发量没有mybatis高,sql不灵活

一.单表基本操作

1.导入相关依赖(pom)

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.22</version>
        </dependency>

        <!--Hibernate-->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.4.10.Final</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.16</version>
        </dependency>

2.创建Hibernate配置文件(hibernate.cfg.xml)

注意:hibernate.cfg.xml,核心配置文件,只能叫这个名

<?xml version="1.0" encoding="UTF-8"?>
<!--表明解析本XML文件的DTD文档位置,DTD是DocumentType Definition 的缩写,
即文档类型的定义,XML解析器使用DTD文档来检查XML文件的合法性。
hibernate.sourceforge.net/hibernate-configuration-3.0dtd可以在
Hibernate3.1.3软件包中的srcorghibernate目录中找到此文件-->
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <!--核心配置,作用:针对单个数据库映射经过编译的内存镜像文件-->
    <!--通俗的说就是将数据库转化为java可以识别的镜像文件-->
    <!--注意:构建SessionFactory非常消耗资源,通常一个工程只需构建与构建一个SessionFactory-->
    <session-factory>
        <!--数据源配置-->
        <property name="connection.username">root</property>
        <property name="connection.password">123456</property>
        <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
            <property name="connection.url">jdbc:mysql://localhost:3306/hibernate?useSSL=true&amp;serverTimezone=UTC&amp;useUnicode=true&amp;characterEncoding=UTF-8</property>

        <!--C3P0-->
        <property name="hibernate.c3p0.acquire_increment">10</property>
        <!--失效时间,单位:秒-->
        <property name="hibernate.c3p0.idle_test_period">1000</property>
        <!--过期时间-->
        <property name="hibernate.c3p0.timeout">5000</property>
        <!--最大连接数-->
        <property name="hibernate.c3p0.max_size">30</property>
        <property name="hibernate.c3p0.min_size">5</property>
        <!--线程数-->
        <property name="hibernate.c3p0.max_statements">10</property>

        <!--数据库方言-->
        <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/king/domain/People.hbm.xml"></mapping>
    </session-factory>
</hibernate-configuration>

3.创建实体类(domain)

package com.king.domain;

import lombok.Data;

@Data
public class People {

    private Integer id;

    private String name;

    private Double money;
}

4.创建实体关系映射文件(**.hbm.xml)

 

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.king.domain.People" table="people">
        <id name="id" type="java.lang.Integer">
            <column name="id"></column>
            <generator class="identity"></generator>
        </id>

        <property name="name" type="java.lang.String">
            <column name="name"></column>
        </property>

        <property name="money" type="java.lang.Double">
            <column name="money"></column>
        </property>

    </class>
</hibernate-mapping>

5.调用Hibernate API完成操作

    public static void main(String[] args) {
        //创建Configuration
        Configuration configuration = new Configuration().configure();
        //System.out.println(configuration);
        //获取SessionFactory
        SessionFactory sessionFactory = configuration.buildSessionFactory();
        //获取session
        Session session = sessionFactory.openSession();
        People people = new People();
        people.setId(1);
        people.setName("王");
        people.setMoney(100.2);
        session.save(people);
        session.beginTransaction().commit();
        session.close();
    }

小结:1.hibernate.cfg.xml是Hibernate框架的核心配置文件,底层将此文件名写死了,所以是不可修改的

   2.在实体类上要声明主键策略

二,级联操作

在级联操作时:无论一对多还是多对一,”一“那个表是主表,”多“那个表是从表

1.一对多

@Data
public class Customer {

    private Integer id;

    private String name;

    //辅助字段,一段多关系
    private Set<Orders> orders;
}

xml配置文件

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.king.domain.Customer" table="customer">
        <id name="id" type="java.lang.Integer">
            <column name="id"></column>
            <generator class="identity"></generator>
        </id>

        <property name="name" type="java.lang.String">
            <column name="name"></column>
        </property>

        <set name="orders" table="orders">
            <key column="cid"></key>
            <one-to-many class="com.king.domain.Orders"></one-to-many>
        </set>

    </class>
</hibernate-mapping>

2.多对一

@Data
public class Orders {

    private Integer id;

    private String name;

    private Integer cid;

    //辅助字段,多对一关系
    private Customer customer;
}

xml配置文件

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.king.domain.Orders" table="orders">
        <id name="id" type="java.lang.Integer">
            <column name="id"></column>
            <generator class="identity"></generator>
        </id>

        <property name="name" type="java.lang.String">
            <column name="name"></column>
        </property>

        <many-to-one name="customer" class="com.king.domain.Customer" column="cid"></many-to-one>

    </class>
</hibernate-mapping>

3.多对多

多对多的实现就是两个一对多关系的表通过一个中间表(临时表)去建立一个多对多的关系,常用的就是购物车,选课等业务逻辑

两个主表通过一张中间表(从表)建立关联

主表一

对应的配置文件

 主表二

 对应配置文件

 两个主表的中间表就是两个表达从表

原文地址:https://www.cnblogs.com/CL-King/p/14713213.html