spring boot 10

一、新增文章分类接口

1. 核心需求

  • 使用 Spring Validation 完成参数校验(分类名 / 别名非空)
  • Service 层自动填充 createUsercreateTimeupdateTime
  • 插入数据到 category

2. 实体类(Category.java

java

运行

复制代码
@Data
public class Category {
    private Integer id; // 主键ID

    @NotEmpty(message = "分类名称不能为空")
    private String categoryName; // 分类名称

    @NotEmpty(message = "分类别名不能为空")
    private String categoryAlias; // 分类别名

    private Integer createUser; // 创建人ID
    private LocalDateTime createTime; // 创建时间
    private LocalDateTime updateTime; // 更新时间
}

3. Controller 层(新增接口)

java

运行

复制代码
@RestController
@RequestMapping("/category")
public class CategoryController {
    @Autowired
    private CategoryService categoryService;

    @PostMapping
    public Result add(@RequestBody @Validated Category category) {
        categoryService.add(category);
        return Result.success();
    }
}

4. Service 层(业务逻辑)

java

运行

复制代码
@Service
public class CategoryServiceImpl implements CategoryService {
    @Autowired
    private CategoryMapper categoryMapper;

    @Override
    public void add(Category category) {
        // 1. 从 ThreadLocal 获取当前登录用户ID
        Map<String, Object> claims = ThreadLocalUtil.get();
        Integer userId = (Integer) claims.get("id");
        
        // 2. 自动填充字段
        category.setCreateUser(userId);
        LocalDateTime now = LocalDateTime.now();
        category.setCreateTime(now);
        category.setUpdateTime(now);
        
        // 3. 调用 Mapper 插入数据
        categoryMapper.add(category);
    }
}

5. Mapper 层(SQL)

java

运行

复制代码
@Mapper
public interface CategoryMapper {
    @Insert("insert into category(category_name, category_alias, create_user, create_time, update_time) " +
            "values(#{categoryName}, #{categoryAlias}, #{createUser}, #{createTime}, #{updateTime})")
    void add(Category category);
}

二、文章分类列表接口

1. 核心需求

  • 查询当前用户创建的所有文章分类
  • 无需参数,直接返回分类列表

2. Controller 层(列表接口)

java

运行

复制代码
@GetMapping
public Result<List<Category>> list() {
    List<Category> categoryList = categoryService.list();
    return Result.success(categoryList);
}

3. Service 层(业务逻辑)

java

运行

复制代码
@Override
public List<Category> list() {
    // 从 ThreadLocal 获取当前登录用户ID
    Map<String, Object> claims = ThreadLocalUtil.get();
    Integer userId = (Integer) claims.get("id");
    return categoryMapper.list(userId);
}

4. Mapper 层(SQL)

java

运行

复制代码
@Select("select * from category where create_user = #{userId}")
List<Category> list(Integer userId);

三、关键注意事项

  1. 参数校验生效

    • 实体类字段添加 @NotEmpty 注解
    • Controller 接口参数前添加 @Validated
    • 确保已引入 spring-boot-starter-validation 依赖
  2. 用户 ID 安全获取

    • 不要由前端传入用户 ID,统一从 ThreadLocal 中获取,避免越权操作
  3. 时间字段自动填充

    • 新增时 createTimeupdateTime 都设置为当前时间
    • 后续更新时,只修改 updateTime 字段
相关推荐
牧瀬クリスだ5 小时前
Java线程——从创建第一个线程到休眠线程
java·开发语言
清水白石0085 小时前
从“点一下导出”到生产级任务队列:Python 异步导出系统设计全景解析
java·数据库·python
Mahir085 小时前
Spring 核心原理:IoC/DI 与 Bean 生命周期全景解析
java·后端·spring·面试·bean生命周期·控制反转ioc·依赖注入di
weixin_489690025 小时前
NAS部署实测:Solon vs Spring Boot,从内存到包体积的“降维打击”
java·spring boot·后端
香蕉鼠片5 小时前
CUDA、PyTorch、Transformers、PEFT 全栈详解
人工智能·pytorch·python
MediaTea5 小时前
PyTorch:张量与基础计算模块
人工智能·pytorch·python·深度学习·机器学习
浪子sunny5 小时前
2026股票实时行情数据Skills技能分享
大数据·人工智能·python
tongluowan0075 小时前
怎么保证缓存和数据库的一致性
java·数据库·缓存·一致性
一条泥憨鱼5 小时前
【Java 进阶】LinkedHashMap 与 TreeMap
java·开发语言·数据结构·笔记·后端·学习