1.首先,我们需要添加这个功能,肯定要与数据库进行交流,那么我们就肯定需要在dubbo中完成一部分的代码。
2.其次,我们要思考,商品的上架,下架,删除是指什么的改变。是的,只是商品状态的改变,也就是调用mapper里面合适的update方法就可以了。
3.下面我们开始写代码,首先在,ego-service里面的TbItemDubboService里面写,也就是添加一个
int updItemStatus(TbItem tbItem);
4.接下来我们写它的实现类。
public int updItemStatus(TbItem tbItem) {
return tbItemMapper.updateByPrimaryKeySelective(tbItem);
}
5.现在我们的dubbo里面已经写好了。现在就要针对后台项目,也就是manage来写对应的代码了。我们先在service的接口里面来写对应的方法。
int update(String ids,Byte status);
为什么这么写呢?因为我们是根据前台传过来的ids来执行对应的操作,在TBItem表里面我们可以看到对应的字段,也就是status来表示是上架,下架,还是删除。
6.我们再就是在对应的实现类里面写对应的实现代码就可以了。
public int update(String ids, Byte status) {
// TODO Auto-generated method stub
int index=0;
TbItem item=new TbItem();
String[] idStrings=ids.split(",");
for(String id:idStrings) {
item.setId(Long.parseLong(id));
item.setStatus(status);
index+=tbItemDubboServiceImpl.updItemStatus(item);
}
if(index==idStrings.length) {
return 1;
}
return 0;
}
因为我们是可以批量删除,所以前台是可以一次传多个id过来的,他们之间使用逗号隔开的,所以我们开始就用一个string数组来装这些id。我们发现,我们在dubbo里面写的代码是需要传一个对象的。所以我们创建一个TbItem对象,循环遍历字符数组,每次把id和status传进去,然后调用对应的dubbo,每次成功是返回1,用index记录,如果最后index等于字符数组的长度,那么就成功了。
7.现在serviceImpl的代码也写好了,接下来,我们只需要在控制器里面调用它们就够了。可是我们在写控制器代码的时候发现,我们的前台需要我们返回什么数据么?只有弄明了这一点,我们才可以确定控制器里面的方法的类型。
首先我们复制对应的请求头,在JSP中搜索,找出对应的代码:
我们先点击上架按钮,然后看发出的请求头:
复制下来,然后任意打开一个JSP,,按住Ctrl+H,粘贴进去进行搜索,找到对应的代码:
我们发现,我们需要返回给前台一个status字段。于是我们就需要在控制器里面的方法里面的返回值设置为这个。它是用传的数据调用的status,所以我们需要在Commons里面建议一个pojo类,专门的来存放结果。如下:
public class EgoResult {
private int status;
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
}
然后我们就可以写出我们的控制器代码了:
/**
* 商品删除
*/
@RequestMapping("rest/item/delete")
@ResponseBody
public EgoResult delete(String ids) {
EgoResult er=new EgoResult();
int index=tbItemServiceImpl.update(ids, (byte)3);
if(index==1) {
er.setStatus(200);
}
return er;
}
/**
* 商品下架
*/
@RequestMapping("rest/item/instock")
@ResponseBody
public EgoResult instock(String ids) {
EgoResult er=new EgoResult();
int index=tbItemServiceImpl.update(ids, (byte)2);
if(index==1) {
er.setStatus(200);
}
return er;
}
/**
* 商品上架
*/
@RequestMapping("rest/item/reshelf")
@ResponseBody
public EgoResult reshelf(String ids){
EgoResult er=new EgoResult();
int index=tbItemServiceImpl.update(ids, (byte)1);
if (index==1) {
er.setStatus(200);
}
return er;
}
}