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

假设客户端发送了一个 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


分页查询
员工信息分页查询后端返回的对象类型为:Result
PageHelper.startPage(employeePageQueryDTO.getPage(), employeePageQueryDTO.getPageSize());
PageHelper.startPage(...) 是 MyBatis 分页插件 PageHelper 的核心方法,用于开启分页查询。它通过 ThreadLocal 机制在当前线程中设置分页参数,后续执行的 SQL 查询会被自动拦截并添加分页逻辑(如 LIMIT 和 OFFSET)。
格式化日期(了解即可)

启动禁用员工账号
@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。
关键特性
-
路径变量绑定:
{id}是 URL 路径中的变量部分@PathVariable Long id将路径中的 id 值绑定到方法参数
-
参数名映射:
-
如果路径变量名和方法参数名一致,可以省略
@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 请求的控制器方法。
浙公网安备 33010602011771号