Persistence Framework

 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)的不同而有不同的形式,但它们都会有一个统一的接口以下:
  1. interface PersistAction
  2. public void processQuery(String query, ParameterMap parameters, GroupOption groupOption, OrderOption orderOption, PageOption pageOption, ResultProcessor resultProcessor);
这里要用Command模式,根据实现方式,Query语句的操作类型,实现方式来选择所要的 PersistAction进行处理。

Visitor模式解决ResultProcessor.

Decorator模式解决Parameter Binding, Expression, dynamic query.

Pipeline技术组合所有的 PersistAction.

Query Configuration的处理

Annotation in DAO interface and Proxy
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis is a first class persistence framework with support for custom SQL, stored procedures and advanced mappings. MyBatis eliminates almost all of the JDBC code and manual setting of parameters and retrieval of results. MyBatis can use simple XML or Annotations for configuration and map primitives, Map interfaces and Java POJOs (Plain Old Java Objects) to database records. Contents What is MyBatis? .. 5 Getting Started ...... 5 Building SqlSessionFactory from XML ............. 5 Building SqlSessionFactory without XML ........ 6 Acquiring a SqlSession from SqlSessionFactory ............. 6 Exploring Mapped SQL Statements . 7 A Note about Namespaces........... 8 Scope and Lifecycle .......... 9 Mapper Configuration XML  10 properties ........ 11 settings ............ 12 typeAliases ...... 13 typeHandlers ... 14 objectFactory .. 15 plugins ............. 16 environments .. 17 transactionManager .... 18 dataSource .. 19 mappers .......... 21 SQL Map XML Files ............. 21 select  22 insert, update, delete ...... 24 sql ..... 26 Parameters ...... 26 MyBatis 3 - User Guide 5 November 2010 4 resultMap ........ 28 Advanced Result Mapping ......... 30 id, result ...... 32 Supported JDBC Types  33 constructor .. 33 association .. 34 collection ..... 37 discriminator .............. 40 cache  41 Using a Custom Cache . 43 cache-ref ......... 44 Dynamic SQL ....... 44 if ....... 44 choose, when, otherwise  45 trim, where, set .............. 45 foreach ............ 47 Java API  49 Directory Structure ........ 49 SqlSessions ...... 50 SqlSessionFactoryBuilder ........... 50 SqlSessionFactory....... 52 SqlSession .... 54 SelectBuilder ....... 60 SqlBuilder ............ 63

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值