淘淘商城---8.7
Posted 汪本成
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了淘淘商城---8.7相关的知识,希望对你有一定的参考价值。
昨天将框架整合完成,现在我主要实现昨天的需求,实现商品的列表查询,这时要涉及到jsp和serveilet知识,不清楚的朋友可以赶紧去补充下知识。
1、商品列表的实现
1.1、打开后台管理工程页面
分析:因为不能直接访问WEB-INF下面的资源,所以先写一个controller进行页面跳转展示首页。并且后台首页是easyUI开发的。
代码一
package com.taotao.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
/**
*
* @ClassName: PageController
* @Description: TODO(展示后台管理页面,页面跳转的controller)
* @author 汪本成
* @date 2016年8月7日 下午8:42:45
*
*/
@Controller
public class PageController
/**
* 打开首页
* @return
*/
@RequestMapping("/")
public String showIndex()
return "index";
/**
* 展示其他页面
* @param page
* @return
*/
@RequestMapping("/page")
public String showPage(@PathVariable String page)
return page;
1.2、商品列表查询
这里需要注意几点;
1、请求的url:"/item/list",如图:
2、请求的参数;http://localhost:8080/item/list?page=1&rows=30 分页信息。
会出现400的Bad Request提示。
3、返回值是json的格式数据。
Easyui中datagrid控件要求的数据格式为:
total:”2”,rows:[“id”:”1”,”name”,”张三”,“id”:”2”,”name”,”李四”]
1.3、Dao层
SQL语句:SELECT * from tb_item LIMIT 0,30
这里因为涉及要分页,但是Mapper是我们逆向生成的,不好改,所以这里考虑使用第三方插件来进行分页,是开源的。
1.3.1、PageHelper
官方网址是:https://github.com/pagehelper/Mybatis-PageHelper/tree/master/src/main/java/com/github/pagehelper
这里建议大家也可以写自己的开源项目放到上面。
1.3.2、PageHelper实现原理
maven将其引入工程中,如图:
1.3.3、PageHelper使用方法
第一步:引入pageHelper的jar包。
第二步:需要在SqlMapConfig.xml中配置插件。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 配置分页插件 -->
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">
<!-- 设置数据库类型 Oracle,mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库-->
<property name="dialect" value="mysql"/>
</plugin>
</plugins>
</configuration>
第三步:在查询的sql语句执行之前,添加一行代码:PageHelper.startPage(1, 10);
注意:第一个参数是page,要显示第几页,第二个参数是rows,没页显示的记录数。
第四步:取查询结果的总数量:创建一个PageInfo类的对象,从对象中取分页信息。
1.3.4、分页测试
代码二
package com.taotao.controller;
import java.util.List;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.taotao.mapper.TbItemMapper;
import com.taotao.pojo.TbItem;
import com.taotao.pojo.TbItemExample;
/**
*
* @ClassName: TestPageHelper
* @Description: TODO(测试PageHelper)
* @author 汪本成
* @date 2016年8月7日 下午10:07:00
*
*/
public class TestPageHelper
@Test
public void testPageHelper()
//创建一个spring容器
ApplicationContext applicationContext = new
ClassPathXmlApplicationContext("classpath:spring/applicationContext-*.xml");
//从spring容器中获得Mapper的代理对象
TbItemMapper mapper = applicationContext.getBean(TbItemMapper.class);
//执行查询并分页
TbItemExample example = new TbItemExample();
//分页处理
PageHelper.startPage(2, 10);
List<TbItem> list = mapper.selectByExample(example);
//取得商品列表
for (TbItem tbItem : list)
System.out.println(tbItem.getTitle());
//取得分页信息
PageInfo<TbItem> pageInfo = new PageInfo<>(list);
//获取所有商品
long total = pageInfo.getTotal();
System.out.println("共有商品: " + total);
测试结果如下:
于是Dao可以实现逆向工程生成的mapper文件+PageHelper实现。
1.4、Service层
1、接收分页参数,一个是page一个是rows。调用dao查询商品列表。并分页。返回商品列表。
2、返回一个EasyUIDateGrid支持的数据格式。需要创建一个Pojo。此pojo应该放到taotao-common工程中。
代码三
package com.taotao.common.pojo;
import java.util.List;
/**
*
* @ClassName: EUDataGridResult
* @Description: TODO(javaBean,方便提供其他工程使用EasyUI)
* @author 汪本成
* @date 2016年8月7日 下午10:18:00
*
*/
public class EUDataGridResult
private long total;
private List<?> rows;
public long getTotal()
return total;
public void setTotal(long total)
this.total = total;
public List<?> getRows()
return rows;
public void setRows(List<?> rows)
this.rows = rows;
写好之后在去service层实现接口,编辑itemService接口
代码四
package com.taotao.service;
import com.taotao.common.pojo.EUDataGridResult;
import com.taotao.pojo.TbItem;
/**
*
* @ClassName: ItemService
* @Description: TODO(商品管理的itemService接口)
* @author 汪本成
* @date 2016年8月6日 下午10:31:12
*
*/
public interface ItemService
TbItem getItemById(long itemId);
EUDataGridResult getItemList(int page, int rows);
代码五
实现ItemService接口,添加商品查询
package com.taotao.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.taotao.common.pojo.EUDataGridResult;
import com.taotao.mapper.TbItemMapper;
import com.taotao.pojo.TbItem;
import com.taotao.pojo.TbItemExample;
import com.taotao.pojo.TbItemExample.Criteria;
import com.taotao.service.ItemService;
/**
*
* @ClassName: ItemServiceImpl
* @Description: TODO(商品管理的ItemService)
* @author 汪本成
* @date 2016年8月6日 下午10:30:28
* @version 1.0
*/
@Service
public class ItemServiceImpl implements ItemService
@Autowired
private TbItemMapper itemMapper;
@Override
public TbItem getItemById(long itemId)
// TODO Auto-generated method stub
/**
* 1、根据主键查询
*
//TbItem item = itemMapper.selectByPrimaryKey(itemId);
/**
* 2、根据条件进行查询
*/
//添加查询条件
TbItemExample example = new TbItemExample();
Criteria criteria = example.createCriteria();
criteria.andIdEqualTo(itemId);
//返回查询结果到List中
List<TbItem> list = itemMapper.selectByExample(example);
//进行判断
if(null != list && list.size() > 0)
TbItem item = list.get(0);
return item;
return null;
/**
* 商品列表查询
*/
@Override
public EUDataGridResult getItemList(int page, int rows)
//查询商品列表
TbItemExample example = new TbItemExample();
//分页处理
PageHelper.startPage(page, rows);
//取出商品列表
List<TbItem> list = itemMapper.selectByExample(example);
//创建一个返回值对象
EUDataGridResult result = new EUDataGridResult();
result.setRows(list);
//取出商品记录总条数
PageInfo<TbItem> pageInfo = new PageInfo<>(list);
result.setTotal(pageInfo.getTotal());
return result;
1.5、Controller
实现查询结果页面的跳转
接收页面传递过来的参数page、rows。返回json格式的数据。EUDataGridResult
需要使用到@ResponseBody注解。
代码六
package com.taotao.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.taotao.common.pojo.EUDataGridResult;
import com.taotao.pojo.TbItem;
import com.taotao.service.ItemService;
/**
*
* @ClassName: ItemController
* @Description: TODO(调用ItemService查询商品信息)
* @author 汪本成
* @date 2016年8月6日 下午10:49:53
*
*/
@Controller
public class ItemController
@Autowired
private ItemService itemService;
@RequestMapping("/item/itemId")
@ResponseBody
public TbItem getItemById(@PathVariable Long itemId)
TbItem tbItem = itemService.getItemById(itemId);
return tbItem;
@RequestMapping("/item/list")
@ResponseBody
public EUDataGridResult getItemList(Integer page, Integer rows)
EUDataGridResult result = itemService.getItemList(page, rows);
return result;
1.6、错误处理
在启动taotao-manage时候,会出现一下错误
错误分析:原因是找不到com.taotao.common.pojo,这是我刚才写进去在taotao-common工程下的包,因为我没有将工程同步到本地仓库下
错误解决:点击maven install,同步工程到本地仓库。
但是maven intall之后启动仍然有如下错误:
错误分析:提示是没去清除启动web的日志信息,因为我没关之前启动的tomcat,导致日志被锁定,现在启动的tomcat当然不能clean日志了
错误解决:关闭tomcat,在重新启动taotao-manager就好。
启动成功后在刷新浏览器,结果如下:
需求实现成功!大家有木有感动,明天继续,欢迎关注!希望大家别只看不写,我也是晚上要花几小时写的,不够详细或者有问题可以給我留言,尽量及时答复!
以上是关于淘淘商城---8.7的主要内容,如果未能解决你的问题,请参考以下文章