【CRM(四)】联系人管理

CRM综合练习_联系人管理

保存联系人

修改menu.jsp的链接

在这里插入图片描述

编写Action中的saveUI的方法

【CRM(四)】联系人管理_第1张图片

编写Service

【CRM(四)】联系人管理_第2张图片

编写DAO

【CRM(四)】联系人管理_第3张图片

修改添加页面(改成struts2的标签)

编写表单提交路径

在这里插入图片描述

编写Action的save方法

【CRM(四)】联系人管理_第4张图片

编写Service

【CRM(四)】联系人管理_第5张图片

编写DAO

【CRM(四)】联系人管理_第6张图片

修改联系人

修改列表页面上链接

在这里插入图片描述

编写Action的edit方法

【CRM(四)】联系人管理_第7张图片

编写Service

【CRM(四)】联系人管理_第8张图片

编写DAO

【CRM(四)】联系人管理_第9张图片

修改编辑页面提交的路径

在这里插入图片描述

编写Action的update方法

【CRM(四)】联系人管理_第10张图片

编写Service

【CRM(四)】联系人管理_第11张图片

编写DAO

【CRM(四)】联系人管理_第12张图片

删除联系人

修改链接地址

在这里插入图片描述

编写Action中的delete方法

【CRM(四)】联系人管理_第13张图片

编写Service

【CRM(四)】联系人管理_第14张图片

编写DAO

【CRM(四)】联系人管理_第15张图片

条件查询联系人

修改列表页面

【CRM(四)】联系人管理_第16张图片

修改Action中findAll的方法

【CRM(四)】联系人管理_第17张图片

解决与客户之间问题

级联删除的问题

  • 级联删除,在客户删除的时候,先查询再删除
  • 在客户的映射删进行配置
    【CRM(四)】联系人管理_第18张图片

修改客户的时候,联系人的客户的信息就丢失了

  • 因为在修改客户的时候,没有查询联系人的集合,当点击修改,修改客户(修改客户所关联联系人)因为联系人的集合是空,所以将外键置为null。
    【CRM(四)】联系人管理_第19张图片

CRM综合练习_抽取通用的DAO

通用的DAO的抽取

【CRM(四)】联系人管理_第20张图片

抽取通用的增删改的操作

  • 定义接口
    【CRM(四)】联系人管理_第21张图片
  • 定义实现类
    【CRM(四)】联系人管理_第22张图片

抽取一个查询一个的方法

  • 在接口中定义了一个查询的方法
    【CRM(四)】联系人管理_第23张图片
  • 在实现类中实现查询的方法
    【CRM(四)】联系人管理_第24张图片
    如果能把具体的类型的Class解决,查询所有,分页查询都可以解决!!!

解决方案一:在实现类的构造方法中传入一个Class

  • 编写实现类
    【CRM(四)】联系人管理_第25张图片
    在父类中提供了有参数的构造方法,在子类中继承了父类,提供构造方法,在子类的构造中,调用父类的有参数的构造。
  • 在客户的DAO的实现类中
    在这里插入图片描述
  • 在联系人的DAO的实现类中
    在这里插入图片描述
  • 有了以上这些内容,将查询的所有的方法,都抽取
    • 接口
      【CRM(四)】联系人管理_第26张图片
    • 实现类
      【CRM(四)】联系人管理_第27张图片
      如果这样抽取完成以后,那么在编写DAO的时候如果里面都是一些CRUD的操作,在DAO中只需要提供构造方法即可。
  • 客户的DAO
    【CRM(四)】联系人管理_第28张图片
  • 联系人的DAO
    【CRM(四)】联系人管理_第29张图片
    如果将通用的DAO编写的更好,连构造方法都不想要了!!!需要怎么做???
  • 泛型反射

解决方案二:通过泛型的反射抽取通用的DAO

  • 如果现在将DAO中的构造方法去掉,将父类的通用的DAO中提供无参数的构造即可,但是需要在无参数的构造中需要获得具体类型的Class才可以-----涉及到泛型的反射了。
  • 回顾一下泛型:
    • 泛型 :通用的类型。
    • <> :念为 typeof
    • List:E称为类型参数变量
    • ArrayList :Integer称为是实际类型参数
    • ArrayList :ArrayList称为参数化类型
  • 需要做的事情在父类的构造方法中获得子类继承父类上的参数化类型中的实际类型参数
  • 泛型反射的步骤:
    • 第一步:获得代表子类对象的Class
    • 第二步:查看API
      在这里插入图片描述
      • Type[] getGenericInterfaces(); :获得带有泛型的接口,可以实现多个接口。
      • Type getGenericSuperclass(); :获得带有泛型的父类,继承一个类。
    • 第三步:获得带有泛型的父类
    • 第四步:将带有泛型的父类的类型转成具体参数化的类型
    • 第五步:通过参数化类型的方法获得实际类型参数
  • 代码实现
    【CRM(四)】联系人管理_第30张图片

你可能感兴趣的:(Java,Web,CRM-客户关系管理系统的实现)