淘淘商城---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的主要内容,如果未能解决你的问题,请参考以下文章

淘淘商城01——工程介绍及搭建

淘淘商城的第一天

淘淘商城第一天——项目介绍与项目搭建

淘淘商城第三天笔记

淘淘商城第二天

(转)淘淘商城系列——商品搜索功能测试