|
|
楼主 |
发表于 2010-1-29 15:38
|
显示全部楼层
接上面的第二节
下载地址是:xz.qupan.com/down/javass_5739697.html
以下是第二节内容:
第二节重要说明 通用DAO的实现
1、泛型要解决的问题
泛型就是为了解决一个类可以处理多种对象,如List可以容纳不同的东西;那么,DAO的抽象父类可以处理不同的Model
2、应用自定义泛型
在类或接口的声明后定义泛型,并且可以用extends关键字对泛型进行边界控制
3、抽取DAO的实现
在抽象的DAO类里面实现各种增、删、改、查方法。
不同的DAO的getByCondition方法中,方法的架子都是一样的,只不过准备hql和向query里面设值,随着不同的model变化而变化,因此把他们做成抽象方法由子类实现;在父类里面由getByCondition调用
每个DAO类都已处理一种Model为主,因此,在写联表的查询和不联表的查询时,getAll和getByCondition方法中有四个地方不一样。因此,在抽象类实现了不联表的情况,如果子类想使getAll和getByCondition中联表,就必须同时实现那四个抽象方法。
4、新建泛型类的对象,必须用Class对象
这就是为什么必须把Class对象用构造方法传上去,当然,我们可以反射的读出UserDAOHibernateImpl<UserModel,UserQueryModel>中定义的第一个泛型的类,但是太复杂,在课堂上没有演示。
5、抽象的优缺点
我们使用抽象减少了重复代码,这样既可以减少简单重复的劳动,又减少了出错的机会。但是,这样做打散了DAO的代码,让程序员难窥全豹,使得程序员刚开始的时候不太习惯。不过,在真实的工作中就是这么做的,需要大家习惯。
下面分技术点来简要描述一下视频的内容:
一:泛型加强
1、以第一个月的项目为载体讲自定义泛型
2、使用泛型
3、泛型容器之间的赋值
4、自定义泛型
5、泛型类型的限定
6、自定义泛型、传递泛型和使用泛型
二:通用DAO的实现
1、泛型要解决的问题
2、应用自定义泛型
3、抽取DAO的实现
4、新建泛型类的对象,必须用Class对象
三:新版的增删改查
1、应用通用的DAO
2、真实值/表现值的转换
3、通用拦截器
4、查询条件放在列表页面上,保存查询条件,新版翻页
5、My97DatePicker日历控件的使用
6、新版的翻页
四:真实值/表现值转换深化强调,model属性和配置文件自动生成
1、各种真实值/表现值转换体现在model里面的代码
2、使用ResultSetMeta和DataBaseMetaData反射的读一个表里面的所有字段
3、自动生成model里面的属性
4、自动生成配置文件里的<property>
五:常量管理
1、使用枚举来管理枚举式真实值/表现值转换的缺点,枚举内有大量相似代码无法去掉
2、自己编写代码模拟枚举(灵感来自<<Effictive Java>>第一版)
3、使用缓存保证只反射的读取一次
4、使用taglib封装,使得action不再为页面的<select>做准备
5、constance使得项目中期再增加枚举里的数据项非常简单,同时做到了一次注册到处使用
六:入库模块
1、整个项目的大致业务
2、完整的入库模块实现
3:UUID自动生成
七:DAO条件的配置生成、自定义注解的应用
1、dao中的generateHQLWhere方法和prepareQuery方法比较机械,使用配置生成可以提高工作效率并免于错误
2、根据自定义注解的配置自动生成这些代码
3、反射读取model的所有field的时候要递归的读取
八:报修模块
1、报修模块业务
2、报修模块实现
3、派工单的反馈人是可以为null的主键,必须用左外联处理,在hql中使用临时表模拟左外联
九:抽象页面代码的重复部分
1、通用的处理下拉框选项过多问题,使用弹出页面进行按关键字查询,注意:做的是通用的,任何下拉框都可以用
2、把分页的那一大段代码抽成了taglib,使得以后方便引用
十:分配模块
1、分配模块业务
2、分配模块实现
3、改善用户体验
十一:项目总结
1、以正向的方式进行分析,分析实体、角色、单据之间的关系,以及操作的适用角色、前置条件和操作结果。
2、项目组人员构成,人员分工,人员的发展轨迹。 |
|