spring boot 10

一、新增文章分类接口

1. 核心需求

  • 使用 Spring Validation 完成参数校验(分类名 / 别名非空)
  • Service 层自动填充 createUser、createTime、updateTime
  • 插入数据到 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. 时间字段自动填充:

    • 新增时 createTime 和 updateTime 都设置为当前时间
    • 后续更新时,只修改 updateTime 字段
相关推荐
高级程序源18 分钟前
springboot校园外卖平台13676-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·tomcat·maven·课程设计
怦然丶心动26 分钟前
用 Java 把干支历法算清楚:从节气切年到可读摘要
java·算法·vue·独立开发·spring boot / spring
计算机编程指导师31 分钟前
计算机大数据项目推荐:基于Hadoop+Django的人工智能社交媒体情绪数据分析可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·spark·毕业设计·社交媒体
青春逝如流水32 分钟前
Java 线程与操作系统、硬件的关系:状态、映射与差异
java·开发语言·多线程·ai文章
深入云栈33 分钟前
Netty 4.2.x 源码深度解析 (十八):ChannelOutboundBuffer 写缓冲区 —— 发送队列与流量控制
java·后端·架构
我是人✓36 分钟前
Java核心术语与内存机制深度解析
java
xuxigifxfh39 分钟前
面试记录2026
java·mysql·面试·职场和发展
liangbo740 分钟前
04-List 到底该用哪个?ArrayList、LinkedList、Vector、CopyOnWriteArrayList 选型实战
java
Wang's Blog1 小时前
Java 中间件之 RabbitMQ 快速入门: SpringAMQP WorkQueue 工作队列模型
java·中间件·java-rabbitmq
代码山河1 小时前
第一个Java程序:Hello World从零编写与运行
java·学习·架构·教程·面向对象·项目