当前位置: 首页 > news >正文

智能学习辅助系统-部门管理开发

文章目录

  • 准备工作
    • 工程搭建
  • 增删改查
    • 查询部门
    • 删除部门
    • 新增部门
    • 修改部门
      • 查询回显
      • 修改数据
  • 日志技术

准备工作

需求:部门管理的查询、新增、修改、删除
在这里插入图片描述
使用REST风格的URL:

  • GET : 查询
  • POST :新增
  • PUT : 修改
  • DELETE :删除

调试工具:Apifox
集成了Api文档、Api调试、Api Mock、Api测试的一体化协作平台。

工程搭建

创建SpringBoot工程,并引入web开发起步依赖、mybatis、mysql驱动、lombok。
创建tlias数据库,并准备dept部门表。

CREATE TABLE dept (id int unsigned PRIMARY KEY AUTO_INCREMENT COMMENT 'ID, 主键',name varchar(10) NOT NULL UNIQUE COMMENT '部门名称',create_time datetime DEFAULT NULL COMMENT '创建时间',update_time datetime DEFAULT NULL COMMENT '修改时间'
) COMMENT '部门表';INSERT INTO dept VALUES (1,'学工部','2023-09-25 09:47:40','2024-07-25 09:47:40'),(2,'教研部','2023-09-25 09:47:40','2024-08-09 15:17:04'),(3,'咨询部','2023-09-25 09:47:40','2024-07-30 21:26:24'),(4,'就业部','2023-09-25 09:47:40','2024-07-25 09:47:40'),(5,'人事部','2023-09-25 09:47:40','2024-07-25 09:47:40'),(6,'行政部','2023-11-30 20:56:37','2024-07-30 20:56:37');

在application.yml中配置数据库连接信息

spring:application:name: tlias-web-management#mysql连接配置datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/tliasusername: rootpassword: 1234
mybatis:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

准备包结构,引入实体类Dept及统一的响应结果封装类Result
在这里插入图片描述
实体类Dept:(lombok有问题,重写了getter、setter)

package com.baichu.poji;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.time.LocalDateTime;@Data
//@NoArgsConstructor
//@AllArgsConstructor
public class Dept {private Integer id;private String name;private LocalDateTime createTime;private LocalDateTime updateTime;// Getter and Setter for idpublic Integer getId() {return id;}public void setId(Integer id) {this.id = id;}// Getter and Setter for namepublic String getName() {return name;}public void setName(String name) {this.name = name;}// Getter and Setter for createTimepublic LocalDateTime getCreateTime() {return createTime;}public void setCreateTime(LocalDateTime createTime) {this.createTime = createTime;}// Getter and Setter for updateTimepublic LocalDateTime getUpdateTime() {return updateTime;}public void setUpdateTime(LocalDateTime updateTime) {this.updateTime = updateTime;}// toString method@Overridepublic String toString() {return "Dept{" +"id=" + id +", name='" + name + '\'' +", createTime=" + createTime +", updateTime=" + updateTime +'}';}
}

统一响应结果Result

package com.baichu.poji;import lombok.Data;import java.io.Serializable;/*** 后端统一返回结果*/
@Data
public class Result {private Integer code; //编码:1成功,0为失败private String msg; //错误信息private Object data; //数据// 无参构造函数public Result() {}// Getter and Setter for codepublic Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}// Getter and Setter for msgpublic String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}// Getter and Setter for datapublic Object getData() {return data;}public void setData(Object data) {this.data = data;}public static Result success() {Result result = new Result();result.code = 1;result.msg = "success";return result;}public static Result success(Object object) {Result result = new Result();result.data = object;result.code = 1;result.msg = "success";return result;}public static Result error(String msg) {Result result = new Result();result.msg = msg;result.code = 0;return result;}@Overridepublic String toString() {return String.format("Result{code=%d, msg='%s', data=%s}",code, msg,(data != null) ? data.toString() : "null");}
}

DeptMapper

package com.itheima.mapper;import org.apache.ibatis.annotations.Mapper;@Mapper
public interface DeptMapper {
}
DeptService
package com.itheima.service;public interface DeptService {
}
DeptServiceImpl
package com.itheima.service.impl;import com.itheima.service.DeptService;
import org.springframework.stereotype.Service;@Service
public class DeptServiceImpl implements DeptService {
}

DeptController

