Spring宠物商店学习笔记(一) -

阅读更多
一、概述

       JPetStore示例是一个宠物店示例,它一直依赖都被作为各种框架实现的示例程序,因此具有很好的研究价值。Spring发布包中的JPetstore示例使用了iBatis作为数据访问对象层,同时提供了多种数据源的实现版本,如Oracle、MS-SQL、MySQL、PostgreSQL。Jpetstore的业务层由Spring托管,其中也展示了Spring的事务管理功能。此外JPetstore在Web层也给出了Spring WebMVC和Struts版本的分别实现,很有参考价值。

  
二、本地安装示例

       1、先下载Spring完整的发布包,然后解压。

       2、在dos命令下进入示例目录,如spring-framework-2.0.8\samples\jpetstore。

       3、运行ant build脚本。(需安装ant,版本要求见示例的readme文件)

       4、将spring-framework-2.0.8\samples\jpetstore\dist新生成的jpetstore.war包发布到web容器中。

       5、启动tomcat容器。

       6、修改jdbc.properties配置文件,目的是适应自己本地的数据库。(在发布目录中对应war包名称的文件夹中,如apache-tomcat-5.5.23\webapps\jpetstore\WEB-INF)。

       7、将本地数据库对应的jar包拷贝到WEB-INF\lib目录下。

       8、启动本地数据库,执行示例的数据库应用脚本。(本人使用的是mysql数据库)

       9、重新启动tomcat服务器。

       10、访问示例。

  
三、

      

 
(一)、包的命名及其划分(包:用来封装最小可独立发布的模块)

       1、dao包:存放用于处理数据持久层的接口。(注意异常的声明:org.springframework.dao.DataAccessException)

       2、dao.ibatis包:存放用于处理数据持久层的接口的具体ibatis实现。(继承org.springframework.orm.ibatis.support.SqlMapClientDaoSupport类)

       3、dao.ibatis.maps包:存放持久化对象对应的iBatis配置文件。

       4、domain(域)包:存放应用中用到的对象。

       5、domain.logic包:存放该业务的逻辑类。

       6、service包:

       7、service.client包:

       8、web.spring包:存放UI层用到的Spring MVC框架 的Form和Controller。

       9、web.struts包:存放UI层用到的Struts框架的From和Action。

 
       相关配置及其属性文件。(applicationContext.xml 、dataAccessContext-local.xml、jdbc.properties、mail.properties、log4j.properties、sql-map-config.xml)

  
(二)涉及对象(domain)

       1、Account:帐户对象。(account、signon、profile)

       2、Cart:购物车对象。(包含部分业务方法)

       3、CartItem:

       4、Category:种类、类别对象。(category)

       5、Item:项目,条款。(item、inventory)

       6、LineItem:(lineitem)

       7、Order:订单对象。(orders)

       8、Product:产品对象。(product)

 
(三)涉及实体(数据库表)

       1、supplier表:供应商表(id、名字、状态、地址1、地址2、城市、州、邮编、电话) 2、signon表:登陆信息表(用户名、密码)3、account表:用户信息表(userid、email、名、姓、地址1、地址2、城市、州、邮编、国家、电话)  4、profile表:用户简介表(userid、优先语言、喜爱的类别、我的列表开启选项、横幅开启选项)  5、bannerdata表:横幅数据表(喜爱的类别、横幅名称)   6、orders表:订单表(orderid、userid、订单日期、配送地址1、配送地址2、配送城市、配送州、配送邮编、配送国家、帐单地址1、帐单地址2、帐单城市、帐单州、帐单邮编、帐单城市、服务人员、总价钱、收帐单人的名、收帐单人的姓、收邮件人的名、收邮件人的姓、银行卡号、快递日期、卡的类别、本地信息)   7、orderstatus表:订单状态表(orderid、linenum、时间、状态)   8、lineitem表:订单明细表(orderid、linenum、itemid,数量、单价)   9、category表:类别表(catid、名称、描述)   10、product表:商品表(productid、类别(外键)、名称、描述)   11、item表:具体产品项表(itemid、productid(外)、批发价、零售价、供应商(外)、状态、备注1、备注2、备注3、备注4、备注5)   12、inventory表:库存表(itemid、数量)  
13、sequence表:序列表(序列名、nextid)

  
(四)数据层的实现

1、接口的设计(org.springframework.dao.DataAccessException)

AccountDao     Account getAccount(String username) throws DataAccessException;    Account getAccount(String username, String password)           throws DataAccessException;    void insertAccount(Account account) throws DataAccessException;    void updateAccount(Account account) throws DataAccessException;
    List getUsernameList() throws DataAccessException;

CategoryDao

    List getCategoryList() throws DataAccessException;
    Category getCategory(String categoryId) throws DataAccessException;

ItemDao

    public void updateQuantity(Order order) throws DataAccessException;    boolean isItemInStock(String itemId) throws DataAccessException;    List getItemListByProduct(String productId) throws DataAccessException;
    Item getItem(String itemId) throws DataAccessException;

OrderDao

    List getOrdersByUsername(String username) throws DataAccessException;    Order getOrder(int orderId) throws DataAccessException;
    void insertOrder(Order order) throws DataAccessException;

ProductDao

    List getProductListByCategory(String categoryId) throws DataAccessException;    List searchProductList(String keywords) throws DataAccessException;
    Product getProduct(String productId) throws DataAccessException;

 
2、用iBatis实现Dao接口

       (org.springframework.orm.ibatis.support.SqlMapClientDaoSupport)

       extends SqlMapClientDaoSupport implements AccountDao

使用getSqlMapClientTemplate()模板的相应方法进行具体实现。

(1)SqlMapAccountDao

(2)SqlMapCategoryDao

(3)SqlMapItemDao

(4)SqlMapOrderDao:依赖SqlMapSequenceDao

(5)SqlMapProductDao

 
       添加基处的处理类:

(6)SqlMapSequenceDao extends SqlMapClientDaoSupport:提供类似Oracle序列的功能。(先获取,后更新)

(7)Sequence implements Serializable:序列对象的持久化bean。

(8)OracleSequenceDao extends SqlMapSequenceDao

   
3、iBatis的配置文件

(1)Account.xml:

(2)Category.xml:

(3)Item.xml:

(4)LineItem.xml:

(5)Order.xml:

(6)Product.xml:

(7)Sequence.xml:  
(五)业务层的实现

1、用户注册

       A、显示注册页面:newAccount.do

                 
      


2、用户登陆 3、购物车 4、结算 
5、订单查询

你可能感兴趣的:(Spring,iBATIS,DAO,Tomcat,Oracle)