RuoYI
Start
- 注意前后端是否分离,启动后端项目只需要配置mysql数据库即可
- 注意node版本,不能过高或者过低
分页插件pagehelper中的startpage需要紧挨着mybatis查询方法,且只对一条有效
导出操作:在实体类上添加@excel注解,利用mybatis查询出相应数据,最后利用封装好的导出方法
导入操作:在实体类上添加@excel注解,利用封装好的工具类读取文件字节流,最后将读取到的数据写入数据库;
导入模板:利用相应实体类生成;
spring默认的事务处理规则是遇到运行时异常或者error才会进行回滚,检查时异常不会进行回滚操作(事务这一部分的细节没怎么看懂)
全局异常处理:@ControllerAdvice,切面概念;业务层不再需要去捕获异常,而是直接抛异常,所有异常都会在一个地方进行统一处理
权限控制:@PreAuthorize注解
本质:通过向hasPermi函数传递字符串进行相应逻辑判断,最后返回Boolean值
a. 将当前登录用户的所有菜单权限查询出来(sys_menu表中的perms字段)
b. 将接口传递的字符串参数与上述查询的菜单权限列表进行比对,看是否包含于该列表中
角色是权限的集合,此处的权限字符表示角色控制;此处的菜单权限才是重中之重!(每一个菜单在sys_menu表中对应一条记录,每一条记录中的perms字段即是用于@PreAuthorize注解校验)
所以也就是说,前端在创建新的菜单时,其实这个权限字符是必须的,且最好与后端接口约定好,但这也是前后端沟通的麻烦之处!
@Log注解
自定义注解的本质还是AOP:定义注解、使用注解、发现注解
切面如何获取到该注解位置???
多线程异步任务
本质:AsyncFactory类负责构建TimerTask任务,然后交由AsyncManager类通过线程池进行执行
https://www.cnblogs.com/ReturnOfTheKing/p/17989174
代码生成
本质是模板的渲染,相关模板路径为
BDCloud-generator/src/main/resources/vm/java/controller.java.vm
定时任务
注:
1、调用方法表达式:bean名称+方法名
2、任务的状态控制:
调度器内部的resumJob、pauseJob方法实现
字典管理
将一些枚举值放入字典中,便于动态管理
sys_dict_type和sys_dict_data通过字典标签dict_type进行关联
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类