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

【JavaWeb学习Day14】

Tlias智能学习系统

04新增部门

思路分析:

明确了查询部门的需求之后,再来梳理一下实现该功能时,三层架构每一层的职责:

Controller:1.接收请求参数 2.调用service层 3.响应结果

Service:1.补全基础属性。2.调用Mapper接口方法

Mapper:insert into dept (name,create_time,update_time) values (?,?,?);(SQL)

代码实现:

1). Controller层

接收json格式的请求参数:POST /depts {"name":"教研部"}

JSON格式的参数,通常会使用一个实体对象进行接收。

规则:JSON数据的键名与方法形参对象的属性名相同,并需要使用@RequestBody注解标识。

/**
 * 新增部门
 */
@PostMapping("/depts")
public Result add(@RequestBody Dept dept){
    System.out.println("新增部门:"+dept);
    return Result.success();
}

2). Service层

@Override
public void add(Dept dept) {
    //1.补全基础属性:createTime,updateTime
    dept.setCreateTime(LocalDateTime.now());
    dept.setUpdateTime(LocalDateTime.now());
    //2.调用Mapper接口方法插入数据
    daotMapper.insert(dept);
}

3). Mapper层

/**
 * 新增部门
 */
@Insert("insert into dept (name,create_time,update_time) values (#{name},#{createTime},#{updateTime});")
void insert(Dept dept);

05修改部门

需求分析:

1.查询回显

思路分析:

明确了查询部门的需求之后,再来梳理一下实现该功能时,三层架构每一层的职责:

Controller:1.接收请求参数(路径参数) 2.调用service层 3.响应结果

Service:调用Mapper接口方法

Mapper:select * from dept where id = ?;(SQL)

代码实现:

1). Controller层

接收请求参数(路径参数):GET /dept/1

路径参数:通过URL直接传递参数,使用{...}来识别该路径参数,需要使用@PathVariable获取

    /**
     * 根据ID查询部门
     */
//    @GetMapping("/depts/{id}")
//    public Result getInfo(@PathVariable("id") Integer deptId){
//        System.out.println("根据ID查询部门:"+deptId);
//        return Result.success();
//    }
        @GetMapping("/depts/{id}")
    public Result getInfo(@PathVariable Integer id){
        System.out.println("根据ID查询部门:"+ id);
        Dept dept = deptService.getById(id);
        return Result.success(dept);
        }

2). Service层

@Override
public Dept getById(Integer id) {
    return daotMapper.getById(id);
}
3). Mapper层

/**
 * 根据ID查询部门数据
 */
@Select("select id, name, create_time, update_time from dept where id = #{id};")
Dept getById(Integer id);

2.修改数据

思路分析:

明确了查询部门的需求之后,再来梳理一下实现该功能时,三层架构每一层的职责:

Controller:1.接收请求参数(json参数) 2.调用service层 3.响应结果

Service:1.补全基础属性。2.调用Mapper接口方法。

Mapper:update dept set name = ? ,update_time=? where id =?;(SQL)

代码实现:

1). Controller层

接收json格式的请求参数:POST /depts {"id":8,"name":"财务部"}

JSON格式的参数,通常会使用一个实体对象进行接收。

规则:JSON数据的键名与方法形参对象的属性名相同,并需要使用@RequestBody注解标识。

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

2). Service层

@Override
public void update(Dept dept) {
    //1.补全基础属性:updateTime
    dept.setUpdateTime(LocalDateTime.now());
    //2.调用Mapper接口方法更新部门
    deptMapper.update(dept);
}

3). Mapper层

/**
 * 更新部门
 * @param dept
 */
@Update("update dept set name = #{name} ,update_time=#{updateTime} where id =#{id};")
void update(Dept dept);

06日志技术

简介:

定义:程序中的日志,是用来记录应用程序的运行信息、状态信息、错误信息等。

作用:数据追踪、新能优化、问题排查、系统监控

技术:

1.JUL(java.util.logging):这是javaSE平台提供的官方日志框架,也被称为JUL。配置相对简单,性能较差。

2.Log4j:一个流行的日志框架,提供了灵活的配置选项,支持多种输出目标。

3.Logback:基础Log4j升级而来,提供了更多的功能和配置选项,性能优于Log4j。

4.Slf4j(Simple Logging Facede for Java):简单日志门面,提供了一套日志操作的标准接口和抽象类,允许应用程序使用不同的底层日志框架。

