智能學習輔助系統-部門管理開發

文章目錄

  • 準備工作
    • 工程搭建
  • 增刪改查
    • 查詢部門
    • 刪除部門
    • 新增部門
    • 修改部門
      • 查詢回顯
      • 修改數據
  • 日志技術

準備工作

需求:部門管理的查詢、新增、修改、刪除
在這里插入圖片描述
使用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://www.pswp.cn/news/922209.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/922209.shtml
英文地址,請注明出處:http://en.pswp.cn/news/922209.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【圖解】idea中快速查找maven沖突

現象 今天啟動項目時&#xff0c;總是以下報錯&#xff0c;并退出SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/F:/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.13.3/log4j-slf4j-impl-2.13.3.jar!/org/slf4j/im…

LightGBM、XGBoost和CatBoost自定義損失函數和評估指標

LightGBM、XGBoost和CatBoost自定義損失函數和評估指標函數&#xff08;縮放誤差&#xff09;數學原理損失函數定義梯度計算評估指標LightGBM實現自定義損失函數自定義評估指標使用方式XGBoost實現自定義損失函數自定義評估指標使用方式CatBoost實現自定義損失函數自定義評估指…

2025-09-08升級問題記錄: 升級SDK從Android11到Android12

將 Android 工程的 targetSdkVersion 從 30 &#xff08;Android 11&#xff09;升級到 31&#xff08;Android 12&#xff09;需要關注一些重要的行為變更和適配點。 主要適配要點&#xff1a; 適配類別關鍵變更點適配緊迫性簡要說明組件導出屬性聲明了 Intent Filter 的組件…

利用OpenCV實現模板與多個對象匹配

代碼實現&#xff1a;import cv2 import numpy as npimg_rgb cv2.imread(mobanpipei.jpg) img_gray cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY) template cv2.imread(jianto.jpg, flags0) h, w template.shape[:2]# 讀取圖像# # 順時針旋轉 90 度&#xff08;k1&#xff0…

OS28.【Linux】自制簡單的Shell的修bug記錄

目錄 1.問題代碼 2.排查 前期檢查 查找是誰修改了environ[0] 使用gdb下斷點 查看后續的影響 分析出問題的split_commandline函數 3.反思 4.正確代碼 5.結論 6.除此之外...... ★提示: 此bug非常隱蔽,不仔細分析很難查出問題,非常鍛煉調試能力! 1.問題代碼 #includ…

Debian 系統上安裝與配置 MediaMTX

&#x1f3af; 在 Debian 系統上安裝與配置 MediaMTX&#xff08;原 rtsp-simple-server&#xff09;&#xff1a;打造輕量級流媒體服務器 作者&#xff1a;遠在太平洋 環境&#xff1a;Debian 10/11/12 | Ubuntu 可參考 關鍵詞&#xff1a;MediaMTX、rtsp-simple-server、RTSP…

分布式專題——10.4 ShardingSphere-Proxy服務端分庫分表

1 為什么要有服務端分庫分表&#xff1f; ShardingSphere-Proxy 是 ShardingSphere 提供的服務端分庫分表工具&#xff0c;定位是“透明化的數據庫代理”。 它模擬 MySQL 或 PostgreSQL 的數據庫服務&#xff0c;應用程序&#xff08;Application&#xff09;只需像訪問單個數據…

Mysql相關的面試題1

什么是聚集索引&#xff08;聚簇索引&#xff09;&#xff1f;什么是二級索引&#xff08;非聚簇索引&#xff09;&#xff1f; 聚集索引就是葉子節點關聯行數據的索引&#xff0c;二級索引就是葉子節點關聯主鍵的索引&#xff0c;聚集索引必須有且僅有一個&#xff0c;二級索引…

電涌保護器:為現代生活筑起一道隱形防雷網

何為電涌保護器&#xff1f;電涌保護器&#xff08;Surge Protective Device&#xff0c;簡稱SPD&#xff09;主要用于控制信號系統&#xff0c;保護電氣電子設備信號線路免受雷電電磁脈沖、感應過電壓、操作過電壓的影響&#xff0c;廣泛應用于工控、消防、安防監控、交通、電…

【uniapp微信小程序】掃普通鏈接二維碼打開小程序

需求&#xff1a;用戶A保存自己的邀請碼海報&#xff0c;用戶B掃描該普通連接二維碼&#xff0c;打開微信小程序&#xff0c;并且攜帶用戶A的邀請碼信息&#xff0c;用戶B登錄時&#xff0c;跟用戶A關聯&#xff0c;成為用戶A的下級。 tips&#xff1a;保存海報到手機相冊可以參…

