1、CRM综合练习_联系人管理
保存联系人
修改menu.jsp的链接
编写Action中的saveUI的方法
编写Service
编写DAO
修改添加页面(改成struts2的标签,与客户查询一样)
编写表单提交路径
编写Action的save方法
编写Service
编写DAO
修改联系人
修改列表页面上链接
编写Action的edit方法
编写Service
编写DAO
修改编辑页面提交的路径
编写Action的update方法
编写Service
编写DAO
注意:在edit页面要加的隐藏标签<s:hidden name="lkm_id"/>
删除联系人
修改链接地址
编写Action中的delete方法
编写Service
编写DAO
条件查询联系人
修改列表页面
修改Action中findAll的方法
解决与客户之间问题
级联删除的问题
级联删除,在客户删除的时候,先查询再删除
在客户的映射删进行配置
修改客户的时候,联系人的客户的信息就丢失了
因为在修改客户的时候,没有查询联系人的集合,当点击修改,修改客户(修改客户所关联联系人)因为联系人的集合是空,所以将外键置为null。
2、CRM综合练习_抽取通用的DAO
通用的DAO的抽取
抽取通用的增删改的操作
定义接口
定义实现类
抽取查询一个的方法
在接口中定义了一个查询的方法
在实现类中实现查询的方法
如果能把具体的类型的Class解决,查询所有,分页查询都可以解决!!!
解决方案一:在实现类的构造方法中传入一个Class
编写实现类
在父类中提供了有参数的构造方法,在子类中继承了父类,提供构造方法,在子类的构造中,调用父类的有参数的构造。
在联系人的DAO的实现类中(与下一样)
在客户的DAO的实现类中
有了以上这些内容,将查询的所有的方法,都抽取
接口
实现类
如果这样抽取完成以后,那么在编写DAO的时候如果里面都是一些CRUD的操作,在DAO中只需要提供构造方法即可。
客户的DAO
联系人的DAO
如果将通用的DAO编写的更好,连构造方法都不想要了!!!需要怎么做???
泛型反射
解决方案二:通过泛型的反射抽取通用的DAO
如果现在将DAO中的构造方法去掉,将父类的通用的DAO中提供无参数的构造即可,但是需要在无参数的构造中需要获得具体类型的Class才可以-----涉及到泛型的反射了。
回顾一下泛型:
泛型 :通用的类型。
<> :念为 typeof
List< E > :E称为类型参数变量
ArrayList< Integer > :Integer称为是实际类型参数
ArrayList< Integer > :ArrayList<Integer>
称为参数化类型
需要做的时候在父类的构造方法中获得子类继承父类上的参数化类型中的实际类型参数
泛型反射的步骤:
第一步:获得代表子类对象的Class
第二步:查看API
Type[] getGenericInterfaces(); :获得带有泛型的接口,返回值是type[]是因为可以实现多个接口。
Type getGenericSuperclass(); :获得带有泛型的父类,返回值是type,继承一个类。
第三步:在baseDao中获得子类实现的带有泛型的父类
第四步:将带有泛型的父类的类型转成具体参数化的类型
第五步:通过参数化类型的方法获得实际类型参数
代码实现