Terry.Li-彬

虚其心,可解天下之问;专其心,可治天下之学;静其心,可悟天下之理;恒其心,可成天下之业。

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  143 随笔 :: 344 文章 :: 130 评论 :: 0 Trackbacks

 

将此文章收藏到豌豆网

2.4. 代码剖析

下面就让我们开始进一步分析JpetStore4.0的源代码,为下面的改造铺路。BeanAction.java是唯一一个Struts action类,位于com.ibatis.struts包下。正如上文所言,它是一个通用的控制类,利用反射机制,把控制转移到form bean的某个方法来处理。详细处理过程参考其源代码,简单明晰。

Form bean类位于com.ibatis.jpetstore.presentation包下,命名规则为***Bean。Form bean类全部继承于BaseBean类,而BaseBean类实际继承于ActionForm,因此,Form bean类就是Struts的 ActionForm,Form bean类的属性数据就由struts框架自动填充。而实际上,JpetStore4.0扩展了struts中ActionForm的应用: Form bean类还具有行为,更像一个BO,其行为(方法)由BeanAction根据配置(struts-config.xml)的URL来调用。虽然如此,我们还是把Form bean类定位于表现层。Struts-config.xml的配置里有3种映射方式,来告诉BeanAction把控制转到哪个form bean对象的哪个方法来处理。以这个请求连接为例http://localhost/jpetstore4/shop/viewOrder.do

1. URL Pattern

<action path="/shop/viewOrder" type="com.ibatis.struts.BeanAction"
                        name="orderBean" scope="session"
                        validate="false">
                        <forward name="success" path="/order/ViewOrder.jsp"/>
                        </action>


此种方式表示,控制将被转发到"orderBean"这个form bean对象 的"viewOrder"方法(行为)来处理。方法名取"path"参数的以"/"分隔的最后一部分。

2. Method Parameter

<action path="/shop/viewOrder" type="com.ibatis.struts.BeanAction"
                        name="orderBean" parameter="viewOrder" scope="session"
                        validate="false">
                        <forward name="success" path="/order/ViewOrder.jsp"/>
                        </action>


此种方式表示,控制将被转发到"orderBean"这个form bean对象的"viewOrder"方法(行为)来处理。配置中的"parameter"参数表示form bean类上的方法。"parameter"参数优先于"path"参数。

3. No Method call

<action path="/shop/viewOrder" type="com.ibatis.struts.BeanAction"
                        name="orderBean" parameter="*" scope="session"
                        validate="false">
                        <forward name="success" path="/order/ViewOrder.jsp"/>
                        </action>


此种方式表示,form bean上没有任何方法被调用。如果存在"name"属性,则struts把表单参数等数据填充到form bean对象后,把控制转发到"success"。否则,如果name为空,则直接转发控制到"success"。这就相当于struts内置的org.apache.struts.actions.ForwardAction的功能

<action path="/shop/viewOrder" type="org.apache.struts.actions.ForwardAction"
                        parameter="/order/ViewOrder.jsp " scope="session" validate="false">
                        </action>


Service类位于com.ibatis.jpetstore.service包下,属于业务层。这些类封装了业务以及相应的事务控制。Service类由form bean类来调用。

com.ibatis.jpetstore.persistence.iface包下的类是DAO接口,属于业务层,其屏蔽了底层的数据库操作,供具体的Service类来调用。DaoConfig类是工具类(DAO工厂类),Service类通过DaoConfig类来获得相应的DAO接口,而不用关心底层的具体数据库操作,实现了如图2中{耦合2}的解耦。

com.ibatis.jpetstore.persistence.sqlmapdao包下的类是对应DAO接口的具体实现,在JpetStore4.0中采用了ibatis来实现ORM。这些实现类继承BaseSqlMapDao类,而BaseSqlMapDao类则继承ibatis DAO 框架中的SqlMapDaoTemplate类。ibatis的配置文件存放在com.ibatis.jpetstore.persistence.sqlmapdao.sql目录下。这些类和配置文件位于数据层

Domain类位于com.ibatis.jpetstore.domain包下,是普通的javabean。在这里用作数据传输对象(DTO),贯穿视图层、业务层和数据层,用于在不同层之间传输数据。剩下的部分就比较简单了,请看具体的源代码,非常清晰。
posted on 2007-12-05 16:04 礼物 阅读(883) 评论(2)  编辑  收藏 所属分类: ibatis + spring

评论

# re: 基于struts+spring+ibatis的 J2EE 开发(2)[未登录] 2007-12-18 14:30 毛毛
看不懂,专业了吧~  回复  更多评论
  

# re: 基于struts+spring+ibatis的 J2EE 开发(2)[未登录] 2011-10-17 23:14
@毛毛
看得懂- -!  回复  更多评论