天天看点

dao代码重构

存在的问题

  1. 在DAO当中执行的保存方法,更新方法,删除这些DML操作有太多重复代码

    图示

  2. dao代码重构
  3. 重构代码原则

    2.1同一个类中

    在一个类当中有多个方法当中有太多相同的代码

    不同的地方通过参数传递进去

    把它们抽到一个方法当中

    2.2不同类中

    不同类当中有共同的代码给抽取到一个新类当中。

    大家同时共享该类中的内容

抽取DML方法

  1. 设计一个方法
  2. 要求传入两个参数

    一个sql语句

    一个参数

    第一个参数sql语句模板

    第二个参数为可变参数,设置语句参数值

  3. 返回值

    返回值为int,受影响的行数。

    图示

    DAO重构示意图

  4. dao代码重构
  5. 调用示意图
  6. dao代码重构

抽取DQL

  1. 抽取之前的代码
  2. dao代码重构
  3. 抽取之后的代码
  4. dao代码重构
  5. 遗留问题

    查询的时候,只能查询学生

    可以使用泛型解决

  6. 处理结果集的时候

    4.1 每一个都封装成了student对象, 这写死了

    4.2 原因

    不知道封装成什么类型的对象

    就不应该处理结果集

    4.3 解决办法

    把处理结果集的行为交给每个DAO

    为了规范每个DAO的处理结果集,大家都叫同样的名字,这样在模板中就可以调用同一个名称

    定义一个处理结果集的接口

    4.4 代码实现

    1.定义一个接口

    声明一个处理结果集方法

  7. dao代码重构
  8. 2.在具体DAO当中实现接口

    实现处理结果集方法

  9. dao代码重构
  10. 3.创建一个接口实现对象传给查询方法
  11. dao代码重构
  12. 4.在查询方法当中调用处理结果集方法
  13. dao代码重构
  14. 总流程图
  15. dao代码重构
  16. 处理结果集泛型

    1.直接定义为T

    处理所有结果集都必须得要返回List

    有的时候没有必要返回List,想要查询的仅仅是一个结果整数,此时还必须得要从List当中出来

    2.有调用者自己来决定返回什么内容

    统一规定返回类型为T类型,调用者使用时去决定是什么类型

  17. dao代码重构
  18. 3.实现类当中实现接口时,要指定返回什么类型
  19. dao代码重构
  20. 4.声明方法时,声明返回值为一个泛型类型,具体是什么类型,有参数来指定
  21. dao代码重构
  22. 整体示意图
  23. 获取总人数