# nurtrain-back **Repository Path**: yangyioryy/nurtrain-back ## Basic Information - **Project Name**: nurtrain-back - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-30 - **Last Updated**: 2025-09-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### Springboot 配置 - Springboot中导入的初始包是没有版本的,因为会自动与spring-boot-starter-parent版本保持一致。 - yaml配置文件通过缩进表示更加简洁 - 如果在pom配置文件中,配置了spring-boot-starter-jdbc数据库启动依赖,若在yaml中不配置数据库会报错 ### 补 - 所有的service类都需要开启事务支持 - MybatisX根据表,自动创建初始的entity类,mapper接口,对应的xml文件 - @Transactional(rollbackFor = Exception.class) ->开启事务: Spring 会在调用该类的 public 方法时,自动为该方法开启一个数据库事务 ### OSS云端存储 - 上传下载以及获取路径的方法已经打包在OssService - 最后上传部署在Linux服务器的时候建议把我的AccessKey和id写在环境变量里面,本项目开源,为保证安全。 ### api文档 - 见gitee项目中的wiki ### redis缓存(只有查询或插入的时候用) - 现在reids只要在service方法之前使用 @Cacheable(value = "", key = "")就能实现自动在查询数据库之前先去redis查询,如若无法命中缓存则查询数据库,并将当前信息存储到redis服务器的效果 - 从redis查询得到的结果会自动变成json,存储的也是json,如若需要应自行转化类型 - PS: value 定义缓存分区 "avgResponseTime"(不用理他,就是个名字); - PS: key 定义分区内的唯一键 "1-2023-08-20"(从redis查询的时候键的名字) ### redis缓存(更新的时候) - 调用@CacheEvict(value = "courseCache", key = "#course.id"),这里的course是传入参数,在更新数据库数据后删除在缓存中的数据 - 后面再查询的时候才会被重新加入缓存(有点反逻辑,后面再改) ### 在redis中缓存键值对 - Token::${token} -- 对应LoginUserVo - UserPerms::${user_id} -- 对应用户权限集合 ### 鉴权的方式 - @PermissionRequired() - 格式:@PermissionRequired(value = "权限名称(详情看我在群上发的表格)", category = "类别,属于哪一类操作", enforce=true/false(默认为true,代表是否鉴权,不鉴权=仅日志记录,默认为true,可不写)) - 例子见UserController里的Login - 只有Controller才需要