Hibernate多表关联——(一对多关系)

这篇具有很好参考价值的文章主要介绍了Hibernate多表关联——(一对多关系)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Hibernate多表关联——(一对多关系)


hibernate是连接数据库使得更容易操作数据库数据的一个框架,在上一篇文章( 感兴趣的小伙伴点击这里📔’)中我们演示了单表建立查询。接触过数据库的都知道 关系型数据库表有三种关系, 一对一,一对多,多对多。而接下来我们在hibernate中建立 一对多关系,打开数据库。基于上一篇文章的表,接下来继续建立另外两个表的关系。这里创建两个实体类Custom和company,这两个表的关系就是: 一个公司有多名员工,一个员工只能属于一家公司,这里的多代表的就是员工,公司就是一。

1.分别在类中添加属性:

创建Coustoms.java添加下列元素,分别创建setget

//员工类
private int lid;//员工id
private String name;//员工姓名
private String tel;//员工电话
private String gender;//员工性别
private Company company;//存入公司信息

//添加相应的get和set方法即可

同样的在company类中添加属性

private int cid;//公司id
private String name;//公司名称
private String address;//公司地址
//注意这里要创建一个集合用来保存和员工表之间的关系
Set<Custom> companySet = new HashSet<>();
//添加相应的get和set方法即可

2.hibernate建表

之后建立两个文件夹分别存放两个类的表结构,可以直接参照单表结构进行建立。custom.hbm.xmlcoustoms表形成关系映射,与上一个文章相同,这里也需要创建关系映射map
添加相同头文件:

<?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">

对象与文件的映射:

<!--Custom表结构-->
<hibernate-mapping>
    <class name="com.hbnu.pojo.Custom" table="tb_Custom">
        <id name="lid">
            <generator class="native"></generator>
        </id>
        <property name="name"/>
        <property name="tel" />
        <property name="gender"/>
        <!--外键配置,此处非常关键 -->
        <many-to-one name="company" class="com.hbnu.pojo.Company" column="clid"/>
    </class>
</hibernate-mapping>

建立多表之间的联系时需要在建表时添加表的外键关系,这样才算表与表之间产生了联系。

而使用hibernate建立表时要注意,关系是建立在一对多的一个关系属性的表中,也就是这里的公司。

<!--Company表结构-->
<hibernate-mapping>
    <class name="com.hbnu.pojo.Company" table="tb_company">
        <id name="cid">
            <generator class="native"></generator>
        </id>

        <property name="name" />
        <property name="address" column="addr"></property>
        <!--需要双方去维护的外键
        column:外键名称
        -->
        <!--使用级联保存,在one中添加,在操作one的一方-->
        <set name="companySet">
            <key column="clid"></key>
            <one-to-many class="com.hbnu.pojo.Company"/>
        </set>
    </class>

</hibernate-mapping>

创建完表,只需要随意使用一个测试类就可以看见表已经创建成功了。创建完成需要在hibernate.cfg.xml进行声明。在上一篇文章中我们写入user.hbm.xml声明。在hibernate.cfg.xml中写入两个文件的路径。

<mapping resource="service/custom.hbm.xml"/>
<mapping resource="service/Company.hbm.xml"/>

连接数据库的封装

每次连接操作数据库时都需要创建对象连接,我们可以创建一个对象来封装数据库中的操作对象。
首先创建一个文件夹util作为存放封装对象的文件夹。创建一个HibernateUtil类对象里面封装三个方法:

1.解析hibernate配置文件,返回一个SessionFactory
2.获得SessionFactory中的session对象
3.关闭资源操作

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
    private Configuration configuration = null;
    private SessionFactory sessionFactory = null;
    private Session session = null;
    //1.解析hibernate配置文件,返回一个SessionFactory
    public SessionFactory getSessionFactory(){
        configuration = new Configuration().configure();
        sessionFactory = configuration.buildSessionFactory();
        return sessionFactory;
    }
    //2.获得SessionFactory中的session对象
    public Session getSession(){
        session = getSessionFactory().openSession();
        return session;
    }
    //3.关闭资源操作
    private void clos (Session session,SessionFactory sessionFactory,Configuration configuration){
        if(session != null){
            session.close();
        }
        if(sessionFactory != null){
            sessionFactory.close();
        }
        if(configuration != null){
            sessionFactory.close();
        }
    }
}

需要使用数据库对象时,直接调用getSession()

3.使用测试类在表中添加数据

综合以上,两个表之间的关系已经搭建完成,接下来我们在表中添加数据。

@Test
//测试代码
    public void testOneToManySave(){
       Session session = HibernateUtil.getSession();

        Customs customs1 = new Customs();
        customs1.setName("百度");
        customs1.setAddress("北京");

        Customs customs2 = new Customs();
        customs2.setName("腾讯");
        customs2.setAddress("深圳");

        company company1 = new company();
        company1.setName("小李");
        company1.setTel("18569655111");
        company1.setGender("男");

        company company2 = new company();
        company2.setName("小顺");
        company2.setTel("18569655222");
        company2.setGender("男");

        company company3 = new company();
        company3.setName("小王");
        company3.setTel("18569655333");
        company3.setGender("男");

        company company4 = new company();
        company4.setName("小汤");
        company4.setTel("18569655444");
        company4.setGender("女");

        company company5 = new company();
        company5.setName("小明");
        company5.setTel("18569655666");
        company5.setGender("男");

        //建立关系
        customs1.getcompanySet().add(company1);
        customs1.getcompanySet().add(company2);
        customs1.getcompanySet().add(company3);

        company1.setCustoms(customs1);
        company2.setCustoms(customs1);
        company3.setCustoms(customs1);
        company4.setCustoms(customs2);
        company5.setCustoms(customs2);


        //保存数据
        session.save(1);
        session.save(customs2);
        
        session.save(company1);
        session.save(company2);
        session.save(company3);
        session.save(company4);
        session.save(company5);
        
       HibernateUtil.close(session,null,null);

    }

