1.持久层概述
持久的概念理解容易,层说明了需要解耦合,
2.持久层设计
2.1解耦合
解耦合的演变过程
过程1.完成一个功能时在action中完成 1.连接,statement,statement设值 ,获取resultset 这个阶段持久化的代码嵌套在业务层,完全耦合
过程2.用配置文件配置数据库的连接参数,出现管理connection的获得和关闭的DBhelper, 并采用单例
持久层解耦合的目标:
1.应用逻辑和数据逻辑分离
2.逻辑结构和物理结构(数据库)分离
也就是持久层应该向上不与逻辑层耦合,向下应该不与数据库耦合 目的就是底层的变动不会影响到上层的实现
过程3.因为现在一个业务需要频繁操作resultset preparstatement,所以一个业务会十分繁琐复杂,所以DAO模式出现
DAO模式(Data Access Object) 包括Data Access 和 Data Domain Object 前者是封装 业务原子操作 后者是Bean的使用
DAO模式的目的:
1.数据存储逻辑分离
2.数据访问底层实现的分离 (前两点我觉得可以归为一点)
3.资源管理和调度的分离
4.数据抽象
过程4.因为要屏蔽下层数据库所以不同数据库要有不同的Dao方法实现,所以需要不同dao方法的实现,采用factory模式进行管理,
2.2资源管理模式
资源的管理主要在于 connection,preparedstatement的管理,
过程5.数据库连接池+动态代理模式,管理连接 且 因为考虑到Connection的close方法可能会被在Dao中调用,所以用动态代理使原生的connection.close()方法变成释放到连接池
过程6.statement的管理池,写法与connectionPool相同,(考虑可能出现connection已经删除,他所产生的statement还在池中的情况)(偷懒不想写这个案例了)
3.持久层设计与ORM
ORM的定义使Object/Relational Mapping 即对象-关系数据映射,定义感觉上像是DAO中的domain Object,没甚么好讲的,很好懂