文章目錄
- 準備工作
- 工程搭建
- 增刪改查
- 查詢部門
- 刪除部門
- 新增部門
- 修改部門
- 查詢回顯
- 修改數據
- 日志技術
準備工作
需求:部門管理的查詢、新增、修改、刪除
使用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>