作者:何征天

课程视频地址:https://ke.qq.com/course/273907

1.1.   需求分析

1. 因为客户和联系人是一对多的关系,在有客户的情况下,完成联系人的添加保存操作

1.2.  技术分析之Hibernate的关联关系映射之一对多映射(重点)

1.2.1. JavaWEB中一对多的设计及其建表原则

1.2.2.  先导入SQL的建表语句

* 创建今天的数据库:createdatabase hibernate_day03;
        * 在资料中找到客户和联系人的SQL脚本

1.2.3.  编写客户和联系人的JavaBean程序(注意一对多的编写规则)

* 客户的JavaBean如下

packagecom.igeek.demo1;

import java.util.HashSet;

import java.util.Set;

publicclass Customer {

private Long cust_id    ;      //客户编号(主键)

private String  cust_name;     //    客户名称(公司名称)

private String cust_user_id;   //   负责人id

private String cust_create_id ;//  创建人id

private String cust_source   ; //客户信息来源

private String cust_industry  ;// 客户所属行业

private String cust_level  ;   // 客户级别

private String cust_linkman ;  //  联系人

private String cust_phone  ;   // 固定电话

private String cust_mobile ;   // 移动电话

//设置与多方关联的属性

private Set<Linkman> linkmans = new HashSet<>();

//省略getter和setter方法

}

* 联系人的JavaBean如下

packagecom.igeek.demo1;//

publicclass Linkman {

private Long lkm_id;//联系人编号(主键)

private String  lkm_name ;// 联系人姓名

//hibernate使用对象来做关联,不用设置外键id

//private String  lkm_cust_id ;// 客户id

private String  lkm_gender ;// 联系人性别

private String  lkm_phone ;// 联系人办公电话

private String  lkm_mobile ;// 联系人手机

private String  lkm_email ;// 联系人邮箱

private String  lkm_qq;// 联系人qq

private String  lkm_position;// 联系人职位

private String  lkm_memo ;// 联系人备注

//与一方关联的属性

private Customer customer;

//省略getter和setter方法

}

1.2.4.  编写客户和联系人的映射配置文件(注意一对多的配置编写)

* 客户的映射配置文件如下

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

<hibernate-mapping>

<class name="com.igeek.demo1.Customer" table="cst_customer">

<id name="cust_id" column="cust_id">

<generator class="native"></generator>

</id>

<property name="cust_name" column="cust_name"></property>

<property name="cust_user_id" column="cust_user_id"></property>

<property name="cust_source" column="cust_source"></property>

<property name="cust_industry" column="cust_industry"></property>

<property name="cust_level" column="cust_level"></property>

<property name="cust_linkman" column="cust_linkman"></property>

<property name="cust_phone" column="cust_phone"></property>

<property name="cust_mobile" column="cust_mobile"></property>

<!--设置与多方的关系  -->

<!--

name:javabean中set集合的名称

key:column:外键名称

one-to-many class:set集合中类的全路径

-->

<set name="linkmans">

<key column="lkm_cust_id"></key>

<one-to-many class="com.igeek.demo1.Linkman"/>

</set>

</class>

</hibernate-mapping>

* 联系人的映射配置文件如下

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

<hibernate-mapping>

<class name="com.igeek.demo1.Linkman" table="cst_linkman">

<id name="lkm_id" column="lkm_id">

<generator class="native"></generator>

</id>

<property name="lkm_name" column="lkm_name"></property>

<!--

外键字段使用many-to-one节点设置,这里不用写

<property name="lkm_cust_id" column="lkm_cust_id"></property> -->

<property name="lkm_gender" column="lkm_gender"></property>

<property name="lkm_phone" column="lkm_phone"></property>

<property name="lkm_mobile" column="lkm_mobile"></property>

<property name="lkm_email" column="lkm_email"></property>

<property name="lkm_qq" column="lkm_qq"></property>

<property name="lkm_position" column="lkm_position"></property>

<property name="lkm_memo" column="lkm_memo"></property>

<!-- 设置多对一关系 -->

