商品后台页面整合显示、商品列表展示功能EasyUIDataGridjson分页功能PageHelper

第二天的内容主要是四个部分:
1)创建数据库;2)使用mybatis逆向工程生成代码;3)ssm框架整合;4)商品列表功能的实现。
1、创建数据库。
打开mysql之后,创建一个新的数据库,名称叫taotao。然后选中该数据库,执行教程给的sql文件,创建对应的表和数据。
2、使用mybatis逆向工程生成代码
使用mybatis逆向工程生成java代码,包括了pojo、mapper接口和xml映射文件。
3、ssm框架整合;
1)Dao层,主要是spring和mybatis的整合。包括配置数据源、Spring容器管理SqlsessionFactory,单例存在、把mapper的代理对象放到spring容器中,并用扫描包的方式加载mapper 的代理对象。
2)Service层。主要是使用spring的AOP,配置事务管理。并且把实现类对象放到spring容器中。
3)表现层。spring和Spring MVC的整合,包括配置注解驱动、视图解析器和扫描controller。
4)Web.xml。包括spring容器配置、Spring MVC前端控制器的配置和Post乱码过滤。
最后注意把所有配置文件都放在taotao-manger-web工程下,该工程为war工程,其他子工程只作为jar包存在。整合完毕后,进行了测试,使用ID查询商品信息,截图如下。
4、商品列表功能的实现。
后台界面使用easyUI开发。本节重点是使用了mybatis的一个插件PageHelper进行分页操作(mybatis的插件部分还需要回头细看)。该插件可以在Executor执行器执行sql语句时获得该sql语句,然后添加limit语句实现分页功能。需要在SqlMapConfig.xml中配置该插件。完成后截图如下:

遇到的错误:印象最深的是开始时设置PageHelper版本为3.4.2-fix版本,但是maven找不到该依赖包,无法下载。后来确认该包由教程自己提供,所以就把教程里的PageHelper包拷贝到本地仓库,最后完成了功能。

能用网页管理dubbo是怎么回事?dubbo-admin

Mybatis逆向工程

执行逆向工程
使用官方网站的mapper自动生成工具mybatis-generator-core-1.3.2来生成po类和mapper映射文件。
如图逆向工程导入到工程中,修改配置文件,生成POJO 及Mapper及映射文件。
注意:因为涉及到各个工程(系统)来回传递对象,所以使用时需要对涉及到的POJO实现序列化接口。

整合静态页面

后台管理系统静态页面
首页静态页面
搜索结果静态页面
商品详情静态页面
登陆注册页面
购物车静态页面
订单系统静态页面
jsonp

1. 展示首页

将项目资源中的静态文件统一放置在web-app/web-INF下即可

由于在web.xml中定义的url拦截形式为“/”表示拦截所有的url请求,包括静态资源例如css、js等。所以需要在springmvc.xml中添加资源映射标签:
<mvc:resources location="/WEB-INF/js/" mapping="/js/"/>
<mvc:resources location="/WEB-INF/css/" mapping="/css/
"/>

分析:
首页的请求地址:/
请求参数:无
返回值:index.jsp (首页)
写一个Controller
pageController.java

我们为了在访问网站时,能够自动打开首页,即下图的index.jsp文件
而众所周知的是,WEB-INF下的文件不能直接通过URL访问,因此我们需要配置控制器来让用户访问网站时可以跳转至首页,我的tomcat配置如下,可以看到我们启动时,则会打开localhost:81/这个ip地址,所以我们可以将首页跳转的控制器的url设为"/".
因此,首页控制器代码如下,@Controller告诉Spring自己是控制器类,RequestMapping为访问此方法的URL,返回首页的jsp名字,即跳转到首页,然后我们启动tomcat,可以访问到首页.
这里解释一下为什么返回String就可以完成跳转操作,这是由于SpringMVC拦截到index后,将其与前缀和后缀拼接起来,然后包装到ModelandView的View属性中,让其跳转成功.

2.访问其余页面-商品列表页面

