4 商品微服務-品牌增刪改查
4.1 需求分析
創(chuàng)建商品微服務,實現對品牌表的增刪改查功能主巍。具體包括
(1)查詢全部列表數據
(2)根據ID查詢實體數據
(3)增加
(4)修改
(5)刪除
(6)條件查詢
(7)分頁查詢
(8)分頁+條件查詢
(9)公共異常處理
4.2 表結構分析
品牌表:tb_brand
字段名稱 | 字段含義 | 字段類型 | 字段長度 | 備注 |
---|---|---|---|---|
id | 品牌id | INT | ||
name | 品牌名稱 | VARCHAR | ||
image | 品牌圖片地址 | VARCHAR | ||
letter | 品牌的首字母 | CHAR | ||
seq | 排序 | INT |
4.3 代碼實現
上面品牌表對應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用于標識主鍵屬性糕非。
4.3.1 品牌列表
(1)Dao創(chuàng)建
在changgou-service-goods微服務下創(chuàng)建com.changgou.goods.dao.BrandMapper接口悠就,代碼如下:
public interface BrandMapper extends Mapper<Brand> {
}
繼承了Mapper接口蚤吹,就自動實現了增刪改查的常用方法例诀。
(2)業(yè)務層
創(chuàng)建com.changgou.goods.service.BrandService接口,代碼如下:
public interface BrandService {
/***
* 查詢所有品牌
* @return
*/
List<Brand> findAll();
}
創(chuàng)建com.changgou.goods.service.impl.BrandServiceImpl實現類裁着,代碼如下:
@Service
public class BrandServiceImpl {
@Autowired
private BrandMapper brandMapper;
/**
* 全部數據
* @return
*/
public List<Brand> findAll(){
return brandMapper.selectAll();
}
}
(3)控制層
控制層 com.changgou.goods包下創(chuàng)建controller包 繁涂,包下創(chuàng)建類
@RestController
@RequestMapping("/brand")
public class BrandController {
@Autowired
private BrandService brandService;
/***
* 查詢全部數據
* @return
*/
@GetMapping
public Result<Brand> findAll(){
List<Brand> brandList = brandService.findAll();
return new Result<Brand>(true, StatusCode.OK,"查詢成功",brandList) ;
}
}
測試:http://localhost:18081/brand
4.3.2 根據ID查詢品牌
(1)業(yè)務層
修改com.changgou.goods.service.BrandService接口,添加根據ID查詢品牌數據方法二驰,代碼如下:
/**
* 根據ID查詢
* @param id
* @return
*/
Brand findById(Integer id);
修改com.changgou.goods.service.impl.BrandServiceImpl新增方法扔罪,代碼如下:
/**
* 根據ID查詢
* @param id
* @return
*/
@Override
public Brand findById(Integer id){
return brandMapper.selectByPrimaryKey(id);
}
(2)控制層
BrandController新增方法
/***
* 根據ID查詢品牌數據
* @param id
* @return
*/
@GetMapping("/{id}")
public Result<Brand> findById(@PathVariable Integer id){
//根據ID查詢
Brand brand = brandService.findById(id);
return new Result<Brand>(true,StatusCode.OK,"查詢成功",brand);
}
測試:http://localhost:18081/brand/14026
4.3.3 新增品牌
(1)業(yè)務層
修改com.changgou.goods.service.BrandService,新增方法
/***
* 新增品牌
* @param brand
*/
void add(Brand brand);
修改com.changgou.goods.service.impl.BrandServiceImpl诸蚕,新增增加品牌方法代碼如下:
/**
* 增加
* @param brand
*/
@Override
public void add(Brand brand){
brandMapper.insert(brand);
}
(2) 控制層
BrandController新增方法
/***
* 新增品牌數據
* @param brand
* @return
*/
@PostMapping
public Result add(@RequestBody Brand brand){
brandService.add(brand);
return new Result(true,StatusCode.OK,"添加成功");
}
測試:http://localhost:18081/brand
4.3.4 修改品牌
(1)業(yè)務層
需改com.changgou.goods.service.BrandService,添加修改品牌方法步势,代碼如下:
/***
* 修改品牌數據
* @param brand
*/
void update(Brand brand);
修改com.changgou.goods.service.impl.BrandServiceImpl氧猬,添加修改品牌方法,代碼如下:
/**
* 修改
* @param brand
*/
@Override
public void update(Brand brand){
brandMapper.updateByPrimaryKey(brand);
}
(2)控制層
BrandController新增方法
/***
* 修改品牌數據
* @param brand
* @param id
* @return
*/
@PutMapping(value="/{id}")
public Result update(@RequestBody Brand brand,@PathVariable Integer id){
//設置ID
brand.setId(id);
//修改數據
brandService.update(brand);
return new Result(true,StatusCode.OK,"修改成功");
}
測試:http://localhost:18081/brand/325415
4.3.5 刪除品牌
(1)業(yè)務層
修改com.changgou.goods.service.BrandService坏瘩,添加刪除品牌方法盅抚,代碼如下:
/***
* 刪除品牌
* @param id
*/
void delete(Integer id);
修改com.changgou.goods.service.impl.BrandServiceImpl,新增刪除品牌方法倔矾,代碼如下:
/**
* 刪除
* @param id
*/
@Override
public void delete(Integer id){
brandMapper.deleteByPrimaryKey(id);
}
(2)控制層
BrandController新增方法
/***
* 根據ID刪除品牌數據
* @param id
* @return
*/
@DeleteMapping(value = "/{id}" )
public Result delete(@PathVariable Integer id){
brandService.delete(id);
return new Result(true,StatusCode.OK,"刪除成功");
}
測試:http://localhost:18081/brand/325415
4.3.6 品牌列表條件查詢
(1)業(yè)務層
修改com.changgou.goods.service.BrandService妄均,增加根據條件搜索品牌方法,代碼如下:
/***
* 多條件搜索品牌方法
* @param brand
* @return
*/
List<Brand> findList(Brand brand);
修改com.changgou.goods.service.impl.BrandServiceImpl哪自,添加根據多條件搜索品牌方法的實現丰包,代碼如下:
/**
* 條件查詢
* @param brand
* @return
*/
@Override
public List<Brand> findList(Brand brand){
//構建查詢條件
Example example = createExample(brand);
//根據構建的條件查詢數據
return brandMapper.selectByExample(example);
}
/**
* 構建查詢對象
* @param brand
* @return
*/
public Example createExample(Brand brand){
Example example=new Example(Brand.class);
Example.Criteria criteria = example.createCriteria();
if(brand!=null){
// 品牌名稱
if(!StringUtils.isEmpty(brand.getName())){
criteria.andLike("name","%"+brand.getName()+"%");
}
// 品牌圖片地址
if(!StringUtils.isEmpty(brand.getImage())){
criteria.andLike("image","%"+brand.getImage()+"%");
}
// 品牌的首字母
if(!StringUtils.isEmpty(brand.getLetter())){
criteria.andLike("letter","%"+brand.getLetter()+"%");
}
// 品牌id
if(!StringUtils.isEmpty(brand.getLetter())){
criteria.andEqualTo("id",brand.getId());
}
// 排序
if(!StringUtils.isEmpty(brand.getSeq())){
criteria.andEqualTo("seq",brand.getSeq());
}
}
return example;
}
(2) 控制層
BrandController新增方法
/***
* 多條件搜索品牌數據
* @param brand
* @return
*/
@PostMapping(value = "/search" )
public Result<List<Brand>> findList(@RequestBody(required = false) Brand brand){
List<Brand> list = brandService.findList(brand);
return new Result<List<Brand>>(true,StatusCode.OK,"查詢成功",list);
}
測試:http://localhost:18081/brand/search
4.3.7 品牌列表分頁查詢
(1)業(yè)務層
修改com.changgou.goods.service.BrandService添加分頁方法,代碼如下:
/***
* 分頁查詢
* @param page
* @param size
* @return
*/
PageInfo<Brand> findPage(int page, int size);
修改com.changgou.goods.service.impl.BrandServiceImpl添加分頁方法實現壤巷,代碼如下:
/**
* 分頁查詢
* @param page
* @param size
* @return
*/
@Override
public PageInfo<Brand> findPage(int page, int size){
//靜態(tài)分頁
PageHelper.startPage(page,size);
//分頁查詢
return new PageInfo<Brand>(brandMapper.selectAll());
}
(2)控制層
BrandController新增方法
/***
* 分頁搜索實現
* @param page:當前頁
* @param size:每頁顯示多少條
* @return
*/
@GetMapping(value = "/search/{page}/{size}" )
public Result<PageInfo> findPage(@PathVariable int page, @PathVariable int size){
//分頁查詢
PageInfo<Brand> pageInfo = brandService.findPage(page, size);
return new Result<PageInfo>(true,StatusCode.OK,"查詢成功",pageInfo);
}
測試:http://localhost:18081/brand/search/1/3
4.3.8 品牌列表條件+分頁查詢
(1)業(yè)務層
修改com.changgou.goods.service.BrandService邑彪,增加多條件分頁查詢方法,代碼如下:
/***
* 多條件分頁查詢
* @param brand
* @param page
* @param size
* @return
*/
PageInfo<Brand> findPage(Brand brand, int page, int size);
修改com.changgou.goods.service.impl.BrandServiceImpl胧华,添加多條件分頁查詢方法代碼如下:
/**
* 條件+分頁查詢
* @param brand 查詢條件
* @param page 頁碼
* @param size 頁大小
* @return 分頁結果
*/
@Override
public PageInfo<Brand> findPage(Brand brand, int page, int size){
//分頁
PageHelper.startPage(page,size);
//搜索條件構建
Example example = createExample(brand);
//執(zhí)行搜索
return new PageInfo<Brand>(brandMapper.selectByExample(example));
}
(2)控制層
BrandController新增方法
/***
* 分頁搜索實現
* @param brand
* @param page
* @param size
* @return
*/
@PostMapping(value = "/search/{page}/{size}" )
public Result<PageInfo> findPage(@RequestBody(required = false) Brand brand, @PathVariable int page, @PathVariable int size){
//執(zhí)行搜索
PageInfo<Brand> pageInfo = brandService.findPage(brand, page, size);
return new Result(true,StatusCode.OK,"查詢成功",pageInfo);
}
測試:http://localhost:18081/brand/search/1/3
4.3.9 公共異常處理
為了使我們的代碼更容易維護寄症,我們創(chuàng)建一個類集中處理異常,該異常類可以創(chuàng)建在changgou-common工程中,創(chuàng)建com.changgou.framework.exception.BaseExceptionHandler矩动,代碼如下:
@ControllerAdvice
public class BaseExceptionHandler {
/***
* 異常處理
* @param e
* @return
*/
@ExceptionHandler(value = Exception.class)
@ResponseBody
public Result error(Exception e) {
e.printStackTrace();
return new Result(false, StatusCode.ERROR, e.getMessage());
}
}
注意:@ControllerAdvice注解有巧,全局捕獲異常類,只要作用在@RequestMapping上悲没,所有的異常都會被捕獲篮迎。