LeetCode 378 - 有序矩陣中第 K 小的元素

文章目錄摘要描述題解答案題解代碼分析代碼解析示例測試及結果輸出結果時間復雜度空間復雜度總結摘要 在開發中&#xff0c;我們經常遇到需要處理大規模有序數據的場景&#xff0c;比如數據庫分頁、排行榜查詢、或者處理排序過的矩陣。LeetCode 第 378 題“有序矩陣中第 K 小的…

【Lua】Windows 下編寫 C 擴展模塊:VS 編譯與 Lua 調用全流程

? 目錄 ?&#x1f6eb; 導讀需求環境1?? 核心原理&#xff1a;Windows下Lua與C的交互邏輯2?? Windows下編寫步驟&#xff1a;以mymath模塊為例2.1 步驟1&#xff1a;準備Windows開發環境方式1&#xff1a;官網下載Lua源碼并編譯&#xff08;可控性高&#xff09;方式2&am…

Python快速入門專業版(二十九):函數返回值:多返回值、None與函數嵌套調用

目錄引一、多返回值&#xff1a;一次返回多個結果的優雅方式1. 多返回值的本質&#xff1a;隱式封裝為元組示例1&#xff1a;返回多個值的函數及接收方式2. 多返回值的接收技巧技巧1&#xff1a;用下劃線_忽略不需要的返回值技巧2&#xff1a;用*接收剩余值&#xff08;Python …

python使用pip安裝的包與卸載

1&#xff1a;基本卸載命令 # 卸載單個包 pip uninstall package_name# 示例&#xff1a;卸載requests包 pip uninstall requests2&#xff1a;卸載多個包 # 一次性卸載多個包 pip uninstall package1 package2 package3# 示例 pip uninstall requests numpy pandas3&#xff1…

超級流水線和標量流水線的原理

一、什么是流水線&#xff1f;要理解這兩個概念&#xff0c;首先要明白流水線&#xff08;Pipelining&#xff09; 的基本思想。想象一個汽車裝配工廠&#xff1a;* 沒有流水線&#xff1a;一個工人負責組裝一整輛汽車&#xff0c;裝完一輛再裝下一輛。效率很低。* 有了流水線&…

【Ansible】管理復雜的Play和Playbook知識點

1.什么是主機模式&#xff1f;答&#xff1a;主機模式是Ansible中用于從Inventory中篩選目標主機的規則&#xff0c;通過靈活的模式定義可精準定位需要執行任務的主機。2.主機模式的作用答&#xff1a;篩選目標&#xff1a;從主機清單中選擇一個或多個主機/組&#xff0c;作為P…

FastGPT源碼解析 Agent 智能體應用創建流程和代碼分析

FastGPT對話智能體創建流程和代碼分析 平臺作為agent平臺&#xff0c;平臺所有功能都是圍繞Agent創建和使用為核心的。平臺整合各種基礎能力&#xff0c;如大模型、知識庫、工作流、插件等模塊&#xff0c;通過可視化&#xff0c;在界面上創建智能體&#xff0c;使用全部基礎能…

缺失數據處理全指南:方法、案例與最佳實踐

如何處理缺失數據&#xff1a;方法、案例與最佳實踐 1. 引言 在數據分析和機器學習中&#xff0c;缺失數據是一個普遍存在的問題。如何處理缺失值&#xff0c;往往直接影響到后續分析和建模的效果。處理不當&#xff0c;不僅會浪費數據&#xff0c;還可能導致模型預測結果的不準…

為什么Cesium不使用vue或者react,而是 保留 Knockout

1. Knockout-ES5 插件的語法簡化優勢 自動深度監聽&#xff1a;Cesium 通過集成 Knockout-ES5 插件&#xff0c;允許開發者直接使用普通變量語法&#xff08;如 viewModel.property newValue&#xff09;替代繁瑣的 observable() 包裝&#xff0c;無需手動聲明每個可觀察屬性。…

Word怎么設置頁碼總頁數不包含封面和目錄頁

有時候使用頁碼格式是[第x頁/共x頁]或[x/x]時會遇到word總頁數和實際想要的頁數不一致&#xff0c;導致顯示不統一&#xff0c;這里介紹一個簡單的辦法&#xff0c;適用于比較簡單的情況。 一、wps版本 文章分節 首先將目錄頁與正文頁進行分節&#xff1a;在目錄頁后面選擇插入…