品牌增删改查
需求分析
创建商品微服务,实现对品牌表的增删改查功能。具体包括
(1)查询全部列表数据
(2)根据ID查询实体数据
(3)增加
(4)修改
(5)删除
(6)条件查询
(7)分页查询
(8)分页+条件查询
表结构分析
字段名称 | 字段含义 | 字段类型 | 字段长度 | 备注 |
---|---|---|---|---|
id | 品牌id | INT | ||
name | 品牌名称 | VARCHAR | ||
image | 品牌图片地址 | VARCHAR | ||
letter | 品牌的首字母 | CHAR | ||
seq | 排序 | INT |
代码实现
品牌列表
(1)在changgou_service_goods_api创建com.changgou.goods.pojo包,包下创建Brand实体类
@Table(name="tb_brand") public class Brand implements Serializable{ @Id private Integer id;//品牌id private String name;//品牌名称 private String image;//品牌图片地址 private String letter;//品牌的首字母 private Integer seq;//排序 // getter and setter .....(省略) }
@Table和@Id都是JPA注解,@Table用于配置表与实体类的映射关系,@Id用于标识主键属性。
(2)Dao创建
在changgou_service_goods微服务下创建com.changgou.goods.dao.BrandMapper接口,代码如下:
public interface BrandMapper extends Mapper<Brand> { }
继承了Mapper接口,就自动实现了增删改查的常用方法。
(3)业务层
创建com.changgou.goods.service.BrandService接口,代码如下:
public interface BrandService { /*** * 查询所有品牌 * @return */ public List<Brand> findAll(); }
创建com.changgou.goods.service.impl包,包下创建服务实现类 BrandServiceImpl,代码如下:
@Service public class BrandServiceImpl implements BrandService { @Autowired private BrandMapper brandMapper; @Override public List<Brand> findAll() { return brandMapper.selectAll(); } }
(3)控制层
控制层 com.changgou.goods包下创建controller包 ,包下创建类
@RestController @RequestMapping("/brand") public class BrandController { @Autowired private BrandService brandService; @GetMapping public Result findAll(){ List<Brand> brandList = brandService.findAll(); return new Result(true, StatusCode.OK,"查询成功",brandList) ; } }
根据ID查询品牌
(1) 业务层接口
修改com.changgou.goods.service.BrandService接口,添加根据ID查询品牌数据方法,代码如下:
/** * 根据ID查询 * @param id * @return */ public Brand findById(Integer id);
(2)业务层实现
修改com.changgou.goods.service.impl.BrandServiceImpl新增方法,代码如下:
/** * 根据ID查询 * @param id * @return */ @Override public Brand findById(Integer id){ return brandMapper.selectByPrimaryKey(id); }
(3) 控制层
BrandController新增方法
/*** * 根据ID查询品牌数据 * @param id * @return */ @GetMapping("/{id}") public Result findById(@PathVariable Integer id){ Brand brand = brandService.findById(id); return new Result(true,StatusCode.OK,"查询成功",brand); }
新增品牌
(1)业务层接口
修改com.changgou.goods.service.BrandService,新增方法
/*** * 新增品牌 * @param brand */ public void add(Brand brand);
(2)业务层实现
修改com.changgou.goods.service.impl.BrandServiceImpl,新增增加品牌方法代码如下:
/** * 增加 * @param brand */ @Override public void add(Brand brand){ brandMapper.insertSelective(brand); }
(3)控制层 BrandController新增方法
/*** * 新增品牌数据 * @param brand * @return */ @PostMapping public Result add(@RequestBody Brand brand){ brandService.add(brand); return new Result(true,StatusCode.OK,"添加成功"); }
修改品牌
(1) 业务层接口
需改com.changgou.goods.service.BrandService,添加修改品牌方法,代码如下:
/*** * 修改品牌数据 * @param brand */ public void update(Brand brand);
(2)业务层实现
修改com.changgou.goods.service.impl.BrandServiceImpl,添加修改品牌方法,代码如下:
/** * 修改 * @param brand */ @Override public void update(Brand brand){ brandMapper.updateByPrimaryKeySelective(brand); }
(3)控制层
BrandController新增方法
/*** * 修改品牌数据 * @param brand * @param id * @return */ @PutMapping(value="/{id}") public Result update(@RequestBody Brand brand,@PathVariable Integer id){ brand.setId(id); brandService.update(brand); return new Result(true,StatusCode.OK,"修改成功"); }
删除品牌
(1)业务层接口
修改com.changgou.goods.service.BrandService,添加删除品牌方法,代码如下:
/*** * 删除品牌 * @param id */ public void delete(Integer id);
(2)业务层实现
修改com.changgou.goods.service.impl.BrandServiceImpl,新增删除品牌方法,代码如下:
/** * 删除 * @param id */ @Override public void delete(Integer id){ brandMapper.deleteByPrimaryKey(id); }
(3)控制层
BrandController新增方法
/*** * 根据ID删除品牌数据 * @param id * @return */ @DeleteMapping(value = "/{id}" ) public Result delete(@PathVariable Integer id){ brandService.delete(id); return new Result(true,StatusCode.OK,"删除成功"); }
品牌列表条件查询
(1) 业务层接口
修改com.changgou.goods.service.BrandService,增加根据条件搜索品牌方法,代码如下:
/*** * 多条件搜索品牌方法 * @param searchMap * @return */ public List<Brand> findList(Map<String, Object> searchMap);
(2)业务层实现
修改com.changgou.goods.service.impl.BrandServiceImpl,添加根据多条件搜索品牌方法的实现,代码如下:
/** * 条件查询 * @param searchMap * @return */ @Override public List<Brand> findList(Map<String, Object> searchMap){ Example example=new Example(Brand.class); Example.Criteria criteria = example.createCriteria(); if(searchMap!=null){ // 品牌名称 if(searchMap.get("name")!=null && !"".equals(searchMap.get("name"))){ criteria.andLike("name","%"+searchMap.get("name")+"%"); } // 品牌的首字母 if(searchMap.get("letter")!=null && !"".equals(searchMap.get("letter"))){ criteria.andEqualTo("letter",searchMap.get("letter")); } } return brandMapper.selectByExample(example); }
(3) 控制层
BrandController新增方法
/*** * 多条件搜索品牌数据 * @param searchMap * @return */ @GetMapping(value = "/search" ) public Result findList(@RequestParam Map searchMap){ List<Brand> list = brandService.findList(searchMap); return new Result(true,StatusCode.OK,"查询成功",list); }
品牌列表分页查询
(1) 业务层接口 修改com.changgou.goods.service.BrandService添加分页方法,代码如下:
/*** * 分页查询 * @param page * @param size * @return */ public Page<Brand> findPage(int page, int size);
(2)业务层实现 修改com.changgou.goods.service.impl.BrandServiceImpl添加分页方法实现,代码如下:
/** * 分页查询 * @param page * @param size * @return */ @Override public Page<Brand> findPage(int page, int size){ PageHelper.startPage(page,size); return (Page<Brand>)brandMapper.selectAll(); }
(3) 控制层 BrandController新增方法
/*** * 分页搜索实现 * @param page * @param size * @return */ @GetMapping(value = "/search/{page}/{size}" ) public Result findPage(@PathVariable int page, @PathVariable int size){ Page<Brand> pageList = brandService.findPage(page, size); PageResult pageResult=new PageResult(pageList.getTotal(),pageList.getResult()); return new Result(true,StatusCode.OK,"查询成功",pageResult); }
品牌列表条件+分页查询
(1) 业务层接口 修改com.changgou.goods.service.BrandService,增加多条件分页查询方法,代码如下:
/*** * 多条件分页查询 * @param searchMap * @param page * @param size * @return */ Page<Brand> findPage(Map<String, Object> searchMap, int page, int size);
(2)业务层实现 修改com.changgou.goods.service.impl.BrandServiceImpl,添加多条件分页查询方法代码如下:
/** * 条件+分页查询 * @param searchMap 查询条件 * @param page 页码 * @param size 页大小 * @return 分页结果 */ @Override public Page<Brand> findPage(Map<String,Object> searchMap, int page, int size){ PageHelper.startPage(page,size); Example example=new Example(Brand.class); Example.Criteria criteria = example.createCriteria(); if(searchMap!=null){ // 品牌名称 if(searchMap.get("name")!=null && !"".equals(searchMap.get("name"))){ criteria.andLike("name","%"+searchMap.get("name")+"%"); } // 品牌的首字母 if(searchMap.get("letter")!=null && !"".equals(searchMap.get("letter"))){ criteria.andEqualTo("letter",searchMap.get("letter")); } } return (Page<Brand>)brandMapper.selectByExample(example); }
(3)控制层 BrandController新增方法
/*** * 分页搜索实现 * @param searchMap * @param page * @param size * @return */ @GetMapping(value = "/search/{page}/{size}" ) public Result findPage(@RequestParam Map searchMap, @PathVariable int page, @PathVariable int size){ Page<Brand> pageList = brandService.findPage(searchMap, page, size); PageResult pageResult=new PageResult(pageList.getTotal(),pageList.getResult()); return new Result(true,StatusCode.OK,"查询成功",pageResult); }
公共异常处理
为了使我们的代码更容易维护,我们创建一个类集中处理异常
在com.changgou.goods.handler包下创建公共异常处理类BaseExceptionHandler
/** * 统一异常处理类 */ @ControllerAdvice public class BaseExceptionHandler { @ExceptionHandler(value = Exception.class) @ResponseBody public Result error( Exception e) { e.printStackTrace(); return new Result(false, StatusCode.ERROR, e.getMessage()); } }