Day2

Day2

DTO

在软件开发中,DTO(Data Transfer Object,数据传输对象) 是一种专门用于在不同层、模块或系统之间传输数据的设计模式。它的核心作用是封装数据、优化传输、解耦接口,是构建灵活、高效系统的重要工具。

@Data
public class EmployeeDTO implements Serializable {

    private Long id;

    private String username;

    private String name;

    private String phone;

    private String sex;

    private String idNumber;

}

@Data

在 Java 项目中,@Data 是 Lombok 库提供的一个注解,用于自动生成 Java Bean 的getter、setter、toString、equals、hashCode等方法,从而减少样板代码,提高开发效率。


持久层

在软件开发中,持久层(Persistence Layer) 是负责数据持久化的软件层,主要用于将内存中的数据保存到数据库或其他存储系统中,并在需要时重新加载。它是企业应用架构中的关键组成部分,通常位于业务逻辑层(Service 层)和数据存储之间。

举个例子

MyBatis

  • 特点:半自动化 ORM,需要手动编写 SQL,更灵活。

  • 示例(Mapper 接口)

    public interface UserMapper {
        @Insert("INSERT INTO users (username, password) VALUES (#{username}, #{password})")
        void insertUser(User user);
    }
    

响应码500

image

假设客户端发送了一个 POST 请求到/admin/employee,但请求体中缺少必填字段(如name),而服务器端没有对该字段进行非空校验,导致后续代码抛出空指针异常,最终返回这个 500 错误。

-->检查insert语句是否有问题

在 Spring MVC 框架中,@RequestBody 是一个重要的注解,用于将 HTTP 请求的主体内容(Body)绑定到方法参数上。它通常用于处理 JSON、XML 等格式的请求数据,是构建 RESTful API 的核心注解之一。


新增员工

@PostMapping
@ApiOperation("新增员工")
public Result save(@RequestBody EmployeeDTO employeeDTO) {
    log.info("新增员工:{}", employeeDTO);
    employeeService.save(employeeDTO);
    return Result.success();
}

@RequestBody

在 Spring MVC 框架中,@RequestBody 是一个重要的注解,用于将 HTTP 请求的主体内容(Body)绑定到方法参数上。它通常用于处理 JSON、XML 等格式的请求数据,是构建 RESTful API 的核心注解之一。
import io.swagger.v3.oas.annotations.parameters.RequestBody; // 错误的包

import org.springframework.web.bind.annotation.RequestBody; // 正确的包

io.swagger.v3.oas.annotations.parameters.RequestBody 是 Swagger(API 文档工具)的注解,仅用于生成 API 文档时描述请求体,无法让 Spring MVC 将 HTTP 请求体转换为 Java 对象。进行前后端联调时会出现Request failed with status code 500


用户存在,抛出异常

@ExceptionHandler
public Result exceptionHandler(SQLIntegrityConstraintViolationException ex){
    //Duplicate entry 'zhangsan' for key 'employee.idx_username'
    String message = ex.getMessage();
    if(message.contains("Duplicate entry")){
        String[] split = message.split(" ");
        String username = split[2];
        String msg = username + MessageConstant.ALREADY_EXISIS;
        return Result.error(msg);
    }else{
        return Result.error(MessageConstant.UNKNOWN_ERROR);
    }
}

@ExceptionHandler

在 Spring 框架中,@ExceptionHandler 是一个用于统一处理异常的注解,它允许你在控制器(Controller)或全局处理器(ControllerAdvice)中定义异常处理逻辑,使 API 响应更加规范化和用户友好。


对象属性拷贝

//对象属性拷贝
BeanUtils.copyProperties(employeeDTO, employee);

获取ID

image

image


分页查询

员工信息分页查询后端返回的对象类型为:Result

PageHelper.startPage(employeePageQueryDTO.getPage(), employeePageQueryDTO.getPageSize());

PageHelper.startPage(...) 是 MyBatis 分页插件 PageHelper 的核心方法,用于开启分页查询。它通过 ThreadLocal 机制在当前线程中设置分页参数,后续执行的 SQL 查询会被自动拦截并添加分页逻辑(如 LIMITOFFSET)。

格式化日期(了解即可)

image


启动禁用员工账号

@PostMapping("status/{status}")
    @ApiOperation("启用禁用员工账号")
    public Result startOrStop(@PathVariable Integer status, Long id) {
        log.info("启动禁用员工账号:{},{}", status, id);
        employeeService.startOrStop(status, id);
        return Result.success();
    }

返回data数据建议加上泛型,非查询类的则不需要加上泛型

@PathVariable

@PathVariable 是 Spring 框架中的一个注解,用于从 URL 路径中提取变量值并绑定到控制器方法的参数上。这在 RESTful API 设计中非常常见,用于处理动态 URI。

关键特性

  1. 路径变量绑定

    • {id} 是 URL 路径中的变量部分
    • @PathVariable Long id 将路径中的 id 值绑定到方法参数
  2. 参数名映射

    • 如果路径变量名和方法参数名一致,可以省略@PathVariable的 value 属性

    • 如果不一致,需要显式指定:

      @GetMapping("/users/{userId}")
      public User getUser(@PathVariable("userId") Long id) {
          // ...
      }
      

根据xml来实现动态修改属性

<update id="update">
        update employee
        <set>
            <if test = "name != null"> name = #{name}, </if>
            <if test = "username != null"> username = #{username}, </if>
            <if test = "password != null"> password = #{password}, </if>
            <if test = "phone != null"> phone = #{phone}, </if>
            <if test = "sex != null"> sex = #{sex}, </if>
            <if test = "idNumber != null"> id_Number = #{idNumber}, </if>
            <if test = "updateTime != null"> update_Time = #{updateTime}, </if>
            <if test = "updateUser != null"> update_User = #{updateUser}, </if>
            <if test = "status != null"> status = #{status}, </if>
        </set>
        where id = #{id} //如果where没添加修改时会全部进行修改
    </update>

编辑员工

@GetMapping("/{id}")
    @ApiOperation("根据id查询员工信息")
    public Result<Employee> getById(@PathVariable Long id) {
        Employee employee = employeeService.getById(id);
        return Result.success(employee);
    }

如果用PostMapping会显示405,表示 "Method Not Allowed"(方法不允许)。这通常意味着客户端尝试使用服务器不支持的 HTTP 方法访问资源。


导入分类管理

@DeleteMapping

@DeleteMapping 是 Spring 框架中的一个注解,用于将 HTTP DELETE 请求映射到特定的处理方法上。这是 Spring MVC 提供的一个组合注解,等价于@RequestMapping(method = RequestMethod.DELETE),专门用于标识处理 DELETE 请求的控制器方法。

posted @ 2025-07-17 00:56  li_hc  阅读(11)  评论(0)    收藏  举报