观察index.jsp和其他jsp可以看到点击新增商品时,其实访问的就是一个URL链接,那么我们同样可以在Controller那里进行跳转,并可以通过URL参数来确定跳转的页面.
对于查询商品:请求时地址是 item-list返回的页面是item-list
对于添加商品:请求时地址是 item-add返回的页面是item-add
发现这个规律之后,那么我们就使用同一的方式:到时候请求的url中写什么,就返回什么页面
商品管理
新增商品item-add
查询商品item-list item/list报错
规格参数item-param-list item/param/list报错
网站内容管理
内容分类管理content-category content/category/list 报错
内容管理content content/query/list报错
发现访问页面时,控制台报错:
2019-08-20 10:44:49,157 [http-bio-8081-exec-6] [org.springframework.web.servlet.PageNotFound]-[WARN] No mapping found for HTTP request with URI [/item/list] in DispatcherServlet with name ‘taotao-manager-web’

浏览器中检查也是报错

例子:js/jquery-easyui-1.4.1/demo/dategrid/basic.html

Item IDProductList PriceUnit CostAttributeStatus

这里的数据是json格式的,datagrid_data1.json
{“total”:28,“rows”:[
{“productid”:“FI-SW-01”,“productname”:“Koi”,“unitcost”:10.00,“status”:“P”,“listprice”:36.50,“attr1”:“Large”,“itemid”:“EST-1”},
{“productid”:“K9-DL-01”,“productname”:“Dalmation”,“unitcost”:12.00,“status”:“P”,“listprice”:18.50,“attr1”:“Spotted Adult Female”,“itemid”:“EST-10”},
{“productid”:“RP-SN-01”,“productname”:“Rattlesnake”,“unitcost”:12.00,“status”:“P”,“listprice”:38.50,“attr1”:“Venomless”,“itemid”:“EST-11”},
{“productid”:“RP-SN-01”,“productname”:“Rattlesnake”,“unitcost”:12.00,“status”:“P”,“listprice”:26.50,“attr1”:“Rattleless”,“itemid”:“EST-12”},
{“productid”:“RP-LI-02”,“productname”:“Iguana”,“unitcost”:12.00,“status”:“P”,“listprice”:35.50,“attr1”:“Green Adult”,“itemid”:“EST-13”},
{“productid”:“FL-DSH-01”,“productname”:“Manx”,“unitcost”:12.00,“status”:“P”,“listprice”:158.50,“attr1”:“Tailless”,“itemid”:“EST-14”},
{“productid”:“FL-DSH-01”,“productname”:“Manx”,“unitcost”:12.00,“status”:“P”,“listprice”:83.50,“attr1”:“With tail”,“itemid”:“EST-15”},
{“productid”:“FL-DLH-02”,“productname”:“Persian”,“unitcost”:12.00,“status”:“P”,“listprice”:23.50,“attr1”:“Adult Female”,“itemid”:“EST-16”},
{“productid”:“FL-DLH-02”,“productname”:“Persian”,“unitcost”:12.00,“status”:“P”,“listprice”:89.50,“attr1”:“Adult Male”,“itemid”:“EST-17”},
{“productid”:“AV-CB-01”,“productname”:“Amazon Parrot”,“unitcost”:92.00,“status”:“P”,“listprice”:63.50,“attr1”:“Adult Male”,“itemid”:“EST-18”}
]}
那么来看我们的商品列表页面

商品ID商品标题叶子类目卖点价格库存数量条形码状态创建日期更新日期

对应的jsp为:item-list.jsp
请求的url:/item/list
请求的参数:page=1&rows=30
响应的json数据格式:Easyui中datagrid控件要求的数据格式为:
{total:”2”,rows:[{“id”:”1”,”name”:”张三”},{“id”:”2”,”name”:”李四”}]}
返回过滤数据显示,该函数带一个参数data用来指向源数据(即:获取的数据源,比如json对象)。你可以改变源数据的标准数据格式。这个函数必须返回包含total和rows属性的标准数据对象。

响应的json数据格式EasyUIDataGridResult
实现的接口
taotao-common com.taotao.common.pojo
EasyUIDataGridResult.java商品列表查询的返回的数据类。Datagrid展示数据的POJO,包括商品的POJO。
将TbItem.java实现Serializable接口

分页处理

逆向工程生成的代码是不支持分页处理的,如果想进行分页需要自己编写mapper,这样就失去逆向工程的意义了。为了提高开发效率可以使用mybatis的分页插件PageHelper。
分页插件PageHelper
Mybatis分页插件 - PageHelper说明
如果你也在用Mybatis,建议尝试该分页插件,这个一定是最方便使用的分页插件。该插件目前支持Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库分页。
使用方法
第一步:把PageHelper依赖的jar包添加到工程中。官方提供的代码对逆向工程支持的不好,使用参考资料中的pagehelper-fix。
使用参考资料中的工程 ,将其导入到eclipse 使用maven 安装到本地仓库。
复制到dao的pom.xml中
使用的时候需要添加坐标
注意:
从中央仓库下载pageHelper的jar包到本地仓库—pagehelper
自己下载java源码,形成自己的maven工程

