东莞桥头网站建设,南宁网站建设制作后台,免费做淘宝客网站,邯郸论坛官网在此之前#xff0c;先来补充一下上一篇文章的一点内容#xff1a;上一篇文章点击此处详看 对于画线的这句话#xff0c;来详细解释一下吧#xff01; 这里面说#xff0c;对于service服务层#xff0c;如果我们所需要实现的业务比较简单的话可以直接在...service接口里面…
在此之前先来补充一下上一篇文章的一点内容上一篇文章点击此处详看 对于画线的这句话来详细解释一下吧 这里面说对于service服务层如果我们所需要实现的业务比较简单的话可以直接在...service接口里面将方法实现而复杂的业务逻辑则需要另外加一个实现类...serviceImpl来实现对应的方法。 这里再补充一下就是我们在后端代码编写的时候Impl实现类并不是必须的其实它只是起到一个使得我们写的业务逻辑代码更加清晰不会使得方法看起来很复杂。 这里可以举一个简单的例子 比如我们正在开发一个外卖管理平台那么我们肯定需要将要出售的菜品展示给用户看我们从平台管理者的角度看最简单的业务就是对菜品的增删查改而这个增删查改的逻辑其实都差不多但它们都是属于对菜品的管理四个功能需要四个方法来实现那么我们在编写代码时肯定先在controller控制层先响应请求然后再到服务层来实现这几个方法而在service服务层我们如果要把四个方法都写在...service类里面的话那就包括实现方法的逻辑代码sql的编写对于sql的编写若是简单的sql倒没什么如果是比较复杂的动态sql那么全部堆在这个service类里面下次需要来修改什么功能的话会相当难找还可能影响到其他的功能。而这时候我们就需要再加一个ImplService实现类在service接口层里面单纯地定义方法再将方法的具体实现代码编写到ImplService实现类里面接着将复杂的动态sql编写到xml文件里面。这样如果我们需要修改哪个方法或sql语句我们就随时可以定位到该位置快速修改不会太冗杂。 当然上面说了并不是所有的业务逻辑都需要Impl实现类就像上一篇文章里面的新增员工业务单纯的实现这个功能只需要一句简单的sql语句我们就不需要另开一个实现类去实现。 好了进入正题我们来分析学习下面的代码开放思路
eg.这是一个关于删除的业务删除套餐
先对其进行需求分析 业务规则 可以一次删除一个套餐也可以批量删除套餐 起售中的套餐不能删除 接口信息 Path: /admin/setmeal Method: DELETE 接口描述 请求参数Query 参数名称ids 必须 返回数据 数据名称code 非必须 data 非必须 msg 非必须 代码实现controller— service— serviceImpl— mapper— (动态sql--mapper.xml)
SetmealController /*** 批量删除套餐* param ids* return
*/
DeleteMapping
ApiOperation(批量删除套餐)
public Result delete(RequestParam ListLong ids){setmealService.deleteBatch(ids);return Result.success();
} 首先先编写Controller层封装所需要的数据其中ids我们可以从上面的接口信息知道这是请求参数且是必须的所以delete()括号中需要封装前端提交过来的请求参数接着就需要一个根据ids删除的方法对吧deleteBatch我们可以先将其写出来然后再到setmealService接口层去创建这个方法。最后返回响应结果。 SetmealService /*** 批量删除套餐* param ids
*/
void deleteBatch(ListLong ids); SetmealService接口层这里面单纯定义方法给Controller控制层调用实现删除功能。 而具体的实现逻辑是在实现类编写。 SetmealServiceImpl /*** 批量删除套餐* param ids
*/
Transactional
public void deleteBatch(ListLong ids) {ids.forEach(id - {Setmeal setmeal setmealMapper.getById(id);if(StatusConstant.ENABLE setmeal.getStatus()){//起售中的套餐不能删除throw new DeletionNotAllowedException(MessageConstant.SETMEAL_ON_SALE);}});ids.forEach(setmealId - {//删除套餐表中的数据setmealMapper.deleteById(setmealId);//删除套餐菜品关系表中的数据setmealDishMapper.deleteBySetmealId(setmealId);});
} SetmealServiceImpl就是所需的实现类在里面编写删除方法的具体逻辑其中if条件语句是在判断要删除的套餐中是否有菜品正在起售如果有则返回错误信息没有则删除套餐中的数据和套餐菜品关系表中的数据。当然这里没有展示套餐表和菜品表。理解其逻辑就行接着在这里面要实现对套餐中菜品信息的遍历和删除需要用到getById和deteleById以及deleteBySetmealId3个方法。它们都将在mapper持久层中实现。 SetmealMapper /*** 根据id查询套餐* param id* return
*/
Select(select * from setmeal where id #{id})
Setmeal getById(Long id);/*** 根据id删除套餐* param setmealId
*/
Delete(delete from setmeal where id #{id})
void deleteById(Long setmealId); 这是对套餐表进行查询和删除这里我们可以看到在方法上面直接进行sql的实现这是因为这个业务删除的复杂度并不高所以不需要用到动态sql如果需要的话会另外编写在XML文件中。 SetmealDishMapper /*** 根据套餐id删除套餐和菜品的关联关系* param setmealId
*/
Delete(delete from setmeal_dish where setmeal_id #{setmealId})
void deleteBySetmealId(Long setmealId); 这是对套餐菜品关系表进行数据的删除 大概的代码开发逻辑就是这样意会意会这也是对上一篇文章所说的业务逻辑代码开放思路的一个具体解释和举例希望对你有帮助