@TableField
作用:
- 当数据库中的列名与实体类中的属性名不一致,使用
@TableField
使其对应
@TableField("db_column_name")
private String entityFieldName;
-
通过
exist
属性来指定该字段是否参与数据库的增删改查操作。@TableField(exist = false) private String tempField; // 该字段不会参与数据库操作
-
实现自动填充,标注在需要自动填充的字段上,支持插入时自动填充或更新时自动填充。
@TableField(fill = FieldFill.INSERT) private Date createTime; // 插入时自动填充
-
指定更新策略,控制字段的更新方式。
@TableField(updateStrategy = FieldStrategy.NOT_NULL) private String name; // 只有字段不为空时才更新
例:
//指定填充策略,插入时填充
@TableField(fill = FieldFill.INSERT)
private Long createUser;
//插入,更新时填充
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updateUser;
@pathvariable
:用于指定路径参数,不带问号的,比如category/1
这种形式.- 下面的url中,id直接以
键值对
形式跟在?
后,明确地说明了这就是id
的值,不用加@pathvariable
注解.
http://localhost:8080/category?id=12345
@DeleteMapping
public R<String> delete( Long id){
categoryService.remove(id);
return R.success("删除菜品分类成功!");
}
前端提交过来的得是json
格式的数据才用@RequestBody
注解 , 不是说看见对象就用@RequestBody
注解
@Transactional
: 这个注解表示方法内的所有数据库操作要么都成功,要么都失败。如果某个操作出现异常,事务会回滚,来确保数据一致性, 操作多张表的时候需要用到
BeanUtils.copyProperties
方法
BeanUtils.copyProperties
: Apache Commons BeanUtils
提供的静态方法,用于将源对象的属性值拷贝到目标对象中。
方法签名:
public static void copyProperties(Object dest, Object orig, String... ignoreProperties) throws BeansException;
dest
: 目标对象orig
: 源对象ignoreProperties
: 可变参数,指定被忽略的属性
注意点:
- 类型匹配:
BeanUtils.copyProperties
会根据属性名和类型自动匹配。如果目标对象的属性类型与源对象不一致,则拷贝会失败。 - 忽略字段:如果目标对象不包含源对象的某个属性(或某个属性类型不匹配),则会跳过这个字段的拷贝。
REST标准 HTTP 方法:
- GET:获取资源。查询
- POST:创建资源。保存,创建
- PUT:更新资源。更新
- DELETE:删除资源。
MD5算法:
MD5是一种广泛使用的哈希算法,用于生成一个固定长度的(128位)哈希值(通常表示为32位十六进制数)。它将任意长度的输入数据(如文本、文件等)映射为一个固定大小的输出值。
特点:
1.单向性:一旦输入数据被哈希为MD5值,就无法从哈希值推回原始数据。
2.输出固定长度:无论输入数据多大,MD5哈希值的长度始终是128位(32个字符的十六进制表示)。
3.敏感性:即使输入数据稍微改变(比如改变一个字符),其输出的MD5哈希值也会发生巨大变化。
用途:
4.数据完整性验证:MD5常用于文件下载时进行完整性校验,通过比较文件的MD5值来检查文件是否被篡改。
5.密码存储:虽然在过去,MD5被用于存储密码的哈希,但由于其安全性较低(容易碰撞),现代应用中一般更倾向于使用更安全的算法,如SHA-256或bcrypt。
6.数字签名和证书:在一些场景中,MD5也用于生成数据的唯一标识。
安全性问题:容易受到“碰撞攻击”(即两个不同输入产生相同哈希值)。
MP查询
LambdaQueryWrapper
: 用于构造查询条件的工具类,可以通过lambda表达式来确保条件的正确,避免手动拼接字符串导致的错误和SQL
注入问题
示例:
queryWrapper.eq(Employee::getUsername, employee.getUsername());
queryWrapper.eq(...)
:用于添加 等值查询 条件。.eq
表示 “等于” (=
).
LambdaQueryWrapper
查询方法:
方法 | 描述 | 示例代码 |
---|---|---|
eq | 等于 | queryWrapper.eq(Employee::getAge, 25); |
ne | 不等于 | queryWrapper.ne(Employee::getAge, 25); |
gt | 大于 | queryWrapper.gt(Employee::getAge, 25); |
lt | 小于 | queryWrapper.lt(Employee::getAge, 25); |
ge | 大于等于 | queryWrapper.ge(Employee::getAge, 25); |
le | 小于等于 | queryWrapper.le(Employee::getAge, 25); |
like | 模糊匹配 | queryWrapper.like(Employee::getName, "John"); |
likeLeft | 左模糊匹配 | queryWrapper.likeLeft(Employee::getName, "John"); |
likeRight | 右模糊匹配 | queryWrapper.likeRight(Employee::getName, "John"); |
in | 包含 | queryWrapper.in(Employee::getAge, 20, 25, 30); |
notIn | 不包含 | queryWrapper.notIn(Employee::getAge, 20, 25, 30); |
isNull | 字段为 NULL | queryWrapper.isNull(Employee::getPhone); |
isNotNull | 字段不为 NULL | queryWrapper.isNotNull(Employee::getPhone); |
between | 字段范围 | queryWrapper.between(Employee::getAge, 20, 30); |
orderByAsc | 升序排序 | queryWrapper.orderByAsc(Employee::getAge); |
orderByDesc | 降序排序 | queryWrapper.orderByDesc(Employee::getAge); |
select | 选择字段 | queryWrapper.select(Employee::getName, Employee::getAge); |
last | 拼接 SQL | queryWrapper.last("LIMIT 5"); |
groupBy | 分组 | queryWrapper.groupBy(Employee::getDepartment); |
having | HAVING 子句 | queryWrapper.having("count(id) > 5"); |
异常处理器
package warren.reggie.common;
/*
* author: Warren
*/
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.sql.SQLIntegrityConstraintViolationException;
@ControllerAdvice(annotations = {RestControllerAdvice.class, Controller.class}) // 处理加了这些注解的类(@RestController 或 @Controller)
@ResponseBody // 返回的对象会自动序列化为JSON,直接作为HTTP响应体返回
public class ExceptionHandler {
/**
* 处理SQLIntegrityConstraintViolationException异常。
* @param ex 捕获的异常对象
* @return 返回错误信息的响应对象(R类)
*/
@org.springframework.web.bind.annotation.ExceptionHandler(SQLIntegrityConstraintViolationException.class)
public R<String> ExceptionHandler(SQLIntegrityConstraintViolationException ex) {
System.out.println("异常信息:" + ex.getMessage());
if (ex.getMessage().contains("Duplicate entry")) {
//将异常信息按空格拆分并取出相关字段
String[] s = ex.getMessage().split(" ");
// 错误信息提取:获取重复条目的字段值,通常是数据库的唯一键(如用户名、手机号等)
String msg = s[2] + "已存在"; // 提示用户该数据已存在
return R.error(msg);
}
// 如果不是重复数据的错误,则返回通用的错误信息
return R.error("出错了");
}
}
@ExceptionHandler
: 捕获并处理指定类型的异常。
@ControllerAdvice
: 集中处理所有控制器类中抛出的异常。应用于所有带有 @Controller
或 @RestController
注解的类.