成都学院学士学位论文(设计)
图5-12 商品类型管理图
如图5-12商品类型管理图所示,商品类型管理采用的是树形结构来展示的,这也很好的体现了商品类型无限分类的表结构。该树形结构的根节点是品牌名称,所有的商品类型都是该品牌的子类型。在树形结构上点击右键能够显示出右键菜单,该菜单中包含添加节点、修改节点、删除节点三个功能选项,点击添加节点就会弹出右边点的添加界面来实现节点的添加。树的初始化代码如下:
loadTree: function() { //加载树()
//通过Ajax获取数据
$.ajax({
url: \type: \dataType: \cache: false,
success: function(data) {//数据获取成功、初始化树形结构 }
tree.zTree = $(\
});},
对于商品的管理,品牌管理员拥有添加商品信息、修改商品信息、删除商品信息、管理下架商品信息等功能,在系统管理员管理内容中已经做过介绍,在此处就不在详细介绍。
30
成都学院学士学位论文(设计)
图5-13 订单信息管理图
如图5-13 订单信息管理图所示,订单信息管理中能够很清楚的了解到每一次订单的商品名称、购买单价、购买数量、消费总金额和状态。当还未发货时能够通过列表中的操作来模拟发货的功能。
31
成都学院学士学位论文(设计) 6 重难点分析及解决方案
6.1 HibernateTemplate的应用
HibernateTemplate是org.springframework.orm.hibernate3包下的一个类,是Spring对JDBC更加深层次的封装,极大的方便了通过Hibernate对数据库的操作[10]。
本系统中对HibernateTemplate的使用都是封装在BaseDaoImp中的,该类继承自HibernateDaoSupport[11],HibernateDaoSupport需要注入一个SessionFactory,在BaseDaoImp中我通过setSuperSessionFactory(SessionFactory sessionFactory)方法将SessionFactory注入到该类中。HibernateDaoSupport类中有一个getHibernateTemplate的方法,通过该方法能够获取到HibernateTemplate,获取到HibernateTemplate过后,则通过它来操作数据库,下面对BaseDaoImp中用到的几个方法做简单的介绍。
HibernateTemplate对于简单的Save、Update、Delete这些方法,同样是传入一个实体对象,就能够完成相应的操作,另外一个方法是Find方法,这个方法需要一个HQL格式的查询语句,并且这个方法直接返回一个List数据集合,这样就可以通过HibernateTemplate完成简单的增删查改功能了。在BaseDaoImp这个类中使用最多的方法是FindByNamedParam方法,并且这个方法有多种的重载形式,在本系统中主要是了了两种,在本系统使用的这两种都需要三个参数并且都是返回一个List集合,第一种是org.springframework.orm.hibernate3.HibernateTemplate.findByNamedParam(String queryString, String[] paramNames, Object[] values) throws DataAccessException
有如上代码可以看出该方法需要的第一个参数是一个查询语句,该查询语句类似于Hibernate的HQL语句[12],只是在查询语句中使用的是paramName=:paramName这种格式,第二个参数是一个String类型的数组,该数字存放的是字段名称的集合,第三个参数为一个Object的数组,存放的是每一个字段所对应的Value值,按照相应的规定传入三个参数,HibernateTemplate内部会自动的封装好相应的查询语句,最后通过查询得到一个List的数据集合,并且返回给该方法的调用者。需要说明的是这个方法会抛出一个DataAccessException异常,DataAccessException是RuntimeException,是一个无须检测的异常,不要求代码去处理这类异常,遵循了Spring的一般理念:异常检测会使代码到处是不相关的catch或throws语句,使代码杂乱无章;并且NestedRuntimeException的子类,是可以通过NestedRuntimeException的getCause()方法获得导致该异常的另一个异常。
32
成都学院学士学位论文(设计) 在BaseDaoImp中还是用了FindByNamedParam方法的另一个重载方法,这个方法同样需要三个参数并且返回一个List数据集合,同样会抛出DataAccessException异常,org.springframework.orm.hibernate3.HibernateTemplate.findByNamedParam(String queryString, String paramName, Object value) throws DataAccessException在这个方法的三个参数与前面的那个方法的参数有一定的相似,第一个参数同样是一个查询语句,语句中需要查询的字段同样按照paramName=:paramName的方式进行设置,第二个参数则是字段的名称,第三个参数则是一个Object类型的Value值。最后按照正确的查询语句和对应的值,就可以获取到相应的数据集合。
在BaseDaoImp中有一个是分页查询的方法,在该方法中使用了HibernateTemplate的executeFind方法,该方法需要HibernateCallback> action作为参数,最后返回一个List数据集合,HibernateCallback是一个回调函数,在这个回调函数中对于分页查询的具体实现如下:
new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException, SQLException {
}
如上代码所示,在executeFind中创建了一个HibernateCallback的实例对象,在该对象中中有一个doInHibernate的方法,该方法会把Hibernate的Session传入其中,通过session.createQuery(hql)获取到Hibernate的Query对象,通过设置query.setFirstResult(first); query.setMaxResults(max);来实现分页查询,最后通过List
6.2 Freemarker的应用
FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。在本系统中还是较多的使用了FreeMarker的各种标签[13],下面对在项目中使用FreeMarker
33
}
Query query = session.createQuery(hql); query.setFirstResult(first); query.setMaxResults(max); List