`

基于iBatis的JPetStore源码的研究(一)

    博客分类:
  • java
阅读更多

最近没事想研究研究ibatis开源项目,无意间发现了jpetstore。

1:到官网http://ibatis.apache.org/下载jpetstore5.0

2:把项目导入到myeclipse中。

3:打开src包会发现如下包,JPetStore分层分的特别的细。

com/ibatis/jpetstore/domain
        真正的业务实体类,应该属于business层面.
com/ibatis/jpetstore/persistence
        该包属于持久层,包括DaoConfig.java以及Dao.xml,DAO的初始化配置文件.
com/ibatis/jpetstore/persistence/iface
        接口,针对BO(Business Object)的接口,例如AccountDao.java里面定义了实现DAO对Account对象的一些操作方法以待实现.
com/ibatis/jpetstore/persistence/sqlmapdao
        接口的实现,跟iface包里面的接口一一对应,例如AccountSqlMapDao.java就实现了AccountDao.java接口里面定义的所有映射或者操作方法.

com/ibatis/jpetstore/presentation
       
 该包我觉得应该属于显示层,这个包里面都是FormBean,例如AccountBean.java.为Account定义了FormBean.
com/ibatis/jpetstore/service
        为类操作提供的业务类,例如AccountService类就提供了很多对Account等操作的实用方法,这样在AccountBean里面就可以轻松使用了.

com/ibatis/jpetstore/persistence/sqlmapdao/sql
        很简单,每个实体类大致映射到数据库中的一张表,对该库表可能进行的所有sql操作都在这个包里面进行定义.包括对象和表列映射等等.

/properties
        不用说了,配置文件而已.    

/ddl

       建库和建表的sql脚本。(oracle,mysql、mssql、postgres、hsql等数据库)


一、表现层:

BeanAction技术成功地将Action和ActionForm的职责展平,融入到一个类中。它也可以使你从对session、request这样特定于Web的组件的直接访问中解脱出来。这种类型的架构不禁让我们想起了WebWork和JSF。BeanAction技术所以能够将Action和ActionForm的职责展平,是通过一些关键组件完成的:首先是BeanAction类,它扩展了Struts的Action类、BaseBean类,以及ActionContext类。理解这些组件对于理解BeanAction技术如何工作非常重要,

BeanAction ---->ActoinContext

     |

BaseBean ————>AbstractBean------>AccountBean

   

1  BaseBean

在深入研究ActionContext类和BeanAction类之前,理解BaseBean类的功用非常重要。BaseBean扩展了ValidatorActionForm以允许进行标准的Struts验证。有了BaseBean,在自己的应用程序中就只需要扩展它,而再不需要去直接扩展ActionForm了。应该在BaseBean扩展类中包含你需要的属性,就像一个ActionForm通常所作的那样。Struts会像填充ActionForm一样地去填充BaseBean,因为BaseBean就是ActionForm。唯一的区别就在于你的BaseBean扩展类中的页面行为处理方法可以使用一种更为简单的签名:public String methodName()。

2  BeanAction

我们将要介绍的下一个类就是BeanAction类。该类有两个职责。第一,它负责填充Action- Context。其次,它负责将页面行为调用路由到你的BaseBean扩展类中对应的页面行为处理方法上,并且将该方法返回的字符串转化为一个Struts的ActionForward。这也就是为何BaseBean的页面行为处理方法的签名中可以不出现特定于Struts组件的原因所在。当需要决定调用你的BaseBean扩展类中的哪个页面行为处理方法时,BeanAction类会在两个不同的地方查找。首先,它查看Struts配置文件中的动作映射(action mapping)的parameter属性值,以确定你是否显式指定了页面行为与处理方法的对应关系。如果parameter取值非空且不为*(即取值为一个有意义的字符串),则调用BaseBean扩展类中方法名为parameter值的方法;如果parameter取值为*,则不调用BaseBean扩展类中的任何处理方法,而是直接使用name取值为success的forward子元素;如果parameter取值为空或不存在,那么BeanAction会查看path,然后使用其最后一个“/”后的字符串作为BaseBean扩展类中的页面行为处理方法名并调用该方法。例如,对如下代码,就将调用orderBean中的checkOut方法:

<action path="/cart/checkOut" type="com.ibatis.struts.BeanAction"

name="orderBean" scope="session" validate="false">

<forward name="success" path="/order/ViewOrder.jsp"/>

</action>

3  ActionContext

最后,ActionContext用于将你从特定的Web语义中解脱出来。它使你对请求(request)、参数(parameter)、cookies、会话(session)和应用程序(application)这些对象的访问都能够通过一个Map接口完成。这就使你能够减少与Web层的直接依赖关系。ActionContext中的大多数方法可以使你成功地实现与Struts以及Servlet API的隔离。但ActionContext也提供了直接访问Http- ServletRequest和HttpServletResponse对象的方法,当你需要访问它们的时候可以使用。

使用Action Context技术有几个好处。第一,再不需要花时间去将一个ActionForm对象转换为其某个扩展类型了。原因就在于现在的Action就是ActionForm。你只需要直接访问Base- Bean扩展类的实例中的各个特性。其次,那些页面行为处理方法的复杂性大大降低了。通常,Struts的页面行为处理方法(即Action类的execute方法)需要接收4个参数:HttpServletRequest、HttpServletResponse、ActionForm和ActionMapping,并且要求返回一个ActionForward。而BeanAction的页面行为处理方法则远远不需要那么复杂,它不需要任何参数,只需要返回一个字符串。第三,单元测试一个简单的bean毕竟要比单元测试一个ActionForm和Action简单得多。当然可以使用MockObject和StrutsTestCase来对Action类进行彻底的测试。但是,仅仅测试一个bean肯定还是要简单得多。最后,因为BeanAction架构与现存的Struts应用程序协同工作得很好,而BeanAction技术的语意与新一代框架是一致的,这就使你能够轻松地将应用程序的架构从现在的Struts转换为某个新一代框架而不会破坏你之前所有的辛苦劳动。

<!-- page -->
分享到:
评论

相关推荐

    部署IBatis例子JPetstore源码-MySql的JDBC库导入Tomcat6中(第四步)

    NULL 博文链接:https://llhdf.iteye.com/blog/268601

    springMVC+mybatis+jpetstore工程源码

    【标题】"springMVC+mybatis+jpetstore工程源码"揭示了这是一个结合了SpringMVC、MyBatis和jpetstore示例项目的工程,主要用于演示如何在实际开发中整合这三个技术。SpringMVC是Spring框架的一个模块,用于处理Web...

    ibatis入门,Ibatis开发指南,JPetStore-5.0

    JPetStore是iBatis的一个经典示例应用,它是一个在线宠物商店,展示了iBatis如何与Spring框架一起工作。在这个项目中,你可以看到如何定义Mapper接口,编写SQL Map文件,以及如何在Java代码中调用这些接口进行...

    JPetStore-5.0.zip_JPETSTO_jpetstore-5_jpetstore5_jpetstore5.0_jp

    《JPetStore-5.0:一个基于iBatis的开源电商示例解析》 JPetStore-5.0是一个著名的开源项目,它基于iBatis数据持久层框架,为开发者提供了一个完整的电子商务应用程序示例。这个项目由Apache Software Foundation...

    Spring+EasyJWeb+iBatis版j2ee在线购物jpetstore系统源码

    Spring+EasyJWeb+iBatis版j2ee在线购物jpetstore系统,业务层及持久层使用springframework上的jpetsotre源码,表示层使用EasyJWeb,该系统是一个简单的J2EE网上商店系统,包括商品列表、购物车、用户管理、在线订单...

    ibatis源码及实例

    iBATIS一词来源于“internet”和“abatis”的组合,是一个由Clinton Begin在2001年发起的开放源...iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO),同时还提供一个利用这个框架开发的JPetStore实例。

    JPetStore4.0.5

    JPetStore4.0.5是一个基于Java的开源电子商务应用,它展示了如何有效地利用Ibatis和Struts框架构建一个简单而实用的在线商店系统。这个版本在设计上保持了简洁性,非常适合小型项目的需求,为开发者提供了快速搭建...

    MyBatis For .NET 源码

    iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO),同时还提供一个利用这个框架开发的JPetStore实例. 现在我们能从IBATIS项目中能分别看到衍生出来两个不同的版本.Net和Java. 当然这也是得益于开源...

    SQL+Jpetstore配置

    首先,从官方站点下载JPetStore 5.0源码包:[ibatis.apache.org](http://ibatis.apache.org/)。解压到指定位置,例如`D:\jpetstore`。 **2. 创建项目** 使用MyEclipse创建一个新的Web项目,命名为`jpetstore`。 *...

    ibatis,strust1.2结合开发的项目成品

    本项目"网上宠物店jpetstore"正是基于这两款强大的工具进行集成开发,旨在提供一个完整的、可运行的示例,帮助开发者理解和掌握它们的协同工作原理。 首先,让我们来了解一下Ibatis。Ibatis,原名MyBatis,是一个...

    jpetstore-3-1-1

    《jpetstore-3-1-1:一个Java EE电子商务示例应用的探索》 "jpetstore-3-1-1"是一个经典的Java EE应用示例,它由Apache Struts项目提供,用于演示如何构建一个完整的电子商务网站。这个项目在Java社区中广泛被用作...

    JAVA D.I.Y Forum-开源

    jdForum是由struts和ibatis程序基于ibatis jpetstore结构制作的,并将图块与JSTL和User-define Taglib混合在一起进行重新构建,jdForum提供了JSP源码,用于有关STRUTS和IBATIS框架以及JSTL,图块的自学

    springmvc深入解析.pdf

    Spring MVC是一个基于模型-视图-控制器(MVC)模式的Web应用程序框架,是Spring Framework的一部分。它提供了一个灵活的方式来构建Web应用程序,使得开发者可以轻松地创建复杂的Web应用程序。 业务层主要的类和接口...

    配置事务通知

    iBatis是一个SQL映射框架,而Spring则提供了一种强大的事务管理能力,特别是声明式的事务管理,允许开发者通过注解或XML配置来声明事务边界,无需显式控制事务开始和结束。 2. "struts2+hibernate+spring+ibatis+...

Global site tag (gtag.js) - Google Analytics