第二步:在Mybatis的全局文件中配置SqlMapConfig.xml中配置拦截器插件:

第三步:在代码中使用
1、 设置分页信息:
//获取第1页,10条内容,默认查询总数count
PageHelper.startPage(1, 10);

//紧跟着的第一个select方法会被分页
List list = countryMapper.selectIf(1);

2、 取分页信息第一种方法
//分页后,实际返回的结果list类型是Page,如果想取出分页信息,需要强制转换为Page,
Page listCountry = (Page)list;
listCountry.getTotal();

3、取分页信息的第二种方法,推荐使用第二种
//获取第1页,10条内容,默认查询总数count
PageHelper.startPage(1, 10);
List list = countryMapper.selectAll();
//用PageInfo对结果进行包装
PageInfo page = new PageInfo(list);
//测试PageInfo全部属性
//PageInfo包含了非常全面的分页属性
assertEquals(1, page.getPageNum());
assertEquals(10, page.getPageSize());
assertEquals(1, page.getStartRow());
assertEquals(10, page.getEndRow());
assertEquals(183, page.getTotal());
assertEquals(19, page.getPages());
assertEquals(1, page.getFirstPage());
assertEquals(8, page.getLastPage());
assertEquals(true, page.isFirstPage());
assertEquals(false, page.isLastPage());
assertEquals(false, page.isHasPreviousPage());
assertEquals(true, page.isHasNextPage());

分页测试
taotao-manager-service
com.taotao.test.pagehelper
TestPageHelper.java

接下来就开始开发了
controller调用service,service调用pojo(逆向工程)
pojo已经生成了
接下来开发service

Service层
参数:int page ,int rows
业务逻辑:查询所有商品列表,要进行分页处理。
返回值:EasyUIDataGridResult
接口
Taotao-manager-interface
Com.taotao.service
ItemService.java. getItemList
根据当前的页码和每页的行数进行分页查询

实现类
Taotao-manager-service
Com.taotao.service.impl
ItemServiceImpl.java. getItemList
这样页面所需要的数据就转换成一个对象,然后转化成json。

发布服务
在taotao-manager-service中的applicationContext-service.xml中发布服务:
注意address的值:使用自己的zookeeper所在的系统的ip地址和端口
<dubbo:service interface=”com.taotao.service.ItemService”ref=”itemServiceImpl”>

表现层
Taotao-manager-web
Com.taotao.controller
ItemController.java getItemList
1.引入服务2.注入服务3.调用服务的方法
首先在taotao-manager-web工程中的springmvc.xml中引入服务:
<dubbo:reference interface=“com.taotao.service.ItemService” id=“itemService” />

注意address的值:使用自己的zookeeper所在的系统的ip地址和端口
然后返回去写一下controller
1、初始化表格请求的url:/item/list
2、Datagrid默认请求参数:
1、page:当前的页码,从1开始。
2、rows:每页显示的记录数。
3、响应的数据:json数据。EasyUIDataGridResult
可以设置服务超时时间:
服务调用超时时间默认1秒,如下:在服务层和表现层都可以设置超时时间。

测试:
先安装以后
需要先启动zookeeper,再启动服务层,再启动表现层。
如果先启动表现层,后启动服务层,会报错,但是不影响使用。

为了更方便的进行测试,表现层工程和服务层工程属于不同的工程,要debug的时候需要设置源码,如下:
Debug设置源代码,涉及到工程都要添加,为了方便,可以添加所有的工程。
在list这里打个断点
然后再debug
返回是一个page对象,识别list的一个子类
服务层返回的是page这个类,是返回给web层的,web层并没有pagehelper,所以这个类并不存在。使用的是list。

报错:java.lang.ClassNotFoundException: com.github.pagehelper.Page
主要原意是在pagehelper的中我们使用pageiInfo,pageInfo中使用继承了arrayList的page,所以在服务发布于获取的序列化与反序列化中会去找page,找不到就会报错,但是由于他继承了ArrayList所以不会影响结果。
解决方法:在web层pom.xml中引入依赖

com.github.pagehelper
pagehelper

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值