Hibernate 入门简单教程

这篇教程介绍了Hibernate,一个主流的ORM框架,用于将面向对象模型映射到关系数据库。内容包括Hibernate的使用步骤,如创建配置文件、实体类、关系映射文件,以及如何使用Hibernate API进行数据操作。特别强调了Hibernate中一对多关系的实现,解释了一对多关系在数据库和面向对象模型中的表现,并展示了如何在配置文件中设置一对多关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hibernate

主流ORM框架Object Relation Mapping 对象关系映射,将面向对象映射成面向关系。

  • Customer

  • Orders

使用

  1. 导入相关依赖

  2. 创建Hibernate配置文件

  3. 创建实体类

  4. 创建实体类-关系映射文件

  5. 调用Hibernate API 完成操作

具体操作

  1. 创建maven工程,pom.xml

            <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.6.8.Final</version>
            </dependency>
    
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.24</version>
            </dependency>
        </dependencies>
    
  2. 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">fwp010330</property>
            <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
            <property name="connection.url">jdbc:mysql://localhost:3306/hibernate?userUnicode&amp;characterEncoding=UTF-8</property>
    
            <!--C3P0连接池-->
            <property name="c3p0.acquire_increment">10</property>
            <property name="c3p0.idle_test_period">1000</property>
            <property name="c3p0.timeout">5000</property>
            <property name="c3p0.max_size">30</property>
            <property name="c3p0.min_size">5</property>
            <property name="hibernate.c3p0.max_statements">10</property>
            
            <!--数据库方言-->
            <property name="dialect">org.hibernate.dialecct.MYSQLDialect</property>
            
            <!--打印SQL-->
            <property name="show_sql">true</property>
    
            <!--格式化SQL-->
            <property name="format_sql">true</property>
    
            <!--是否自动生产数据表-->
            <property name="hibernate.hbm2ddl.auto"></property>
        </session-factory>
    </hibernate-configuration>
    
  3. 创建实现类

    package com.fwp.entity;
    
    import lombok.Data;
    
    import java.util.Set;
    
    @Data
    public class Customer {
        private Integer id;
        private String name;
    
        private Set<Orders> orders;
    }
    
    package com.fwp.entity;
    
    import lombok.Data;
    
    @Data
    public class Orders {
        private Integer id;
        private String name;
    
        private Customer customer;
    }
    
  4. 创建实体关系映射文件

    package com.fwp.entity;
    
    import lombok.Data;
    
    @Data
    public class People {
        private Integer id;
        private String name;
        private Double money;
    }
    

在这里插入图片描述

在这里插入图片描述

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
    <class name="com.fwp.entity.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>
  1. 实体关系映射文件注册到Hibernate的配置文件中

    <!--注册实体关系映射文件-->
    <mapping resource="com/fwp/entity/People.hbm.xml"></mapping>
    
  2. 使用Hibernate API 完成数据操作。

    package com.fwp.Test;
    
    
    import com.fwp.entity.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 configure = new Configuration().configure();
            //获取SessionFactory
            SessionFactory sessionFactory = configure.buildSessionFactory();
            //获取session
            Session session = sessionFactory.openSession();
    
            People people = new People();
            
            people.setName("张三");
            people.setMoney(1000.0);
            
            session.save(people);
            session.beginTransaction().commit();
            
            session.close();
    
    
        }
    }
    
  3. pom.xml中需要配置resource。

    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
    </build>
    

    Hibernate级联操作

    1. 一对多

      客户和订单:每个客户可以购买多个产品,生产多个订单,但是一个订单只能属于一个客户,所以客户是一,订单是多。

      数据库的一方是主表,多的一方时候从表,通过主外键关系来维护。

      面向对象中

      package com.fwp.entity;
      
      import lombok.Data;
      
      import java.util.Set;
      
      @Data
      public class Orders {
          private Integer id;
          private String name;
      
          private Set<Orders> orders;
      }
      
      package com.fwp.entity;
      
      import lombok.Data;
      
      
      @Data
      public class Orders {
          private Integer id;
          private String name;
      
          private Customer customer;
      }
      
    2. 多对多关系

      学生选课:一门课程可以被多个学生选择,一个学生可以选择多个课程,学生是多,课程也是多。

      数据库中是通过两个一对多关系来维护的,学生和课程都是主表,额外添加一张中间表作为从表,两张主表和中间表都是一对多的关系。

      阿松大

      Java和数据库对于这两种关系的体现完全是两种不同的方式,Hibernate框架的作用就是将这两种方式进行转换和映射的。

Hibernate 实现一对多

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
    <class name="com.fwp.entity.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">
            <key column="cid"></key>
            <one-to-many class="com.fwp.entity.Orders"></one-to-many>
        </set>

    </class>
</hibernate-mapping>
  • set标签 用来配置实体类中的集合属性orsers
  • name实体类属性名
  • table表名
  • key外键
  • one-to-many与集合泛型的实体类对应
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小帅哥鹏鹏儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值