1.我们先来理清一下思路。那就是我们如果要把所有的商品类目显示出来,我们需要怎么做?首先,当我们点击显示菜单时,就会通过URL来调用对应的方法,这时候应该有一个默认值,默认值可以把所有的菜单全部都显示出来。然后我们需要怎么才能查出所有的子级菜单呢?因为最上面的父菜单的父ID默认为0,所以通过这个查下去,然后递归的查询,直到没有为止。
2.当然,这又需要和数据库进行交互,我们首先要完成dubbo的代码。我们是通过父ID来查询出所有的子ID。下面给出dubbo的service代码和其实现的代码。
public interface TbItemCatDubboService {
/**
* 根据父类目ID,,查询所有的子类目
*/
List<TbItemCat> show(long pid);
}
public class TbItemCatDubboServiceImpl implements TbItemCatDubboService{
@Resource
private TbItemCatMapper tbItemCatMapper;//调用mapper
//根据父ID查询出所有的子ID
@Override
public List<TbItemCat> show(long pid) {
// TODO Auto-generated method stub
//实例化一个条件
TbItemCatExample example=new TbItemCatExample();
//设置这个条件,也就是ParentIdequalTo(pid),父Id等于pid的
example.createCriteria().andParentIdEqualTo(pid);
//返回根据条件查询的结果
return tbItemCatMapper.selectByExample(example);
}
}
3.接下来我们需要在配置文件中把这个dubbo服务注册一下。
<!-- 商品类目服务 -->
<dubbo:service interface="com.ego.dubbo.service.TbItemCatDubboService" ref="tbItemCatDubboServiceImpl"></dubbo:service>
<bean id="tbItemCatDubboServiceImpl" class="com.ego.dubbo.service.impl.TbItemCatDubboServiceImpl"></bean>
<import resource="../../applicationContext.xml"/>
4.然后我们需要在manager项目中写对应的代码来实现上述功能。在用到数据库方面只需要调用dubbo的代码就可以了。我们还需要思考一个问题,那就是dubbo里面返回的是一个List<TbItemCat>,但是我们这里用到的是什么呢?我们想象一下,一个餐单,我们需要显示的应该只是它的名字,然后我们要知道它什么时候就没有子菜单了,这里需要一个状态,然后就是pid了。所以我们考虑建立一个实体类来放这些东西。然后把这个实体类作为manager项目里面菜单服务的返回值。在Commons里面建立pojo代码如下:
public class EasyUiTree {
private long id; //父ID
private String text; //名字
private String state; //状态
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}
5.接下来我们来写manager里面的服务及其实现代码。也是根据父ID来进行查询,然后返回的就不是像Dubbo里面的一串TbItemCat了,而是里面的每个TbItemCat的部分状态。
public interface TbItemCatService {
/**
* 根据父菜单ID显示所有子菜单,返回值为EasyUITree
*
*/
List<EasyUiTree> show(long pid);
}
@Service
public class TbItemCatServiceImpl implements TbItemCatService{
@Reference
private TbItemCatDubboService tbItemCatDubboServiceImpl;
@Override
public List<EasyUiTree> show(long pid) {
//查询出该pid所有的子类目
List<TbItemCat> list=tbItemCatDubboServiceImpl.show(pid);
//建立一个List<EasyUITree>,作为返回值的容器
List<EasyUiTree> listTree=new ArrayList<>();
//遍历得到我们要的List<EasyUiTree>
for(TbItemCat cat:list) {
EasyUiTree tree=new EasyUiTree();
tree.setId(cat.getId());
tree.setText(cat.getName());
tree.setState(cat.getIsParent()?"closed":"open");
listTree.add(tree);
}
return listTree;
}
}
6.最后我们把控制器方法写好就可以了。
@Controller
public class TbItemCatController {
@Resource
private TbItemCatService tbItemCatServiceImpl;
@RequestMapping("item/cat/list")
@ResponseBody
public List<EasyUiTree> showCat(@RequestParam(defaultValue = "0") long id) {
return tbItemCatServiceImpl.show(id);
}
}