Hibernate:快速入门


前言:

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

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

一.单表基本操作

1.导入相关依赖(pom)

        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <version>8.0.22version>
        dependency>

        
        <dependency>
            <groupId>org.hibernategroupId>
            <artifactId>hibernate-coreartifactId>
            <version>5.4.10.Finalversion>
        dependency>

        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <version>1.18.16version>
        dependency>

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

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

<?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">rootproperty>
        <property name="connection.password">123456property>
        <property name="connection.driver_class">com.mysql.cj.jdbc.Driverproperty>
            <property name="connection.url">jdbc:mysql://localhost:3306/hibernate?useSSL=true&serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8property>

        
        <property name="hibernate.c3p0.acquire_increment">10property>
        
        <property name="hibernate.c3p0.idle_test_period">1000property>
        
        <property name="hibernate.c3p0.timeout">5000property>
        
        <property name="hibernate.c3p0.max_size">30property>
        <property name="hibernate.c3p0.min_size">5property>
        
        <property name="hibernate.c3p0.max_statements">10property>

        
        <property name="dialect">org.hibernate.dialect.MySQLDialectproperty>

        
        <property name="show_sql">trueproperty>

        
        <property name="format_sql">trueproperty>

        
        <property name="hibernate.hbm2ddl.auto">updateproperty>

        
        <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'?>
mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

    <class name="com.king.domain.People" table="people">
        
            
            class="identity">
        

        
            
        

        
            
        

    class>

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;
}

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.多对多

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

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

主表一

对应的配置文件

 主表二

 对应配置文件

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