目录
前言
一、查询部门功能实现
1. Controller层实现
注解解释:
2. Service层实现
注解解释:
3. Mapper层实现
注解解释:
二、删除部门功能实现
1. Controller层实现
注解解释:
2. Service层实现
3. Mapper层实现
注解解释:
三、添加部门功能实现
1. Controller层实现
注解解释:
2. Service层实现
3. Mapper层实现
注解解释:
四、更新部门功能实现
1. Controller层实现
注解解释:
2.Service层实现
3. Mapper层实现
注解解释:
五、查询单个部门功能实现
1. Controller层实现
注解解释:
2. Service层实现
3. Mapper层实现
六、三层架构详细分析
七、添加日志功能
1. 日志注解说明
2. 带日志的Controller层实现
总结
前言
今天我们来学习,如何基于三层架构来进行增删改查操作,以及日志实现。
一、查询部门功能实现
1. Controller层实现
@RequestMapping("/depts") @RestController public class DeptController { @Autowired private DeptService deptService; //作用目的:查询信息 @GetMapping public Result list(){ List<Dept> depts = deptService.findAll(); return Result.success(depts); } }注解解释:
@RequestMapping("/depts"):设置基础请求路径,所有该控制器的请求都会以/depts开头
@RestController:组合注解,等同于`@Controller + @ResponseBody,表示这是一个RESTful控制器,返回JSON格式数据
@Autowired:自动依赖注入,将`DeptService`的实例注入到控制器中
@GetMapping:处理HTTP GET请求,等同于@RequestMapping(method = RequestMethod.GET)
2. Service层实现
//接口定义: public interface DeptService { //查询所有的部门数据 List<Dept> findAll(); }//实现类: @Service public class DeptServiceImpl implements DeptService { @Autowired private DeptMapper deptMapper; @Override public List<Dept> findAll() { return deptMapper.finAll(); } }注解解释:
@Service:标记这是一个服务层组件,Spring会自动扫描并管理该Bean
@Override:表示该方法重写了接口中的方法
3. Mapper层实现
@Mapper public interface DeptMapper { //SQL语句,查询表 内容 @Select("select id, name, create_time, update_time from dept order by update_time desc ") List<Dept> finAll();注解解释:
@Mapper:标记这是一个MyBatis的Mapper接口,MyBatis会自动为该接口生成实现类
@Select:MyBatis注解,指定SQL查询语句
二、删除部门功能实现
1. Controller层实现
根据id来删除部门,所以要获取id传递
@DeleteMapping public Result delete(@RequestParam Integer id){ deptService.delete(id); return Result.success(); }注解解释:
@DeleteMapping:处理HTTP DELETE请求,等同于@RequestMapping(method = RequestMethod.DELETE)
@RequestParam:获取HTTP请求中的查询参数,参数名与方法参数名一致时可以省略value属性
2. Service层实现
//接口定义: void delete(Integer id);//实现类 @Override public void delete(Integer id) { deptMapper.delete(id); }3. Mapper层实现
@Delete("delete from dept where id=#{id}") void delete(Integer id);注解解释:
@Delete:MyBatis注解,指定SQL删除语句
#{id}:MyBatis的参数占位符,会自动替换为方法参数值
三、添加部门功能实现
1. Controller层实现
传封装的类,因为是添加部门的所有数据
@PostMapping public Result insert(@RequestBody Dept dept){ deptService.add(dept); return Result.success(); }注解解释:
@PostMapping:处理HTTP POST请求,等同于@RequestMapping(method = RequestMethod.POST)
@RequestBody:将HTTP请求体中的JSON数据绑定到方法参数上
2. Service层实现
//接口 void add(Dept dept);//实现类: @Override public void add(Dept dept) { //在Service中把其他两个值,时间定义 dept.setCreateTime(LocalDateTime.now()); dept.setUpdateTime(LocalDateTime.now()); //把dept对象封装给deptMapper deptMapper.insert(dept); }3. Mapper层实现
@Insert("insert into dept (name,create_time,update_time) values (#{name},#{createTime},#{updateTime})") void insert(Dept dept);注解解释:
@Insert:MyBatis注解,指定SQL插入语句
#{name}、#{createTime}、#{updateTime}:MyBatis的参数占位符,会自动从dept对象中获取对应属性值
四、更新部门功能实现
1. Controller层实现
跟添加部门类似
@PutMapping public Result update(@RequestBody Dept dept){ deptService.update(dept); return Result.success(); }注解解释:
@PutMappin:处理HTTP PUT请求,等同于`@RequestMapping(method = RequestMethod.PUT)`
@RequestBody :接收JSON格式的请求体数据,Spring Boot会自动将其转换为对应的Java对象
2.Service层实现
//接口定义: void update(Dept dept);//实现类: @Override public void update(Dept dept) { dept.setUpdateTime(LocalDateTime.now()); deptMapper.update(dept); }3. Mapper层实现
@Update("update dept set name=#{name},update_time=#{updateTime} where id =#{id}") void update(Dept dept);注解解释:
@Update:MyBatis注解,指定SQL更新语句
五、查询单个部门功能实现
1. Controller层实现
@GetMapping("/{id}") public Result search(@PathVariable Integer id){ Dept dept=deptService.search(id); return Result.success(dept); }注解解释:
@GetMapping("/{id}"):处理带路径参数的GET请求,`{id}`是路径参数占位符
@PathVariable:获取URL路径中的参数值,参数名与路径参数名一致时可以省略value属性
2. Service层实现
//接口定义: Dept search(Integer id);//实现类: @Override public Dept search(Integer id) { return deptMapper.search(id); }3. Mapper层实现
@Select("select id, name, create_time, update_time from dept where id=#{id}") Dept search(Integer id);六、三层架构详细分析
三层架构是企业级应用开发中常用的架构模式,它将应用分为三个层次:
1. 表现层(Controller):
- 负责接收和处理HTTP请求
- 调用Service层的方法
- 返回响应结果(通常是JSON格式)
- 主要注解:`@RestController`、`@RequestMapping`、`@GetMapping`等
2. 业务逻辑层(Service):
- 实现核心业务逻辑
- 调用Mapper层的方法
- 处理业务规则和数据转换
- 主要注解:`@Service`
3. 数据访问层(Mapper):
- 负责与数据库交互
- 执行SQL语句
- 主要注解:@Mapper、@Select、@Insert、@Update、@Delete等
三层架构的优势:
- 职责分离:每个层次只负责自己的职责
- 代码复用:Service层的逻辑可以被多个Controller调用
- 易于维护:修改某一层的代码不会影响其他层
- 便于测试:可以单独测试每一层的功能
七、添加日志功能
1. 日志注解说明
在Spring Boot应用中,我们可以使用Lombok的@Slf4j注解来简化日志记录。这个注解会自动生成一个log对象,我们可以使用它来记录不同级别的日志。
@Slf4j注解:
等同于private static final Logger log=LoggerFactory.getLogger(类名)`
-提供了log.info()、log.debug()、log.error()等方法来记录不同级别的日志
2. 带日志的Controller层实现
@Slf4j//日志-等同于private static final Logger log=LoggerFactory.getLogger(类名) @RequestMapping("/depts") @RestController public class DeptController { @Autowired private DeptService deptService; //作用目的:查询信息 @GetMapping public Result list(){ log.info("查看全部部门的数据"); List<Dept> depts = deptService.findAll(); return Result.success(depts); } @DeleteMapping public Result delete(@RequestParam Integer id){ log.info("删除部门:{}",id); deptService.delete(id); return Result.success(); } @PostMapping public Result insert(@RequestBody Dept dept){ log.info("添加部门信息{}",dept); deptService.add(dept); return Result.success(); } @GetMapping("/{id}") public Result search(@PathVariable Integer id){ log.info("查询单个部门信息{}",id); Dept dept=deptService.search(id); return Result.success(dept); } @PutMapping public Result update(@RequestBody Dept dept){ log.info("更新部门信息{}",dept); deptService.update(dept); return Result.success(); } }日志使用说明:
log.info("查看全部部门的数据"):记录一般信息
log.info("删除部门:{}",id):使用占位符记录带参数的信息
log.info("添加部门信息{}",dept):记录对象信息,会自动调用对象的toString()方法
日志的作用:
调试:帮助开发人员了解代码的执行流程
监控:监控系统的运行状态
排查问题:当系统出现问题时,通过日志定位问题原因
审计:记录系统的操作记录,便于后续审计
总结
通过以上实现,我们完成了一个基于Spring Boot的部门管理系统的增删改查功能,采用了标准的三层架构设计,并添加了日志功能。
核心功能:
1. 查询全部部门:GET /depts
2. 删除部门:DELETE /depts?id=1
3.添加部门:POST /depts
4.更新部门:PUT /depts
5. 查询单个部门:GET /depts/1
核心注解:
Controller层:@RestController、@RequestMapping、@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@RequestParam、@PathVariable、@RequestBody
Service层:@Service
Mapper层:@Mapper、@Select、@Insert、@Update、@Delete
日志:@Slf4j
这种三层架构设计使得代码结构清晰,职责分明,便于维护和扩展。通过本文的讲解,您应该能够理解如何使用Spring Boot构建一个完整的RESTful API,实现基本的增删改查功能,并添加日志记录。
我是新手程序猿乐锅。本次分享到此结束,感谢大家的观看与支持!如果本期内容对您有帮助,欢迎点赞、收藏,您的支持将是我持续创作的最大动力,谢谢!