笔记:通过petstore例子分析struts+ibat+spring结构模式

 
struts主要提供视图层面的实现,spring结合IBAT实现业务层和数据库访问的方法。
下面是Facae设计模式实现的具体方法:
1:定义一个BASEACTION ,其他struts调用的ACTION都继承该类
BASEACTION主要特点是定义一个私有对象变量petStore,在setServlet方法中通过spring实例划所有BEAN(DAO)
public void setServlet(ActionServlet actionServlet)//在每个ACTION 第一次创建时执行,所以继承该类的方法都会执行
    {
        super.setServlet(actionServlet);
        if(actionServlet != null)
        {
            javax.servlet.ServletContext servletContext = actionServlet.getServletContext();
            WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
            petStore = (PetStoreFacade)wac.getBean("petStore");//执行这里spring会加载实例化petStore的相关                                                                                                              //DAO
        }
    }

    protected PetStoreFacade getPetStore()继承该类的ACTION 通过该方法来得到私有变量petStore,在通过                                                                               接口的方式引用各种具体的业务方法。
    {
        return petStore;
    }

    private PetStoreFacade petStore;
2:一个接口PetStoreFacade定义所有跟数据库操作的方法定义

3:一个具体类PetStoreImpl通过各种DAO的具体实现来实现接口PetStoreFacade中的数据库操作方法
    public List getOrdersByUsername(String username)
    {
        return orderDao.getOrdersByUsername(username);///通过接口引用具体DAO中的方法
    }

    private AccountDao accountDao;///定义所有用到的DAO接口
    private CategoryDao categoryDao;
    private ProductDao productDao;
    private ItemDao itemDao;
    private OrderDao orderDao;
}
.
.
4:一每个表都定义了一个DAO接口,和该接口的具体数据库实现DAO类
public interface AccountDao/s//DAO接口下所有数据库操作
{

    public abstract Account getAccount(String s)
        throws DataAccessException;

    public abstract Account getAccount(String s, String s1)
        throws DataAccessException;

    public abstract void insertAccount(Account account)
        throws DataAccessException;

    public abstract void updateAccount(Account account)
        throws DataAccessException;

    public abstract List getUsernameList()
        throws DataAccessException;
}
public class SqlMapAccountDao extends SqlMapClientDaoSupport//DAO接口实现,注意实现方法的参数                                                                                                                           和方法名称,类型要和接口定义一致
    implements AccountDao
{

    public SqlMapAccountDao()
    {
    }

    public Account getAccount(String username)
        throws DataAccessException
    {
        return (Account)getSqlMapClientTemplate().queryForObject("getAccountByUsername", username);
    }

    public Account getAccount(String username, String password)
        throws DataAccessException
    {
        Account account = new Account();
        account.setUsername(username);
        account.setPassword(password);
        return (Account)getSqlMapClientTemplate().queryForObject("getAccountByUsernameAndPassword", account);                           这里是spring 和ibat结合之处:extends SqlMapClientDaoSupport后可以通过                                           //getSqlMapClientTemplate()方法得到各种ibat方法
    }
.
.
5:struts的ACTION部分调用业务方法
public class ListOrdersAction extends SecureBaseActionSecureBaseAction extends BaseAction
{

    public ListOrdersAction()
    {
    }

    protected ActionForward doExecute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
        throws Exception
    {
        AccountActionForm acctForm = (AccountActionForm)form;
        String username = acctForm.getAccount().getUsername();
        request.setAttribute("orderList", getPetStore().getOrdersByUsername(username));/这里可以说是                                                                                                                        //struts 和spring结合之处体现,直接通过                                                                                                                        //getPetStore()得到
        return mapping.findForward("success");
    }
}

6:WEB.xml中spring ,struts,ibat的配置初始化
spring:
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/dataAccessContext-local.xml  /WEB-INF/applicationContext.xml
        </param-value>
        </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
struts:
    <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
        <load-on-startup>3</load-on-startup>
    </servlet>
7:spring.xml
<bean id="petStore" class="org.springframework.samples.jpetstore.domain.logic.PetStoreImpl">//Facade模式,包括所有数据库的DAO
        <property name="accountDao" ref="accountDao"/>
        <property name="categoryDao" ref="categoryDao"/>
        <property name="productDao" ref="productDao"/>
        <property name="itemDao" ref="itemDao"/>
        <property name="orderDao" ref="orderDao"/>
    </bean> 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值