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

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

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

    主表一

    对应的配置文件

     主表二

     对应配置文件

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

  • 相关阅读:
    辗转相除法
    并查集(详)
    LCA 最近公共祖先
    RMQ ST表 静态区间最大值
    manacher
    题解 CF33B String Problem
    Linux 下对拍程序
    CSP 考试注意事项
    题解 P4688 [Ynoi2016]掉进兔子洞
    CSP 2020 游记
  • 原文地址:https://www.cnblogs.com/CL-King/p/14713213.html
Copyright © 2020-2023  润新知