联系人管理
一.保存联系人
- 修改menu.jsp的链接
- 编写Action中的saveUI的方法
- 编写Service
- 编写DAO
- 修改添加页面(改成Struts2的标签)
- 编写表单提交的路径
- 编写Action的save方法
- 编写Service ,加上事务注解
- 编写DAO
二.修改联系人
- 修改列表页面上的链接
- 编写Action的eidtUI方法
- 编写Service
- 编写DAO
- 修改编辑页面提交的路径
- 编写Action的update方法
- 编写Service
- 编写DAO
三.删除联系人
- 修改链接地址
- 编写Action中的delete方法
- 编写Service
- 编写DAO
四.条件查询联系人
- 修改列表页面
- 修改Action中findAll方法
五.解决与客户之间问题
- 级联删除的问题
- 级联删除,在客户删除的时候,先查询再删除
- 在客户的映射上进行配置 - 修改客户的时候,联系人的客户的信息丢失
- 因为在修改客户的时候,没有查询联系人的集合,当点击修改,修改客户(修改客户所关联联系人),因为联系人的集合
是空,所以将外键置为null.
抽取通用的DAO
一.通用的DAO的抽取
- 抽取通用的增删改的操作
- 定义接口 BaseDao<T>
- 定义实现类 BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T>
- 定义接口 BaseDao<T>
- 抽取一个查询一个记录的方法
- 在接口中定义一个查询的方法
- 在实现类中实现查询的方法
- 如果能把具体的类型的Class解决,查询所有,分页查询都可以解决.
- 在接口中定义一个查询的方法
- 解决方案一: 在实现类的构造方法中传入一个class
- 编写实现类
- 在父类提供了有参数的构造方法,在子类中继承了父类,提供构造方法,在子类的构造中,调用父类的有参数的构造
- 在客户的DAO的实现类中
- 在联系人的DAO的实现类中 同上
- 编写实现类
- 进一步优化: 通过泛型的反射抽取通用的DAO
- 如果将DAO中的构造方法去掉,将父类的通用的DAO中提供无参数的构造即可,但是需要获得具体类型的Class才行
- 泛型 : 通用的类型
<> : 念为 typeof
List<E> : E称为类型参数变量
ArrayList<Integer> : Integer称为是实际类型参数
ArrayList<Integer> : ArrayList<Integer> 称为参数化类型 - 泛型反射的步骤
- 获得代表子类对象的Class
- 查看API
Type[ ] getGenericInterfaces(); //获得带有泛型的接口
Type getGenericSuperclass(); //获得带有泛型的父类
- 获得带有泛型的父类
- 将带有泛型的父类的类型转成具体参数化的类型
- 通过参数化类型的方法获得实际类型参数 - 代码实现