本文章来自于我的ssm博客:http://iclyj.cn/blog/articles/93.html
1.1 代码实现
@Controller public class PageController {
@RequestMapping("/") public String showIndex() { return "index"; } } |
1.2 静态资源映射
2.1 分析
打开商品列表页面,应该创建一个Handler接收请求,跳转到对应的页面。请求和页面的名称一致。可以统一处理。
查询的表:tb_item
单表查询sql:SELECT * from tb_item LIMIT 0,10
需要实现分页,使用逆向工程,可以使用mybatis的分页插件。
2.2 分页插件
2.2.1 原理
2.2.2 使用方法
插件叫做PageHelper如果你也在用Mybatis,建议尝试该分页插件,这个一定是最方便使用的分页插件。
该插件目前支持Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库分页。
使用方法:
第一步:需要在SqlMapConfig.xml,配置一个plugin。
第二步:在sql语句执行之前,添加一个PageHelper.startPage(page,rows);
第三步:取分页结果。创建一个PageInfo对象需要参数,查询结果返回的list。从PageInfo对象中取分页结果。
2.2.2.1 添加jar包到工程中
2.2.2.2 修改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"> <!-- 指定使用的数据库是什么 --> <property name="dialect" value="mysql"/> </plugin> </plugins>
</configuration> |
2.2.2.3 代码测试
public class TestPageHelper {
@Test public void testPageHelper() throws Exception { //1、获得mapper代理对象 ApplicationContext applicationContext = newClassPathXmlApplicationContext("classpath:spring/applicationContext-*.xml"); TbItemMapper itemMapper =applicationContext.getBean(TbItemMapper.class); //2、设置分页 PageHelper.startPage(1, 30); //3、执行查询 TbItemExample example = new TbItemExample(); List<TbItem> list = itemMapper.selectByExample(example); //4、取分页后结果 PageInfo<TbItem> pageInfo = new PageInfo<>(list); long total = pageInfo.getTotal(); System.out.println("total:" + total); int pages = pageInfo.getPages(); System.out.println("pages:" + pages); int pageSize = pageInfo.getPageSize(); System.out.println("pageSize:" + pageSize);
}
} |
2.3 展示商品列表
2.3.1 页面分析
请求的url:
Ajax请求。
请求的参数:http://localhost:8080/item/list?page=1&rows=30
响应的数据:json数据。
包含total、rows两个属性:
Total:查询结果的总记录数
Rows:集合,包含显示的所有数据。其中集合中每个元素的key应该和dategrid的field对应。
Easyui中datagrid控件要求的数据格式为:
{total:”2”,rows:[{“id”:”1”,”name”,”张三”},{“id”:”2”,”name”,”李四”}]}
2.3.2 Dao层
可以使用逆向工程生成的代码
2.3.3 Service层
参数:page(显示的页码)、rows(每页显示的记录数)
返回值:创建一个pojo表示返回值。应该包含total、rows两个属性。
应该放到taotao-common工程中,和其他系统共用。
public class EasyUIDataGridResult {
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; }
} |
@Override public EasyUIDataGridResult getItemList(int page, int rows) { //分页处理 PageHelper.startPage(page, rows); //执行查询 TbItemExample example = new TbItemExample(); List<TbItem> list = itemMapper.selectByExample(example); //取分页信息 PageInfo<TbItem> pageInfo = new PageInfo<>(list); //返回处理结果 EasyUIDataGridResult result = new EasyUIDataGridResult(); result.setTotal(pageInfo.getTotal()); result.setRows(list);
return result; } |
2.3.4 Controller
接收两个参数:page、rows
调用Service查询商品列表。
返回:EasyUIDataGridResult(json数据),需要使用@ResponseBody
@RequestMapping("/item/list") @ResponseBody public EasyUIDataGridResult getItemList(Integer page, Integer rows) { EasyUIDataGridResult result = itemService.getItemList(page, rows); return result; } |