Persistence Framework
1. 什么是Framework?
楼房建好后还没有装修前就是一个Framework,这时的大厅,卧室,厕所,厨房等已经成型,里面要放置什么家具,布置得如何就根据每个人的喜好来做了。但是这个Framework事实上还存在着问题,那就是没有什么限制说我不能在厕所里放一张床,然后把厕所当作是卧室。当然,只要你喜欢就可以这么做。
传统的意义上的Framework也是这样子,比如Struts,是一个非常经典的MVC Framework,它主要是分成了三层,一是JSP等的页面表示,二是Form的数据封装,三是Action的控制跳转。但是,约定归约定,如果不加以限制,还是难免把业务逻辑写在本应该只是表现页面的JSP中,把对数据库的存取逻辑也放到Action中。。。
2. 为什么要Persistence Framework
传统的DAO模式一般都会有一个DAO interface,一个实现了DAO Interface的class。在DAO Implement class中,我们在实现的方法里写上数据存取逻辑。如果大家都按照这个规定来做的话,这的确就是一个非常完善的数据层柜架,但问题就在于,在DAO实现类里,并不能限制其它逻辑的介入,比如permission的检查,把业务逻辑写在DAO实现类里,是实际开发中常见的一个现象。
另一方面,把SQL语句写在实现类里也会令代码的可读性减少,谁也不想在java类里看到一长串的SQL语句。在原先的系统中,我们采用properties文件来给每一条SQL语句命名,再在类代码中引用那个key值。
再一方面,JDBC对查询条件的封装性并不好,Hibernate在这方面就做得比较全面,但实际项目中仍然无法快速封装。
简单而言,DAO仅仅是为了封装SQL语句对数据层的CRUD操作。在DAO的每一个方法都只做一件特定的简单的CRUD操作,比如执行一条SQL语句,得到一个ResultSet,再把这个ResultSet的值封装成要返回的一个特定对象。在这时要注意三点,一是要执行的SQL语句,二是CRUD操作,三是ResultSet的处理。
Persistence Framework就是为了解决上述问题而写的一个数据层的框架。它首先具有以下几大特性。
1) 只存在DAO interface而没有这个interface的实现类。
2) 每个方法所要执行的SQL语句可配置。
3) 每个方法的返回前可以配置特定的ResultProcessor来对从数据库中取得的ResultSet进行处理。
4) 可以有多种实现形式,例如基于JDBC,基于Hibernate,基于Toplink等。
特性先介绍这四个,以后还会陆续引出。
3. 如何实现Persistence Framework
如何执行Query语句?这跟数据库类型(SQL Server or Oracle),实现方式(JDBC or Hibernate or Toplink),Query语句的操作类型(CRUD)的不同而有不同的形式,但它们都会有一个统一的接口以下:
这里要用Command模式,根据实现方式,Query语句的操作类型,实现方式来选择所要的
PersistAction进行处理。
Visitor模式解决ResultProcessor.
Decorator模式解决Parameter Binding, Expression, dynamic query.
Pipeline技术组合所有的 PersistAction.
Query Configuration的处理
Annotation in DAO interface and Proxy
1. 什么是Framework?
楼房建好后还没有装修前就是一个Framework,这时的大厅,卧室,厕所,厨房等已经成型,里面要放置什么家具,布置得如何就根据每个人的喜好来做了。但是这个Framework事实上还存在着问题,那就是没有什么限制说我不能在厕所里放一张床,然后把厕所当作是卧室。当然,只要你喜欢就可以这么做。
传统的意义上的Framework也是这样子,比如Struts,是一个非常经典的MVC Framework,它主要是分成了三层,一是JSP等的页面表示,二是Form的数据封装,三是Action的控制跳转。但是,约定归约定,如果不加以限制,还是难免把业务逻辑写在本应该只是表现页面的JSP中,把对数据库的存取逻辑也放到Action中。。。
2. 为什么要Persistence Framework
传统的DAO模式一般都会有一个DAO interface,一个实现了DAO Interface的class。在DAO Implement class中,我们在实现的方法里写上数据存取逻辑。如果大家都按照这个规定来做的话,这的确就是一个非常完善的数据层柜架,但问题就在于,在DAO实现类里,并不能限制其它逻辑的介入,比如permission的检查,把业务逻辑写在DAO实现类里,是实际开发中常见的一个现象。
另一方面,把SQL语句写在实现类里也会令代码的可读性减少,谁也不想在java类里看到一长串的SQL语句。在原先的系统中,我们采用properties文件来给每一条SQL语句命名,再在类代码中引用那个key值。
再一方面,JDBC对查询条件的封装性并不好,Hibernate在这方面就做得比较全面,但实际项目中仍然无法快速封装。
简单而言,DAO仅仅是为了封装SQL语句对数据层的CRUD操作。在DAO的每一个方法都只做一件特定的简单的CRUD操作,比如执行一条SQL语句,得到一个ResultSet,再把这个ResultSet的值封装成要返回的一个特定对象。在这时要注意三点,一是要执行的SQL语句,二是CRUD操作,三是ResultSet的处理。
Persistence Framework就是为了解决上述问题而写的一个数据层的框架。它首先具有以下几大特性。
1) 只存在DAO interface而没有这个interface的实现类。
2) 每个方法所要执行的SQL语句可配置。
3) 每个方法的返回前可以配置特定的ResultProcessor来对从数据库中取得的ResultSet进行处理。
4) 可以有多种实现形式,例如基于JDBC,基于Hibernate,基于Toplink等。
特性先介绍这四个,以后还会陆续引出。
3. 如何实现Persistence Framework
如何执行Query语句?这跟数据库类型(SQL Server or Oracle),实现方式(JDBC or Hibernate or Toplink),Query语句的操作类型(CRUD)的不同而有不同的形式,但它们都会有一个统一的接口以下:
- interface PersistAction
- public void processQuery(String query, ParameterMap parameters, GroupOption groupOption, OrderOption orderOption, PageOption pageOption, ResultProcessor resultProcessor);
Visitor模式解决ResultProcessor.
Decorator模式解决Parameter Binding, Expression, dynamic query.
Pipeline技术组合所有的 PersistAction.
Query Configuration的处理
Annotation in DAO interface and Proxy