package com.itheima.controller;import org.springframework.web.bind.annotation.RestController;/*** 部门管理控制器*/
@RestController
public class DeptController {
}

增删改查

查询部门

需求:查询所有的部门数据,查询出来展示在部门管理的页面中。
Controller层

/*** 查询部门列表* @return*/
//@RequestMapping(value = "/depts",method = RequestMethod.GET)
@GetMapping("/depts")
public Result list(){log.info("查询全部部门数据");//System.out.println("查询全部部门数据");List<Dept> deptlist = deptService.findAll();return Result.success(deptlist);
}

Service层
在 DeptService 中,增加 findAll方法

List<Dept> findAll();

在 DeptServiceImpl 中,增加 findAll方法

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

Mapper层
在 DeptMapper 中,增加 findAll方法

@Select("select id, name, create_time createTime,update_time updateTime from dept order by create_time desc")
List<Dept> findAll();

接口测试
在这里插入图片描述

删除部门

删除部门数据。在点击 “删除” 按钮,会根据ID删除部门数据。

Controller层

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

Service层
在 DeptService 中,增加 deleteById 方法

void deleteById(Integer id);

在 DeptServiceImpl 中,增加 deleteById 方法

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

Mapper层
在 DeptMapper 中,增加 deleteById 方法

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

接口测试
在这里插入图片描述

新增部门

点击 “新增部门” 的按钮之后,弹出新增部门表单,填写部门名称之后,点击确定之后,保存部门数据。

Controller层

/*** 增加部门*/
@PostMapping("/depts")
public Result add(@RequestBody Dept dept){log.info("增加部门");deptService.add(dept);return Result.success();
}

Service层
在 DeptService 中,增加 deleteById 方法

void add(Dept dept);

在 DeptServiceImpl 中,增加 deleteById 方法

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

Mapper层
在 DeptMapper 中,增加 deleteById 方法

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

接口测试
在这里插入图片描述

修改部门

对于任何业务的修改功能来说,一般都会分为两步进行:查询回显、修改数据。

查询回显

当我们点击 “编辑” 的时候,需要根据ID查询部门数据,然后用于页面回显展示。

Controller层

/*** 根据id查找* @param id* @return*/
@GetMapping("/depts/{id}")
public Result getInfo(@PathVariable Integer id){log.info("根据id查找部门:"+id);Dept dept = deptService.getInfo(id);return Result.success(dept);
}

Service层
在 DeptService 中增加 getById方法

Dept getInfo(Integer id);

在 DeptServiceImpl 中增加 getById方法

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

Mapper层
在 DeptMapper 中增加 getById 方法

@Select("select id, name, create_time createTime,update_time updateTime from dept where id = #{id}")
Dept getInfo(Integer id);

修改数据

查询回显回来之后,就可以对部门的信息进行修改了,修改完毕之后,点击确定,此时,就需要根据ID修改部门的数据。

Controller层

/*** 修改部门*/
@PutMapping("/depts")
public Result upDate(@RequestBody Dept dept){log.info("修改部门");deptService.upDate(dept);return Result.success();
}

Service层
在 DeptService 中增加 update 方法。

void upDate(Dept dept);

在 DeptServiceImpl 中增加 update 方法。 由于是修改操作,每一次修改数据,都需要更新updateTime。

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

Mapper层
在 DeptMapper 中增加 update 方法

@Update("update dept set name = #{name},update_time = #{updateTime} where id = #{id}")
void update(Dept dept);

接口测试
在这里插入图片描述

日志技术

日志框架:

  • JUL:这是JavaSE平台提供的官方日志框架,也被称为JUL。配置相对简单,但不够灵活,性能较差。
  • Log4j:一个流行的日志框架,提供了灵活的配置选项,支持多种输出目标。
  • Logback:基于Log4j升级而来,提供了更多的功能和配置选项,性能由于Log4j。
  • Slf4j:(Simple Logging Facade for Java)简单日志门面,提供了一套日志操作的标准接口及抽象类,允许应用程序使用不同的底层日志框架。

引入配置文件 logback.xml:

