存在的问题
- 在DAO当中执行的保存方法,更新方法,删除这些DML操作有太多重复代码
图示
- 重构代码原则
2.1同一个类中
在一个类当中有多个方法当中有太多相同的代码
不同的地方通过参数传递进去
把它们抽到一个方法当中
2.2不同类中
不同类当中有共同的代码给抽取到一个新类当中。
大家同时共享该类中的内容
抽取DML方法
- 设计一个方法
- 要求传入两个参数
一个sql语句
一个参数
第一个参数sql语句模板
第二个参数为可变参数,设置语句参数值 - 返回值
返回值为int,受影响的行数。
图示
DAO重构示意图
调用示意图
抽取DQL
-
抽取之前的代码
-
抽取之后的代码
-
遗留问题
查询的时候,只能查询学生
可以使用泛型解决 -
处理结果集的时候
4.1 每一个都封装成了student对象, 这写死了
4.2 原因
不知道封装成什么类型的对象
就不应该处理结果集
4.3 解决办法
把处理结果集的行为交给每个DAO
为了规范每个DAO的处理结果集,大家都叫同样的名字,这样在模板中就可以调用同一个名称
定义一个处理结果集的接口
4.4 代码实现
1.定义一个接口
声明一个处理结果集方法
2.在具体DAO当中实现接口
实现处理结果集方法
3.创建一个接口实现对象传给查询方法
4.在查询方法当中调用处理结果集方法
总流程图
-
处理结果集泛型
1.直接定义为T
处理所有结果集都必须得要返回List
有的时候没有必要返回List,想要查询的仅仅是一个结果整数,此时还必须得要从List当中出来
2.有调用者自己来决定返回什么内容
统一规定返回类型为T类型,调用者使用时去决定是什么类型
3.实现类当中实现接口时,要指定返回什么类型
4.声明方法时,声明返回值为一个泛型类型,具体是什么类型,有参数来指定
整体示意图
-
获取总人数