Logback快速入门:

准备工作:引入logback的依赖(springboot项目中该依赖已经传递)、配置文件logback.xml。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度  %logger{50}: 最长50个字符(超出.切割)  %msg:日志消息,%n是换行符 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>
    
    <!-- 日志输出级别 -->
    <root level="debug">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

记录日志:定义日志记录对象Logger,记录日志。

package com.itheima;
​
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
​
import java.time.LocalDateTime;
​
public class LogTest {
​
    private static final Logger log = LoggerFactory.getLogger(LogTest.class);
    @Test
    public void testLog(){
        //System.out.println(LocalDateTime.now() + " : 开始计算...");
​
        log.debug("开始计算...");
        int sum = 0;
        int[] nums = {1, 5, 3, 2, 1, 4, 5, 4, 6, 7, 4, 34, 2, 23};
        for (int num : nums) {
            sum += num;
        }
        log.info("计算结果为"+sum);
        //System.out.println("计算结果为: "+sum);
        //System.out.println(LocalDateTime.now() + "结束计算...");
        log.debug("结束计算...");
    }
​
}

private static final Logger log = LoggerFactory.getLogger(LogTest.class);(固定)

Logback配置文件详解:

配置文件名:logback.xml

该配置文件是对logback日志框架输出的日志进行控制的,可以采用配置输出的格式、位置以及日志开关等。

常用的两种输出日志的位置:控制台、系统文件

开启日志(ALL),关闭日志(OFF)

<?xml version="1.0" encoding="UTF-8"?>
<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="ALL">
       <appender-ref ref="STDOUT" />
       <appender-ref ref="FILE" />
    </root>
</configuration>
Logback日志级别:

日志级别指的是日志信息的类型,日志都会分级别,常见的日志级别如下(优先级由低到高):

日志级别说明记录方式
trace追踪,记录程序运行轨迹 【使用很少】log.trace("...")
debug调试,记录程序调试过程中的信息,实际应用中一般将其视为最低级别 【使用较多】log.debug("...")
info记录一般信息,描述程序运行的关键事件,如:网络连接、io操作 【使用较多】log.info("...")
warn警告信息,记录潜在有害的情况 【使用较多】log.warn("...")
error错误信息 【使用较多】log.error("...")

可以在配置文件logback.xml中,灵活的控制输出那些类型的日志。(大于等于配置的日志级别的日志才会输出)

<!-- 日志输出级别 -->
<root level="info">
    <!--输出到控制台-->
    <appender-ref ref="STDOUT" />
    <!--输出到文件-->
    <appender-ref ref="FILE" />
</root>


http://www.kler.cn/a/529669.html

相关文章:

  • 消息队列应用示例MessageQueues-STM32CubeMX-FreeRTOS《嵌入式系统设计》P343-P347
  • 探索数学:从起源到未来的无尽旅程
  • 微机原理与接口技术期末大作业——4位抢答器仿真
  • Android 音视频编解码 -- MediaCodec
  • 用c语言实现驱动表,用于对驱动的管理及输入输出
  • TensorFlow 示例摄氏度到华氏度的转换(一)
  • Windows上的本地化部署通义千问qwen,含API调用流式和非流式调用demo
  • 通信易懂唠唠SOME/IP——SOME/IP协议简介
  • UE5 蓝图学习计划 - Day 5:复习与整合实践
  • 3D图形学与可视化大屏:什么是材质属性,有什么作用?
  • 【Block总结】Shuffle Attention,新型的Shuffle注意力|即插即用
  • 在C语言中使用条件变量实现线程同步
  • w187社区养老服务平台的设计与实现
  • M|哪吒之魔童闹海
  • 【网络】传输层协议TCP(重点)
  • Python虚拟环境
  • Redis万字面试题汇总
  • 虚幻基础16:locomotion direction
  • 使用ollama在本地部署一个deepseek大模型
  • 面渣逆袭之Java基础篇3
  • LLMs之DeepSeek:Math-To-Manim的简介(包括DeepSeek R1-Zero的详解)、安装和使用方法、案例应用之详细攻略
  • XML DOM 节点
  • 详解Kafka并行计算架构
  • 深入了解 ls 命令及其选项
  • 【AI】探索自然语言处理(NLP):从基础到前沿技术及代码实践
  • unity免费资源2025-2-2