zoukankan      html  css  js  c++  java
  • 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.多对多

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

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

    主表一

    对应的配置文件

     主表二

     对应配置文件

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

  • 相关阅读:
    printcap
    browser-ua
    PHP 开发 APP 接口 学习笔记与总结
    Java实现 LeetCode 72 编辑距离
    Java实现 LeetCode 72 编辑距离
    Java实现 LeetCode 72 编辑距离
    Java实现 LeetCode 71 简化路径
    Java实现 LeetCode 71 简化路径
    Java实现 LeetCode 71 简化路径
    Java实现 LeetCode70 爬楼梯
  • 原文地址:https://www.cnblogs.com/CL-King/p/14713213.html
Copyright © 2011-2022 走看看