<!-- name:javabean的属性名称

class:属性的类的全路径

colum:外键名称 -->

<many-to-one   name="customer" class="com.igeek.demo1.Customer" column="lkm_cust_id"></many-to-one>

</class>

</hibernate-mapping>

1.2.5.  配置文件和具体的说明

* 一方
            <!--JavaBean对象中有Set集合,必须要配置Set集合,配置了
                    Set        name属性:Set集合的名称
                    key        column:外键的名称
                    one-to-many  class:Set集合中类的全路径
            -->
            <setname="linkmans">
                <keycolumn="lkm_cust_id"/>
                <one-to-manyclass="com.igeek.demo1.Linkman"/>
            </set>
        
        * 多方
            <!--配置的是多方 ,使用的是many-to-one标签
                name        JavaBean的属性的名称
                class        属性的类的全路径
                column        外键的名称
            -->
    <many-to-one name="customer" class="com.igeek.demo1.Customer"column="lkm_cust_id"/>

1.2.6.  hibernate.cfg.xml文件配置信息

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-configuration PUBLIC

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

<session-factory>

<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

<property name="hibernate.connection.url">jdbc:mysql:///hibernate_day03</property>

<property name="hibernate.connection.username">root</property>

<property name="hibernate.connection.password">123456</property>

<property name="hibernate.dialect org.hibernate.dialect.MySQLDialect"></property>

<!-- 打印sql语句的配置 -->

<property name="hibernate.show_sql">true</property>

<property name="hibernate.format_sql">true</property>

<property name="hibernate.hbm2ddl.auto">update</property>

<!-- 把session放在线程中 -->

<property name="hibernate.current_session_context_class">thread</property>

<!-- 关联xml配置文件 -->

<mapping resource="com/igeek/demo1/Customer.hbm.xml"/>

<mapping resource="com/igeek/demo1/Linkman.hbm.xml"/>

</session-factory>

</hibernate-configuration>

1.2.7.  进行双向关联进行数据的保存

packagecom.igeek.demo1;

import org.hibernate.Session;

import org.hibernate.Transaction;

import org.junit.Test;

importcom.igeek.util.HibernateUtils;

publicclass TestOne2Many {

//双向关联

@Test

publicvoid run1(){

Session session = HibernateUtils.getCurrentSession();

Transaction tr = session.beginTransaction();

//新建一个客户

Customer c = new Customer();

c.setCust_name("小凤");

//新建2个联系人

Linkman m1 = new Linkman();

m1.setLkm_name("小凤的男朋友1");

Linkman m2 = new Linkman();

m2.setLkm_name("小凤的男朋友2");

//双向关联

c.getLinkmans().add(m1);

c.getLinkmans().add(m2);

m1.setCustomer(c);

m2.setCustomer(c);

//开始保存

session.save(c);

session.save(m1);

session.save(m2);

tr.commit();

}

}

1.2.8.  测试

这种保存要求:必须双方都建立关系,而且都要执行保存操作.

