关系数据库表格关系以及hibernate的配置

一、表与表之间的关系回顾

图片.png

一对多建表时,通过外键来建表:

图片.png

多对多建表时,要维护第三张表:

图片.png

二、hibernate配置关系数据库之间的关系

(1)配置一对多的映射关系

1、一般一个实体类对应一个映射文件
客户有一个映射文件,联系人有一个映射文件
联系人:

public class LinkMan {
    private Integer lkm_id;
    private String lkm_name;
    private String lkm_gender;
    private String lkm_phone;
    /**
     * 一个联系人只属于一个客户
     */
    private Customer customer;
//省略get和set
}

顾客:

public class Customer {
    private Integer c_id;
    private String c_name;
    private String c_source;
    private String c_level;
    private String c_phone;
    private String c_mobile;
    /***
     * 在客户实体类类里面表示多个联系人,一个客户有多个联系人 hibernate要求使用集合表示多的数据,使用set
     */
    private Set<LinkMan> lkmSet = new HashSet<LinkMan>();
//省略get和set
}

2、把映射最基本的配置完成
customer.hbm.xml

<class name="com.winney.entiity.Customer" table="t_customer">
        <id name="c_id" column="c_id">
            <!-- 该id作为主键并且自增加1 -->
            <generator class="native"></generator>
        </id>
        <property name="c_name" column="c_name"></property>
        <property name="c_source" column="c_source"></property>
        <property name="c_level" column="c_level"></property>
        <property name="c_phone" column="c_phone"></property>
        <property name="c_mobile" column="c_mobile"></property>

linkMan.xml

<hibernate-mapping>
    <class name="com.winney.entiity.LinkMan" table="t_linkMan">
        <id name="lkm_id" column="lkm_id">
            <!-- 该id作为主键并且自增加1 -->
            <generator class="native"></generator>
        </id>
        <property name="lkm_name" column="lkm_name"></property>
        <property name="lkm_gender" column="lkm_gender"></property>
        <property name="lkm_phone" column="lkm_phone"></property>

3、在映射文件中,配置一对多的关系
linkMan.xml:
<many-to-one name="customer" column="clid" class="com.winney.entiity.Customer"></many-to-one>
customer.hbmxml:

<set name="lkmSet">
            <key column="clid"></key>
            <one-to-many class="com.winney.entiity.LinkMan"/>
        </set>

三、一对多级联操作

1、一对多级联保存的复杂方法
首先
要创建两个实体类对象
然后
用代码建立两者之间的联系
最后
用session分别保存两个实体
2、级联保存的简单方法
首先
配置文件,在那那一方配置
<set name="lkmSet" cascade="save-update">
然后
代码操作只针对多的那一方写就好了,但是也是要创建实体类对象,差别就是可以不用session保存一的那一方。
代码实现如下:

ts = session.beginTransaction();
            LinkMan linkman = new LinkMan();
            linkman.setLkm_name("联系人5");
            linkman.setLkm_phone("3785555");
            linkman.setLkm_gender("男");
            Customer customer = new Customer();
            customer.setC_name("顾客4");
            customer.setC_phone("37409569");
            customer.setC_mobile("1596666");
            customer.setC_source("百合网");
            // 建立联系
            customer.getLkmSet().add(linkman);
            // 保存
            session.save(customer);
            ts.commit();
图片.png

inverse可以提高性能,inverse为true时表示其中一方对外键的修改依赖另一方;

ts = session.beginTransaction();
            ts.begin();
            Customer customer = (Customer) session.get(Customer.class, 11);
            LinkMan linkman = (LinkMan)session.get(LinkMan.class, 15);
            customer.getLkmSet().add(linkman);
            linkman.setCustomer(customer);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容