1,Mapper的增刪改查

2020-08-08 13:16:31

基於changgou專案

注意

insert和insertSelective區別
兩者的區別在於如果選擇insert 那麼所有的欄位都會新增一遍即使沒有值
但是如果使用inserSelective就會只給有值的欄位賦值(會對傳進來的值做非空判斷)
其他後面有Selective字眼的都是這樣

品牌表對應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用於標識主鍵屬性。

1 查詢全部 - 品牌列表

brandMapper.selectAll();

一般不是使用,一般查詢都會使用分頁的方式

(1)Dao建立

在changgou-service-goods微服務下建立com.changgou.goods.dao.BrandMapper介面,程式碼如下:

public interface BrandMapper extends Mapper<Brand> {
}

繼承了Mapper介面,就自動實現了增刪改查的常用方法。

(2)業務層

建立com.changgou.goods.service.BrandService介面,程式碼如下:

public interface BrandService {

    /***
     * 查詢所有品牌
     * @return
     */
    List<Brand> findAll();
}

建立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包下建立controller包 ,包下建立類

@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) ;
    }
}

2 根據ID查詢品牌

2.1brandMapper.selectByPrimaryKey(id);

(1)業務層

修改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);
}

2.2 categoryMapper.select(category);

(1)Service層

修改com.changgou.goods.service.CategoryService新增根據父類別ID查詢所有子節點,程式碼如下:

/***
 * 根據分類的父ID查詢子分類節點集合
 */
List<Category> findByParentId(Integer pid);

修改com.changgou.goods.service.impl.CategoryServiceImpl新增上面的實現,程式碼如下:

/***
 * 根據分類的父節點ID查詢所有子節點
 * @param pid
 * @return
 */
@Override
public List<Category> findByParentId(Integer pid) {
    //SELECT * FROM tb_category WHERE parent_id=?
    Category category = new Category();
    category.setParentId(pid);
    return categoryMapper.select(category);
}

(2)Controller層

修改com.changgou.goods.controller.CategoryController新增根據父ID查詢所有子類集合,程式碼如下:

/****
 * 根據節點ID查詢所有子節點分類集合
 */
@GetMapping(value = "/list/{pid}")
public Result<List<Category>> findByParentId(@PathVariable(value = "pid")Integer pid){
    //呼叫Service實現查詢
    List<Category> categories = categoryService.findByParentId(pid);
    return new Result<List<Category>>(true,StatusCode.OK,"查詢成功!",categories);
}

3 新增品牌

brandMapper.insert(brand);

(1)業務層

修改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,"新增成功");
}

4 修改品牌

brandMapper.updateByPrimaryKey(brand);

(1)業務層

需改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

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-qWeBA40C-1596863779007)(C:/Users/MT/Desktop/%E7%95%85%E8%B4%AD/%E6%96%87%E6%A1%A3%E9%9B%86%E5%90%88/image/1560444209790.png)]

5 刪除品牌

brandMapper.deleteByPrimaryKey(id);

(1)業務層

修改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

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-YWdzrWHk-1596863779011)(C:/Users/MT/Desktop/%E7%95%85%E8%B4%AD/%E6%96%87%E6%A1%A3%E9%9B%86%E5%90%88/image/1560444351992.png)]

6 品牌列表條件查詢

brandMapper.selectByExample(example);

(1)業務層

修改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

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-zGjjBVrR-1596863779013)(C:/Users/MT/Desktop/%E7%95%85%E8%B4%AD/%E6%96%87%E6%A1%A3%E9%9B%86%E5%90%88/image/1560445027032.png)]

7 品牌列表分頁查詢

PageHelper.startPage(page,size);

new PageInfo<Brand>(brandMapper.selectAll())

(1)業務層

修改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){
    //靜態分頁
    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);
}

8 品牌列表條件+分頁查詢

PageHelper.startPage(page,size);

Example example = createExample(brand);

PageInfo<Brand>(brandMapper.selectByExample(example));

(1)業務層

修改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);
    //執行搜尋
    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){
    //執行搜尋
    PageInfo<Brand> pageInfo = brandService.findPage(brand, page, size);
    return new Result(true,StatusCode.OK,"查詢成功",pageInfo);
}

ze);
//搜尋條件構建
Example example = createExample(brand);
//執行搜尋
return new PageInfo(brandMapper.selectByExample(example));
}




(2)控制層

BrandController新增方法

```java
/***
 * 分頁搜尋實現
 * @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){
    //執行搜尋
    PageInfo<Brand> pageInfo = brandService.findPage(brand, page, size);
    return new Result(true,StatusCode.OK,"查詢成功",pageInfo);
}