【极客营】Hibernate完成CRM的联系人的保存操作-需求分析相关推荐

  1. “StarRocks 极客营” 重磅来袭,和技术大牛一起推开数据库梦想之门!

    操作系统.编译器.数据库是软件工程师的梦之所向,对于大多数人而言,却是近在眼前.远在天边: 你是否曾渴望加入 Linux 这样伟大的社区,然觉门槛太高无从下手? 你是否也曾想象参与开发 MySQL 这 ...

  2. All Eyes on Docs! 练就火眼金睛,就来StarRocks 极客营

    开放源代码运动的主要领导者--埃里克·雷蒙(Eric Steven Raymond)在他出版的<大教堂与集市>中描述了这样一个精彩的观点:只要有足够多的眼球关注,就可让所有软件缺陷浮现.他 ...

  3. StarRocks极客营 | 90天,17名新晋贡献者,SQL Planner 实战回顾

    若能体验一个字符串的 SQL 怎么一步步在 StarRocks 被执行起来,对于 OLAP 开发者来说,能大大帮助理解整个框架和系统流程. 近日,由 StarRocks 社区举办的 SQL Plann ...

  4. 首篇极客解题报告意外泄出!亚军竟有神操作?

    导语 | 腾讯云+社区联合腾讯码客.腾讯安全平台部全新打造的创新赛事[腾讯极客挑战赛 | 鹅罗斯方块]正式落幕.玩鹅罗斯方块,玩点不一样!在短暂10天内,4570名参赛者或以自己的硬核技术诠释着 &q ...

  5. 【最强大脑】全球脑王的极客挑战赛之路:1413876分夺冠如何炼成?

    导语 | 在腾讯云+社区联合腾讯码客.腾讯安全平台部全新打造的创新赛事[腾讯极客挑战赛 | 鹅罗斯方块]中,4570名参赛者为我们带来前所未有.异彩纷呈的作品.一场技术竞技,把一群志同道合的开发者聚集 ...

  6. 脉脉因“App 整改下架”事件致歉;阿里云全年营收超 600 亿;腾讯防大量群消息骚扰专利获授权|极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  7. 小米否认“造车”;微软中国回应关闭实体直营店;Angular 10 发布 | 极客头条...

    整理 | 屠敏 头图 | CSDN 下载自东方 IC 快来收听极客头条音频版吧,智能播报由出门问问「魔音工坊」提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极 ...

  8. 任正非回应“华为营收下降300亿美元”;今日头条澄清「通讯录不属于用户隐私」;Kotlin 1.3.40发布 | 极客头条...

    快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有 ...

  9. 【AI创造营】是极客就坚持一百秒?

    因为项目需要用到摄像头和显示效果,所以无法在aistudio上直接运行,Fork项目后可见可运行文件,下面直接上效果 [AI创造营]是极客就坚持100秒 参赛作品名 是男人就坚持100秒(DodgeF ...

  10. 极客日报第124期:脉脉因“App 整改下架”事件致歉;阿里云全年营收超 600 亿;腾讯防大量群消息骚扰专利获授权

    一分钟速览新闻点! 腾讯防大量群消息骚扰专利获授权 脉脉因"App 整改下架"事件致歉:将进行排查整改 快手灰度测试同城团购功能,入局本地生活服务赛道 字节跳动在重庆成立今日头条公 ...

最新文章

  1. 2020人工神经网络第一次作业-参考答案第二部分
  2. [4.9福建四校联考]
  3. java开发流程图_Java 详解 JVM 工作原理和流程
  4. 排列出所有子串暴力递归
  5. 浏览器对F5的微观处理
  6. 微软将在英国投入20亿Bing广告 挑战Google的统治地位
  7. Flutter之基本数据类型测试
  8. 2009年广东省大学生程序设计竞赛 A
  9. [HttpPost] vs [AcceptVerbs(HttpVerbs.Post)]
  10. 英特尔处理器曝出重大安全漏洞,迫使 Linux 和 Windows 更新设计
  11. 【数学】【筛素数】Miller-Rabin素性测试 学习笔记
  12. 网银--U盾等--支付宝等总结
  13. 常忘知识点二-混合器
  14. malloc与calloc的区别及实例
  15. git版本回退命令_刘先生
  16. 电路邱关源学习笔记——1.5电压源和电流源
  17. 动态、静态和伪静态url路径如何分辨
  18. 无internet,安全
  19. ORA-38029 ORA-20005
  20. 石家庄医学高等专科学校计算机试题,石家庄医学高等专科学校高职单招医学类对口职业测试题...

热门文章

  1. 2018年6月前端面试经历(上)
  2. python 分类_python如何分类这样子的数据?
  3. bat批处理中怎样用while循环
  4. 为何将这一项技术称为人工智能的“读心术”
  5. freebsd的一般配置
  6. 云机房与计算机考试,计算机等级考试中云桌面机房的优势浅析
  7. 数论——快速幂全解(模平方根算法)
  8. 我的移动开发春季历程,已整理成文档
  9. React 生命周期详细解析及新旧对比
  10. android模拟器如何切换输入法