【学习总结|DAY028】后端Web实战(部门管理)

在 Web 后端开发领域,构建高效、规范且功能完备的系统是核心目标。本文将围绕 Tlias 智能学习辅助系统的后端开发展开,详细阐述从开发准备工作到各部门管理功能实现,以及日志技术应用的全过程,为开发者提供全面的实践参考。

一、开发准备

(一)开发模式与规范

前后端分离开发已成为主流趋势。在这种模式下,前端项目和后端项目的开发、部署相互独立。其开发流程包括需求分析、接口设计、前后端并行开发、测试以及联调等环节。这种分离模式有效降低了沟通成本,提高了项目的可维性与可扩展性,明确了前后端开发人员的分工。

RESTful 风格作为一种重要的软件架构风格,在接口设计中具有关键作用。它通过 URL 定位资源,并利用 HTTP 动词描述操作,使得接口简洁、规范且优雅。例如,传统风格下查询用户可能是http://localhost:8080/user/getById?id=1,而 REST 风格则为http://localhost:8080/users/1(GET 请求用于查询)。在实际应用中,描述功能模块时通常采用复数形式,如usersdepts等。

(二)工程搭建

创建 SpringBoot 工程是基础步骤,需引入 web 开发起步依赖、mybatis、mysql 驱动、lombok 等关键依赖。创建数据库表后,在application.yml中配置数据库连接信息,如:

java 复制代码
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/tlias?useSSL=false&serverTimezone=UTC
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver

同时,准备基础代码结构,引入实体类Dept及统一的响应结果封装类Result

java 复制代码
@Data
public class Result {
    private Integer code; // 编码:1成功,0为失败
    private String msg; // 错误信息
    private Object data; // 数据
}

public class Dept {
    private Integer id;
    private String name;
    private LocalDateTime createTime;
    private LocalDateTime updateTime;
}

二、部门管理功能实现

(一)查询部门

接口定义为/depts(GET 请求),用于查询部门列表数据。在后端实现中,DeptController接收请求并调用DeptServicefindAll方法,DeptService再调用DeptMapperfindAll方法执行 SQL 查询select * from dept

java 复制代码
@RestController
public class DeptController {
    @Autowired
    private DeptService deptService;

    @GetMapping("/depts")
    public Result findAll() {
        List<Dept> deptList = deptService.findAll();
        return Result.success(deptList);
    }
}

@Service
public class DeptServiceImpl implements DeptService {
    @Autowired
    private DeptMapper deptMapper;

    @Override
    public List<Dept> findAll() {
        return deptMapper.findAll();
    }
}

@Mapper
public interface DeptMapper {
    @Select("select * from dept")
    public List<Dept> findAll();
}

Mybatis 在数据封装时,若实体类属性名和数据库表字段名一致会自动封装;不一致时,可通过@Results@Result手动结果映射、在 SQL 语句中起别名或开启驼峰命名规则(如mybatis.configuration.map-underscore-to-camel-case=true)来解决。

(二)删除部门

接口/depts(DELETE 请求)根据部门 ID 删除数据。DeptController接收请求参数(可通过HttpServletRequest@RequestParam注解或直接定义同名形参接收),调用DeptServicedelete方法,DeptService再调用DeptMapperdelete方法执行delete from dept where id =?

java 复制代码
@DeleteMapping("/depts")
public Result delete(Integer id) {
    System.out.println("根据ID删除部门数据: " + id);
    deptService.delete(id);
    return Result.success();
}

@Override
public void delete(Integer id) {
    deptMapper.delete(id);
}

@Delete("delete from dept where id = #{id}")
void delete(Integer id);

(三)新增部门

接口/depts(POST 请求)用于添加部门数据,接收 JSON 格式参数(如{"name":"教研部"})。DeptController使用@RequestBody注解将 JSON 数据绑定到Dept实体对象接收,调用DeptServiceadd方法,DeptService补全基础属性后调用DeptMapperadd方法执行insert into dept (name,create_time,update_time) values (?,?,?)

java 复制代码
@PostMapping("/depts")
public Result add(@RequestBody Dept dept) {
    System.out.println("添加部门: " + dept);
    deptService.add(dept);
    return Result.success();
}

@Override
public void add(Dept dept) {
    dept.setCreateTime(LocalDateTime.now());
    dept.setUpdateTime(LocalDateTime.now());
    deptMapper.add(dept);
}

