分析思路:
当我们点击查询商品的时候,会出现商品的列表,并按上下页可以实现分页的查询的功能。
首先首先我们先找到商品查询商品的按钮在jsp的那个页面,即首页index.jsp
这里有个url即显示商品页面的l链接:
找到item-list.jsp页面:
这里有个跳转的url即/item/list
通过此处我们可以利用@RequestMapping注解实现页面的跳转
下面我们来分析下编码的实现:
(1)第一步:考虑是否有参数传入,考虑是否有返回值。
是否有参数传入:
查询商品列表,我们是查询所有的商品,所以这里不根据具体的id来查询,是无条件查询。即显示所有商品。
在mybatis中采用了分页查询的原理,而分页查询默认的是由参数的分页,即page和rows,所以这里需要两个参数。即page和rows。
是否有返回值:
这里查询商品,返回值肯定是商品的列表,即返回的pojo对象是商品
而这里页面采用的easyui的datagrid空间显示商品的列表:返回值有固定的形式的json数据格式:
{total:"2",rows:[{"id""1","name""张三"}{"id""2","name""张四"}]}的这种格式。
json的返回数据,我们一般采用封装的形式将数据封装,可以看到这里的格式我们创建一个pojo对象,用来接收返回值的数据:
这个pojo对象有两个属性:一个total,一个rows(rows是存放的list集合)
public class EUDataGridResult {
private int total;
private List<?> rows;
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public List<?> getRows() {
return rows;
}
public void setRows(List<?> rows) {
this.rows = rows;
}
}
用来装返回值。
下一步的工作就是编码的实现了。
(2)考虑controller、service、dao(mapper)层的业务逻辑实现。
dao层是逆向工程生成的,我们只需要调用即可。
controller层的实现:
这一层主要是用来实现页面的跳转链接,接收参数,调用service,返回结果。
public class ItemController {
@Autowired
private ItemService itemService;
//返回商品查询信息,不要忘记是json格式的数据
@RequestMapping("item/list")
@ResponseBody
public EUDataGridResult getItemList(Integer page,Integer rows){
EUDataGridResult result=itemService.getItemList(page, rows);
return result;
}
service层的实现:
接收controller层传递过来的参数,调用mapper层;
@Override
public EUDataGridResult getItemList(int page, int rows) {
TbItemExample example=new TbItemExample();
//因为没有查询条件,所以不用criteria,直接查询
//开始分页
PageHelper.startPage(page, rows);
List<TbItem> list=itemMapper.selectByExample(example);
//返回一个pojo对象
EUDataGridResult result=new EUDataGridResult();
result.setRows(list);
//取记录的总条数
PageInfo<TbItem> pageInfo=new PageInfo<>(list);
result.setTotal((int) pageInfo.getTotal());
return result;
}
这里用到了分页插件工具,具体见前一篇文章。
这是列表的显示功能分析。