分页查询
Controller:
@GetMapping
参数:@RequestParam(required = "false",defaultValue = "1") String pageNumber
@RequestParam(required = "false",defaultValue = "10") String pageSize
String name //表单项数据
String type // 表单项数据
返回数据:PageVo<泛型,这里泛型类型是一个Ingredient食材实体类,rows数组里面一个个的Ingredient对象>对象类型的数据
/**
* 分页查询
* @param pageNumber
* @param pageSize
* @param name
* @param type
* @return
*/
@GetMapping
public ResultVO getList(@RequestParam(required = false,defaultValue = "1") int pageNumber,
@RequestParam(required = false,defaultValue = "10") int pageSize,
String name, String type){
PageVO<Ingredient> pageVO = ingredientService.getList(pageNumber, pageSize, name, type);
return ResultVO.success(pageVO);
}
{
"code": 200,
"message": "操作成功",
"data": {
"pageNumber": 1,
"pageSize": 5,
"rows": [
{
"id": 13,
"name": "大公鸡",
"url": "/files/fc4fb2bfeaac4e89867440306890c631.jpg",
"type": "1",
"description": "大公鸡",
"createTime": "2023-08-17 09:59:08",
"updateTime": null
},
{
"id": 12,
"name": "螃蟹",
"url": "/files/f3b33dc173d1432f98d46e56b45f7b65.jpg",
"type": "1",
"description": "螃蟹",
"createTime": "2023-08-17 09:27:31",
"updateTime": null
},
{
"id": 11,
"name": "花椒",
"url": "/files/205c5bddd82d4f11b91e5a8ea84215e9.jpg",
"type": "3",
"description": "花椒",
"createTime": "2023-08-17 09:23:48",
"updateTime": null
},
{
"id": 10,
"name": "鲍鱼",
"url": "/files/8f408943398f4c02bf801683c73d23db.jpg",
"type": "1",
"description": "鲍鱼",
"createTime": "2023-08-17 09:23:24",
"updateTime": null
},
{
"id": 9,
"name": "鹌鹑蛋",
"url": "/files/a216c8b6e6dd43f2a0dde00be44f532f.jpg",
"type": "1",
"description": "鹌鹑蛋",
"createTime": "2023-08-17 09:22:36",
"updateTime": null
}
],
"total": 13
}
}
实现类
参数:int pageNumber,int pageSize,String name,String type
4步:
1:PageHelper.startPage(pageNumber,pageSize) //传参,启动分页拦截器
2:List<Ingredietn> ingredientList = ingredientMapper.getList(String name,String type) //传参表单项,调用Mapper执行分页查询
3:PageInfo<Ingredient> pageInfo = new PageInfo<>(ingredientList) // 创建PageInfo对象,以便第四步组装PageVo的数据
4:return new PageVo<>(pageInfo.getPageNum(),pageInfo.getPageSize(),ingredientList ,pageInfo.getTotal)
@Override
public PageVO<Ingredient> getList(int pageNumber, int pageSize, String name, String type) {
PageHelper.startPage(pageNumber, pageSize);
List<Ingredient> ingredientList = ingredientMapper.getList(name, type);
PageInfo<Ingredient> pageInfo = new PageInfo<>(ingredientList);
return new PageVO<>(pageInfo.getPageNum(), pageInfo.getPageSize(), ingredientList, pageInfo.getTotal());
}
Mapper
参数前加@Params注解
/**
* 根据食材名称或食材类型查询食材列表
* @param name
* @param type
* @return
*/
List<Ingredient> getList(@Param("name") String name, @Param("type") String type);
}
Mapper.xml
from前别加逗号,
<select id="getList" resultType="com.etoak.system.entity.Ingredient">
select id,
name,
url,
type,
description,
create_time
from t_ingredient
<where>
<if test="name!=null and name!= '' ">
AND name like concat(#{name},'%')
</if>
<if test="type!=null and type != ''">
and type = #{type}
</if>
</where>
order by create_time DESC
</select>
添加食材
Controller
@PostMapping
参数:@RequestBody接收Json Ingredient ingredient实体类对象
实现类
参数: Ingredient对象
返回值:无
1:参数校验
2:get对象的name根据queryWrapper的getOne()得到符合条件的一条记录
3:(hutool)作判断,如果有这个名字的对象,返回自定义异常
4:(hutool)创建时间,补全数据
5:return save(ingredient)插入一个对象并返回
@Override
public boolean add(Ingredient ingredient) {
ValidatorUtil.validate(ingredient);
Ingredient savedIngredient = this.getByName(ingredient.getName());
if (ObjectUtils.isNotEmpty(savedIngredient)) {
throw new CustomException("该食材名称已存在");
}
ingredient.setCreateTime(DateUtil.now());
return save(ingredient);
}
@Override
public Ingredient getByName(String name) {
QueryWrapper<Ingredient> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", name);
return this.getOne(queryWrapper);
}
修改食材
Controller
@PutMapping("/{id}")
参数: @PathVariable int id路径上的id,@RequestBody ingredient Json对象
返回值: 无
/**
* 修改食材
* @param id
* @param ingredient
* @return
*/
@PutMapping("/{id}")
public ResultVO updateIngredient(@PathVariable int id,@RequestBody Ingredient ingredient){
ingredientService.updateIngredient(id,ingredient);
return ResultVO.success();
}
实现类
1:作判断,getById()返回一条查询你要修改的这个食材数据库里有没有,如果返回空,就抛出自定义的异常
2:做判断,自定义getByName()方法,根据传入的对象的名字在数据库中查到了跟传入对象名字一样的对象 && 这两个名字一样对象的id还不相同,那就不能改别库中正在使用这个相同名字的对象,抛出自定义异常
3:参数id数据补全
4:(hutool)时间数据补全
/**
* 修改食材
* @param id
* @param ingredient
* @return
*/
@Override
public boolean updateIngredient(int id, Ingredient ingredient) {
/* 根据id判断有没有要修改的食材 */
Ingredient savedIngredient = this.getById(id);
if (ObjectUtils.isEmpty(savedIngredient)) {
throw new CustomException("没有要修改的食材");
}
/* 判断要修改的食材的id是否被其他食材使用了 */
savedIngredient = this.getByName(ingredient.getName());
if (ObjectUtils.isNotEmpty(savedIngredient) && !savedIngredient.getId().equals(id)) {
throw new CustomException("该食材名称已被其他食材占用");
}
/* 数据补全 */
ingredient.setId(id);
ingredient.setUpdateTime(DateUtil.now());
return this.updateById(ingredient);
}
@Override
public Ingredient getByName(String name) {
QueryWrapper<Ingredient> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", name);
return this.getOne(queryWrapper);
}
删除食材
Controller
@Deletemapping("/{id}")
参数: @PathVariable int id路径上的参数
返回值: 无
/**
* 删除食材
* @param id
* @return
*/
@DeleteMapping("/{id}")
public ResultVO deleteIngredient(@PathVariable int id){
ingredientService.deleteIngredient(id);
return ResultVO.success();
}
实现类
参数:int id
1:getById根据参数id查看数据库中有没有这个对象的记录,如果为空则声明自定义异常
2:查看数据库中有没有其他的菜品正在使用这个食材,用stream()流.map()遍历这个List<Dish> 集合,拿到"...,...,..."这个所有使用这个食材的菜品长字符串
Mapper
参数: @Param("ing redient") int ingredient
/**
* 根据菜品id查询那些菜品使用了这个食材
* @param ingredientId
* @return
*/
List<Dishes> getListByIngredientId(@Param("ingredientId") int ingredientId);
DishesMapper.xml
<select id="getListByIngredientId" resultType="com.etoak.system.entity.Dishes">
select id,
name
from t_dishes
where main = #{ingredientId}
or minor = #{ingredientId}
or seasoning = #{ingredientId}
</select>
3:removeById()数据库中删除这个食材对象
@Override
public boolean deleteIngredient(int id) {
Ingredient savedIngredient = this.getById(id);
if (ObjectUtils.isEmpty(savedIngredient)) {
throw new CustomException("没有要删除的食材");
}
//校验这个食材有没有被菜品使用
List<Dishes> dishesList = dishesMapper.getListByIngredientId(id);
if (CollectionUtil.isNotEmpty(dishesList)) {
String dishesName = dishesList.stream().map(dishes -> dishes.getName())
.collect(Collectors.joining(","));
throw new CustomException(dishesName + "菜品使用了这个食材");
}
return this.removeById(id);
}