Hibernate第三天

1. 多对多的关联映射

  1. 列子:程序员开发程序
  2. 两个一对多的关系就构成了多对多的关系
  3. 代码演示:

     Project的一方的配置
    
    <!--配置的是多对多的集合映射-->
    <set name="devs" table="t_relation" cascade="all">
       <!--上面的这个key你记住就是映射的当前的类的主键-->
        <key column="pro_id"></key>
        <!--配置的是相关联的另外一张表
            column:配置的是对方的主键在关系表中映射的这个值的列名
            class:配置的是对方的这个名字
        -->
        <many-to-many column="dev_id" class="Developer"></many-to-many>
    </set>
     Developer一方的配置
    
     <!--配置的是多对多的集合映射-->
    <set name="pros" table="t_relation" cascade="all">
       <!--上面的这个key你记住就是映射的当前的类的主键-->
        <key column="dev_id"></key>
        <!--配置的是相关联的另外一张表
            column:配置的是对方的主键在关系表中映射的这个值的列名
            class:配置的是对方的这个名字
        -->
        <many-to-many column="pro_id" class="Project"></many-to-many>
    </set>
    注意:在实际开发中many to many 只需要配置一方 不存在谁维护谁的说法
    

2. 继承映射

  1. 普通继承映射:animal—>dog

       <hibernate-mapping package="com.qf.extend2">
        <class name="Dog" table="t_dog">
            <!--配置的是表里面的主键-->
            <id name="id" type="java.lang.Integer">
                <generator class="native">
                </generator>
            </id>
            <!--配置的是普通的列-->
            <property name="color"></property>
            <property name="name"></property>
            <property name="num"></property>
        </class>
       </hibernate-mapping>
    
  2. 所有子类对应一张表:只有分类才能知道谁是谁的数据

    <hibernate-mapping package="com.qf.extend3">
        <class name="Animal" table="t_animal_01">
            <!--配置的是表里面的主键-->
            <id name="id" type="java.lang.Integer">
                <generator class="native">
                </generator>
            </id>
    
    
            <!-- 下面就配置一个非公共的 -->
            <!--首先的整个分类
                                   下面这个就是分类的这个列
            -->
            <discriminator column="type_" length="30" type="string"></discriminator>
    
            <!--配置的是普通的列-->
            <property name="color"></property>
            <property name="name"></property>
    
            <!--分别来配置我们的 dog 和  fish了-->
            <subclass name="Dog" discriminator-value="dog_">
               <!--要给这个孩子配置个类型-->
               <property name="num" type="string"></property>
            </subclass>
    
            <!--配置鱼的信息-->
            <subclass name="Fish" discriminator-value="fish_">
               <property name="fishCoatCount" type="java.lang.Integer"></property>
            </subclass> 
    
        </class>
    </hibernate-mapping>
    
  3. 子类以外键的形式连接:注意两点 主键的不能使用自增长 使用的是join-class 来进行分表的






            <!-- 下面就配置一个非公共的 -->
            <!--首先的整个分类
                                   下面这个就是分类的这个列
            -->
            <discriminator column="type_" length="30" type="string"></discriminator>
    
            <!--配置的是普通的列-->
            <property name="color"></property>
            <property name="name"></property>
    
            <!--分别来配置我们的 dog 和  fish了-->
            <subclass name="Dog" discriminator-value="dog_">
               <!--要给这个孩子配置个类型-->
               <property name="num" type="string"></property>
            </subclass>
    
            <!--配置鱼的信息-->
            <subclass name="Fish" discriminator-value="fish_">
               <property name="fishCoatCount" type="java.lang.Integer"></property>
            </subclass> 
    
        </class>
    </hibernate-mapping>
    
  4. 不是使用普通类的继承映射,第一种要配置很多文件,所有我们采用union-class的方式来配置子类

        <hibernate-mapping package="com.qf.extend5">
        <!-- abstract="true":这个表示的是不对应表  -->
        <class name="Animal" abstract="true">
            <!--配置的是表里面的主键-->
            <id name="id" type="string">
                <generator class="assigned">
                </generator>
            </id>
    
            <!--配置的是普通的列-->
            <property name="color"></property>
            <property name="name"></property>
            <!--接下来就是配置加表的问题-->
            <union-subclass name="Dog" table="t_dog_03">
               <property name="num"></property>
            </union-subclass>
            <!--下面就配置鱼了-->
            <union-subclass name="Fish" table="t_fish_03">
               <property name="fishCoatCount"></property>
            </union-subclass>
    
        </class>
     </hibernate-mapping>
    

3.一对一映射

  1. 列子:人<——————->身份证
  2. 代码:

       <hibernate-mapping package="com.qf.one2one">
        <class name="IdCard" table="t_idcard">
            <!--配置的是表里面的主键-->
            <id name="cardId" type="java.lang.Integer">
                <generator class="native">
                </generator>
            </id>
    
            <!--配置的是普通的列-->
            <property name="cardNum"></property>
    
            <!--下面配置的是引用主键的这一方-->
            <many-to-one name="people" column="p_id" class="People" cascade="all"></many-to-one>
        </class>
    </hibernate-mapping>
    
    
      People的配置
    
       <hibernate-mapping package="com.qf.one2one">
        <class name="People" table="t_people">
            <!--配置的是表里面的主键-->
            <id name="pId" type="java.lang.Integer">
                <generator class="native">
                </generator>
            </id>
    
            <!--配置的是普通的列-->
            <property name="name"></property>
    
    
            <!--接下来应该配置一对一的映射-->
            <one-to-one name="idCard" class="IdCard" cascade="all"></one-to-one>
    
        </class>
    </hibernate-mapping>
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值