<configuration><!--  控制台输出  --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!-- 格式化输出:%d 表示日期,%thread 表示线程名,%-5level表示级别从左显示5个字符宽度,%logger显示日志记录器的名称, %msg表示日志消息,%n表示换行符  --><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}-%msg%n</pattern></encoder></appender><!--  系统文件输出  --><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!--  日志文件输出的文件名, %i表示序号  --><FileNamePattern>D:/tlias-%d{yyyy-MM-dd}-%i.log</FileNamePattern><!--  最多保留的历史日志文件数量  --><MaxHistory>30</MaxHistory><!--  最大文件大小,超过这个大小会触发滚动到新文件,默认为 10MB  --><maxFileSize>10MB</maxFileSize></rollingPolicy><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!-- 格式化输出:%d 表示日期,%thread 表示线程名,%-5level表示级别从左显示5个字符宽度,%msg表示日志消息,%n表示换行符  --><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}-%msg%n</pattern></encoder></appender><!--  日志输出级别  --><root level="INFO"><appender-ref ref="STDOUT"/><appender-ref ref="FILE"/></root>
</configuration>

文章转载自:

http://xtthCaFR.tdwjj.cn
http://x8TZbbqF.tdwjj.cn
http://KsDfEQWo.tdwjj.cn
http://zvefHAeV.tdwjj.cn
http://JX6Vdk5g.tdwjj.cn
http://cGN1o4eJ.tdwjj.cn
http://HNIJMoAO.tdwjj.cn
http://FpFtzviO.tdwjj.cn
http://19ixQZKy.tdwjj.cn
http://XxVjrEWW.tdwjj.cn
http://pElzPgYq.tdwjj.cn
http://crXUKrHx.tdwjj.cn
http://3rA6aeK0.tdwjj.cn
http://qY7z0vK7.tdwjj.cn
http://9w6B0Qb7.tdwjj.cn
http://iTqvxbAI.tdwjj.cn
http://IWanjl7Z.tdwjj.cn
http://bEfFUv5h.tdwjj.cn
http://FgWPQsi7.tdwjj.cn
http://rsLOlVDX.tdwjj.cn
http://U3OTSFAs.tdwjj.cn
http://hlGinayt.tdwjj.cn
http://JpdPb8kl.tdwjj.cn
http://dvNfDif4.tdwjj.cn
http://sh3RnJoi.tdwjj.cn
http://je4FlUJl.tdwjj.cn
http://mBVEGIqT.tdwjj.cn
http://XWswsvGX.tdwjj.cn
http://KuiqYDXa.tdwjj.cn
http://WzjwjhX0.tdwjj.cn
http://www.dtcms.com/a/381780.html

相关文章:

  • 01数据结构-初探动态规划
  • 数据结构 -- 反射、枚举以及lambda表达式
  • 【C++11】initializer_list列表初始化、右值引用和移动语义、可变参数模版等
  • 设计模式(C++)详解——建造者模式(2)
  • CSS 中的 `vh`!在移动设备上的替代方案->`dvh`
  • 叩丁狼K8s - 概念篇
  • 论文阅读 2025-9-9 多模态相关
  • 豆包、Kimi、通义千问、DeepSeek、Gamma、墨刀 AI”六款主流大模型(或 AI 平台)生成 PPT 的完整流程
  • 基于SpringBoot的足球论坛系统+论文示例参考
  • uniapp 实现项目多语言切换
  • 03.【Linux系统编程】基础开发工具1(yum软件安装、vim编辑器、编辑器gcc/g++)
  • Win10 上 Debian 12 如何安装 Redis ?
  • 中级统计师-统计法规-第十章 统计执法监督检查
  • 【矩阵找最大小所在位置】2022-11-13
  • kafka遇到的问题
  • 【Linux】系统部分——线程概念与地址空间
  • 即梦AI快速P图
  • C盘扩容笔记
  • arm64架构下docker部署freeswitch
  • python---__new__函数
  • 2025.9.11英语红宝书
  • Oracle体系结构-数据文件(Data Files)
  • 【51单片机单按键控制2个LED循环闪烁】2022-12-7
  • 【报错分析】解决Chrome浏览器HSTS拦截问题的两种方案
  • 【系统架构设计(28)】计算机系统组成详解:从硬件到软件的解析
  • 护城河式编程模式:黑色幽默中的工程生存学
  • Kotlinx.serialization 使用讲解
  • PCA(主成分分析,Principal Component Analysis) 如何实现从多个指标到少量个主成分降维不失真?
  • Neural ODE原理与PyTorch实现:深度学习模型的自适应深度调节
  • css `lh`单位