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、订单查询