【Hibernate学习之路5】对象关系映射

本文介绍了Hibernate中的一对一、一对多及多对多的对象关系映射方法,并通过具体实例展示了如何在实体类中建立关联关系及配置XML映射文件。

Hibernate对象关系简单映射有三种——一对一映射。一对多映射,多对多映射

  1. 一对一映射
    例如Dept表与Emp表。
    首先在Dept实体类中增加Set类型的emps属性,勇于存放雇员信息。
    private Integer deptno;
    private String dname;
    private String loc;
    private Set<Emp> emps = new HashSet();

然后在Dept.hbm.xml文件中增加一对多属性

<hibernate-mapping>
    <class name="com.web.bean.Dept" table="dept">
        <id name="deptno" column="deptno">
            <generator class="assigned"></generator>
        </id>
        <property name="dname" column="dname"></property>
        <property name="loc" column="loc"></property>
        <!-- 一对多关系映射-->
        <!--name配置实体类中集合属性名称 -->
        <set name="emps">
            <!-- 配置关键字段(主键)名称-->
            <key column="deptno"></key>
            <!--关联映射实体类完整路径 -->
            <one-to-many class="com.web.bean.Emp"/>
        </set>
    </class>
</hibernate-mapping>

测试:

    Dept d = (Dept)session.get(Dept.class, 20);
        System.out.println(d.getDname()+" "+d.getLoc());
        Set<Emp> set = d.getEmps();
        for(Emp e : set){
            System.out.println(e.getEname()+" 、"+e.getJob()+" "+e.getSal()+" "+e.getDeptno());
        }
  1. 一对多映射
    跟多对一差不多,首先在Emp实体类中增加Dept对应的属性
    private Integer empno;
    private String ename;
    private String job;
    private Integer mgr;
    private String hiredate;
    private Double sal;
    private Double comm;
    private Integer deptno;
    private Dept dept;

其次,修改配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
    <class name = "com.web.bean.Emp" table = "emp">
        <id name = "empno" column="empno">
            <generator class="assigned"></generator>
        </id>
        <property name="ename" column="ename"></property>
        <property name="job" column="job"></property>
        <property name="mgr" column="mgr"></property>
        <property name="hiredate" column="hiredate"></property>
        <property name="sal" column="sal"></property>
        <property name="comm" column="comm"></property>
        <!--多对一映射配置-->
        <!-- 
        name:关联实体类映射名称
        class:关联实体类路径
        column:关联字段主键(外键)
        -->
        <many-to-one name = "dept"  class  = "com.web.bean.Dept" column="deptno"></many-to-one>
    </class>
</hibernate-mapping>
  1. 多对多映射
    可以简单理解为互相多对一映射,这里换一个环境,假设两张表——商品表,顾客表。两个表的关系是m-n关系。
    首先在Tuser(顾客)实体类增加商品属性
    private Integer tid;
    private String tname;
    private Set<Product> products = new HashSet();

然后在Product(商品)中增加顾客属性

    private Integer pid;
    private String pname;
    private String remark;
    private Double price;
    private Set<Tuser> tusers = new HashSet();

再修改两者的配置文件

<!--商品的配置-->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
    <class name="com.web.bean.Product" table="product">
        <id name="pid" column="pid">
            <generator class="assigned"></generator>
        </id>
        <property name="pname" column="pname"></property>
        <property name="remark" column="remark"></property>
        <property name="price" column="price"></property>
        <!-- 多对多关联映射 -->
        <set name="tusers" table="orders">
            <key column="pid"></key>
            <many-to-many class="com.web.bean.Tuser" column="tid"></many-to-many>
        </set>
    </class>
</hibernate-mapping>
<!--顾客的配置-->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
    <class name="com.web.bean.Tuser" table="tuser">
        <id name="tid" column="tid">
            <generator class="assigned"></generator>
        </id>
        <property name="tname" column="tname"></property>
        <!-- 多对多关联映射 -->
        <!-- 
            set name 关联属性名称
            set table 关联第三方关联表
         -->
        <set name="products" table="orders">
            <!-- key column 主键 -->
            <key column="tid"></key>
            <!-- 
                class 关联实体类完整路径
                column 关联字段(外键)
             -->
            <many-to-many class="com.web.bean.Product" column="pid"></many-to-many>
        </set>
    </class>
</hibernate-mapping>
基于51单片机,实现对直流电机的调速、测速以及正反转控制。项目包含完整的仿真文件、源程序、原理图和PCB设计文件,适合学习和实践51单片机在电机控制方面的应用。 功能特点 调速控制:通过按键调整PWM占空比,实现电机的速度调节。 测速功能:采用霍尔传感器非接触式测速,实时显示电机转速。 正反转控制:通过按键切换电机的正转和反转状态。 LCD显示:使用LCD1602液晶显示屏,显示当前的转速和PWM占空比。 硬件组成 主控制器:STC89C51/52单片机(与AT89S51/52、AT89C51/52通用)。 测速传感器:霍尔传感器,用于非接触式测速。 显示模块:LCD1602液晶显示屏,显示转速和占空比。 电机驱动:采用双H桥电路,控制电机的正反转和调速。 软件设计 编程语言:C语言。 开发环境:Keil uVision。 仿真工具:Proteus。 使用说明 液晶屏显示: 第一行显示电机转速(单位:转/分)。 第二行显示PWM占空比(0~100%)。 按键功能: 1键:加速键,短按占空比加1,长按连续加。 2键:减速键,短按占空比减1,长按连续减。 3键:反转切换键,按下后电机反转。 4键:正转切换键,按下后电机正转。 5键:开始暂停键,按一下开始,再按一下暂停。 注意事项 磁铁和霍尔元件的距离应保持在2mm左右,过近可能会在电机转动时碰到霍尔元件,过远则可能导致霍尔元件无法检测到磁铁。 资源文件 仿真文件:Proteus仿真文件,用于模拟电机控制系统的运行。 源程序:Keil uVision项目文件,包含完整的C语言源代码。 原理图:电路设计原理图,详细展示了各模块的连接方式。 PCB设计:PCB布局文件,可用于实际电路板的制作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值