如果想编写服务端代码,首先对架构要有一个了解,我们看了架构后,会发现mall-mbg项目和dao层中都有对数据库的操作,顿时有点晕了,到底是该用mapper来操作数据库还是用dao层来操作数据库那,那就要看情况了
如果是简单的针对一个表的操作,mbg中已经为你生成好了方法和mapper xml文件,使用mbg中的类操作数据库就可以了
如果是复杂的自定义查询,可以自己建立dao类文件,并且创建相应的dao xml文件,来操作数据库。
这只是一个约定,不是强制性的。我个人实际上并不赞成分开这种写法。看自己的喜好吧。
下面我们看下怎么创建服务端接口。
1. 在Controller文件中创建一个Controller,写一个方法,访问数据库中的省市区信息,如下
package com.macro.mall.controller;
import com.macro.mall.common.api.CommonResult;
import com.macro.mall.dto.AreaTreeInfo;
import com.macro.mall.model.BsbArea;
import com.macro.mall.model.BsbCity;
import com.macro.mall.model.BsbProvince;
import com.macro.mall.service.BsbAreaService;
import com.macro.mall.service.BsbCityService;
import com.macro.mall.service.BsbProvinceService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.ArrayList;
import java.util.List;
/**
* 商品管理Controller
* Created by macro on 2018/4/26.
*/
@Controller
@Api(tags = "BsbAreaController", description = "区域管理")
@RequestMapping("/area")
public class BsbAreaController {
@Autowired
private BsbProvinceService bsbProvinceService;
@Autowired
private BsbCityService bsbCityService;
@Autowired
private BsbAreaService bsbAreaService;
@ApiOperation("查询树形区域")
@RequestMapping(value = "/list", method = RequestMethod.POST)
@ResponseBody
// @PreAuthorize("hasAuthority('bsb:area:read')")
public CommonResult<List<AreaTreeInfo>> getList() {
List<AreaTreeInfo> areaInfoList=new ArrayList<>();
List<BsbProvince> provinceList=bsbProvinceService.getList();
List<BsbCity> cityList=bsbCityService.getList();
List<BsbArea> areaList=bsbAreaService.getList();
if (provinceList!=null&&provinceList.size()>0)
{
for (BsbProvince province:provinceList)
{
AreaTreeInfo areaTreeInfo=new AreaTreeInfo();
areaTreeInfo.setCode(province.getCode());
areaTreeInfo.setLabel(province.getName());
List<AreaTreeInfo> childrenCityList=new ArrayList<>();
if (cityList!=null&&cityList.size()>0)
{
for (BsbCity city:cityList)
{
if(city.getParentCode().equals(province.getCode()))
{
List<AreaTreeInfo> childrenAreaList=new ArrayList<>();
AreaTreeInfo cityAreaInfo=new AreaTreeInfo();
cityAreaInfo.setLabel(city.getCityName());
cityAreaInfo.setCode(city.getCityCode());
if (areaList!=null&&areaList.size()>0)
{
for (BsbArea area:areaList)
{
if(area.getParentCode().equals(city.getCityCode()))
{
AreaTreeInfo areaInfo=new AreaTreeInfo();
areaInfo.setCode(area.getAreaCode());
areaInfo.setLabel(area.getAreaName());
childrenAreaList.add(areaInfo);
}
}
}
cityAreaInfo.setChildren(childrenAreaList);
childrenCityList.add(cityAreaInfo);
}
}
}
areaTreeInfo.setChildren(childrenCityList);
areaInfoList.add(areaTreeInfo);
}
}
return CommonResult.success(areaInfoList);
}
}
直接启动项目,然后在浏览中输入http://localhost:8080/swagger-ui.html,就可以测试调用了
2. 前端项目可以直接使用,首先书写调用函数
export function fetchArea() {
return request({
url:'/area/list',
method:'post'
})
}
在created 中调用
getArea() {
this.listLoading = true;
fetchArea().then(response => {
this.listLoading = false;
this.data = response.data;
});
}
最终效果图如下