在数据库中查看数据已经添加。

注意我这里表名有些出入,请遵守自己的代码即可。

Hibernate多表关联——(一对多关系)

级联操作

  • 级联保存:当我们保存一方的数据时,可以自动保存多的一方,比如说公司中添加了一个员工,不需要在员工表中再添加一次,员工表会自动添加。
  • 级联删除:当我们删除一方的数据以后,另一方的数据也会被删除。比如说一个公司需要注销,此时他的员工也会进行注销操作。

级联保存cascade="save-update添加该标签在外键关系中可以更加高效的添加数据,如图

Hibernate多表关联——(一对多关系)
该标签页添加在customs中。
如果再需要添加数据时就不需要将custom中数据进行save(保存),保存company数据即可。
级联删除:delete删除表中数据时就不需要将custom中数据进行delete,直接删除company数据即可。
Hibernate多表关联——(一对多关系)文章来源地址https://www.toymoban.com/news/detail-408870.html

到了这里,关于Hibernate多表关联——(一对多关系)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [MySql]实现多表查询-一对一,一对多

    目录 多表关联关系的分类 mybatis中的多表查询: 数据库准备  项目目录  一对一查询(多对一) 方式一:(xml文件映射) 查询结果:  方式二:(注解映射)  一对多查询(一对多) 方式一:(xml文件映射)  方式二:(注解映射) 既然数据库是存储项目中的数据的,项目中的

    2023年04月10日
    浏览(56)
  • MySQL-多表设计-一对多

    项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种: 一对多(多对一) 多对多 一对一 一对多 需求 根据页面原型及需求文档,完成 部门(

    2024年02月17日
    浏览(40)
  • MySQL-多表设计-一对一&多对多

    案例:用户 与身份证信息 的关系 关系:一对一关系, 多用于单表拆分 ,将一张表的基础字段放在一张表中,其它字段放在另一张表中,以提高操作效率 实现: 在任意一方加入外键,关联另一方的主键,并且设计外键为唯一的(unique) 具体代码及运行结果如下:   上述的

    2024年02月16日
    浏览(48)
  • MyBatis关联查询实战:一对一与一对多详细解析

    MyBatis是一款强大的持久层框架,提供了多种方式来处理关联查询,其中包括一对一和一对多的情况。在本文中,我们将深入探讨这两种关联查询的实现方式,并通过具体的示例代码进行详细解释。 实现一对一关联查询的方式有多种,其中包括嵌套查询(Nested Queries)和结果集

    2024年01月19日
    浏览(73)
  • ThinkPHP 一对多关联

    多的一方的数据库表有一的一方数据库表的外键。 举例,用户获取自己的所有文章 数据表结构如下 多的一方(文章表)存在一的一方(用户表)的外键 user_id 。 用户表 user 模型: hasMany 方法参数如下: hasMany(\\\'关联模型\\\', \\\'关联模型外键\\\', \\\'当前模型主键\\\'); 除了关联模型外,

    2024年02月15日
    浏览(44)
  • Hadoop 多表关联

    一、实例描述 多表关联和单表关联类似,它也是通过对原始数据进行一定的处理,从其中挖掘出关心的信息。下面进入这个实例。 输入是两个文件,一个代表工厂表,包含工厂名列和地址编号列;另一个代表地址列,包含地址名列和地址编号列。要求从输入数据中找出工厂

    2023年04月08日
    浏览(73)
  • MySQL的多表关联查询

    多表关联查询是使用一条SQL语句,将关联的多张表的数据查询出来。 交叉查询就是将多张表的数据没有条件地连接在一起进行展示。 1.1.1 语法 使用交叉查询类别和商品 通过查询结果可以看到,交叉查询其实是一种错误的做法,在查询到的结果集中有大量的错误数据,称交叉

    2024年02月14日
    浏览(41)
  • FLink多表关联实时同步

    Oracle-Debezium-Kafka-Flink-PostgreSQL Flink消费Kafka中客户、产品、订单(ID)三张表的数据合并为一张订单(NAME)表。 Oracle内创建三张表 PostgreSQL内创建一张表 其他前置环境 Oracle、PostgreSQL、Kafka、FLink、Debezium-Server的部署参见本系列其他文章搭建。 采用前置条件中的语句建表即可,

    2023年04月25日
    浏览(65)
  • 多表关联进行update更新数据

    在平常的工作中,我们经常会更新表的数据。常见的表关联更新数据例如用where条件进行表关联,或者用join进行表的连接更新表的数据。 1:创建测试表: 2:将名字为“阿杜”同学的兴趣爱好改为跳舞: 3:如果表数据量比较大,可以查询需要关联的字段,这样可以提高效率

    2024年02月08日
    浏览(39)
  • MyBatis-Plus不写任何resultMap和SQL执行一对一、一对多、多对多关联查询

    MyBatis-Plus不写任何resultMap和SQL执行一对一、一对多、多对多关联查询 MyBatis-Plus不写任何resultMap和SQL执行一对一、一对多、多对多关联查询 com.github.dreamyoung mprelation 0.0.3.2-RELEASE 注解工具使用优缺点: 优点: 使用简单,通过在实体类上添加@OneToOne / @OneToMany / @ManyToOne / @ManyToM

    2024年01月20日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包