@Insert("insert into dept(name, create_time, update_time) values(#{name}, #{createTime}, #{updateTime})")
void add(Dept dept);

(四)修改部门

此功能包括根据 ID 查询部门(/depts/{id},GET 请求)和修改部门数据(/depts,PUT 请求)两个部分。查询时,DeptController使用@PathVariable注解获取路径参数,调用DeptServicegetInfo方法,DeptService调用DeptMappergetById方法执行select * from dept where id = #{id}。修改时,DeptController接收@RequestBody注解标注的Dept实体对象,调用DeptServiceupdate方法,DeptService补全更新时间后调用DeptMapperupdate方法执行update dept set name = #{name}, update_time = #{updateTime} where id = #{id}

java 复制代码
@GetMapping("/depts/{id}")
public Result getInfo(@PathVariable Integer id) {
    System.out.println("根据ID查询部门数据: " + id);
    Dept dept = deptService.getInfo(id);
    return Result.success(dept);
}

@PutMapping("/depts")
public Result update(@RequestBody Dept dept) {
    System.out.println("修改部门数据: " + dept);
    deptService.update(dept);
    return Result.success();
}

@Override
public Dept getInfo(Integer id) {
    return deptMapper.getById(id);
}

@Override
public void update(Dept dept) {
    dept.setUpdateTime(LocalDateTime.now());
    deptMapper.update(dept);
}

三、日志技术应用

在 Java 项目开发中,日志记录至关重要。常见的日志框架有 JUL(JavaSE 官方提供,配置简单但灵活性和性能欠佳)、Log4j(配置灵活,支持多种输出目标)、Logback(Log4j 的升级版,功能更丰富,性能更优)以及 Slf4j(提供标准接口和抽象类,便于切换底层日志框架)。

以 Logback 为例,快速入门需引入依赖(在 SpringBoot 项目中通常已自动引入相关依赖)并配置logback.xml文件。通过定义Logger对象,如private static final Logger log = LoggerFactory.getLogger(DeptController.class);,可使用log.debuglog.info等方法记录不同级别的日志信息。

Logback 的配置文件可控制日志输出格式、位置(如控制台、系统文件)和日志开关等。常见日志级别从低到高为trace(追踪程序运行轨迹,使用较少)、debug(调试信息,应用较多)、info(重要运行信息,如数据库连接等,应用较多)、warn(警告信息,应用较多)、error(错误信息,应用较多)。在配置文件中可设置日志输出级别,如<root level="info">表示只输出info及以上级别的日志。

在 Tlias 系统的DeptController中,可优化日志记录,如:

java 复制代码
@RestController
@Slf4j
public class DeptController {
    @Autowired
    private DeptService deptService;

    @DeleteMapping("/depts")
    public Result delete(Integer id) {
        log.info("根据ID删除部门: {}", id);
        deptService.delete(id);
        return Result.success();
    }
}

通过上述方式,Tlias 智能学习辅助系统在后端开发中实现了规范的架构搭建、完善的部门管理功能以及有效的日志记录,为系统的稳定运行和后续维护提供了有力保障。在实际开发过程中,开发者可根据项目需求灵活运用这些技术和方法,不断优化系统性能和功能。

相关推荐
xmh-sxh-13143 分钟前
ActiveMQ支持哪些传输协议
java
@泽栖3 分钟前
项目引入MybatisPlus
java·后端·mybatis
夜半无声17 分钟前
spring boot 多数据源集成mysql、postgresql、phoenix、doris等
java·spring boot·后端
网络安全-杰克20 分钟前
【漏洞分析】UDF提权漏洞——CVE-2016-6662-MySQL ‘malloc_lib’变量重写命令执行
数据库·mysql
Retrograde-lx26 分钟前
利用logstash同步100万MySQL数据到es
数据库·mysql·elasticsearch
小猪佩奇TONY31 分钟前
Vulkan 学习(12)---- Vulkan pipeline 创建
java·学习·spring
黄鹂绿柳40 分钟前
django的mysql数据库配置
数据库·mysql
CoderJia程序员甲42 分钟前
MySQL事件功能简介
数据库·mysql·事件调度
xsh801442421 小时前
MySQL派生表合并优化的原理和实现
mysql