若依框架使用

旧城等待, 2022-11-17 13:34 994阅读 0赞

官方文档 https://doc.ruoyi.vip/ruoyi-vue/

自动生成代码工具的使用

  1. 导入,将准备生成模板的表进行导入
  2. 编辑,修改 基本信息、字段信息、生成信息

    • 基本信息中修改作者!!!
    • 字段信息按需调整
    • 生成信息 - 自定义路径 D:\hzsj-frame\hz-frame\frame-knife4j\src
      在这里插入图片描述
  3. 预览
  4. 生成代码
  5. 将自动生成的文件移动到对应的模块下(包)— 后期优化

后期待调整

  1. 后端代码中按照模块名进行分包生成
  2. 前端代码自动生成

框架中用户体系的讲解

主表:用户表 sys_user | 部门表 sys_dept | 角色表 sys_role | 岗位表 sys_post | 菜单表 sys_menu

关联表:用户角色表 sys_user_role | 用户岗位 sys_user_post | 角色部门表 sys_role_dept |角色菜单表sys_role_menu

表设计

在这里插入图片描述

获取用户token

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RpYW4zMzA3MjY_size_16_color_FFFFFF_t_70_pic_center 2

接口调用示例

在这里插入图片描述

获取用户、部门相关信息

参考:com.chinaoly.knife4j.controller.map.MapFiveColorController.getInfo

  1. // 获取用户信息
  2. LoginUser loginUser = SecurityUtils.getLoginUser();
  3. log.info("用户姓名:{}", loginUser.getUsername());
  4. SysUser user = loginUser.getUser();// 用户
  5. log.info("用户id:{}", user.getUserId());// 用户id
  6. log.info("用户身份证:{}", user.getIdCard());//用户身份证
  7. SysDept dept = user.getDept();// 部门
  8. log.info("部门层级:{}", dept.getLevel());//部门层级 级别,0市局,1分局,2派出所
  9. log.info("部门code:{}", dept.getDeptCode());// 部门code
  10. log.info("部门name:{}", dept.getDeptName());// 部门name

frame-knife4j 包结构说明

knife4j 可以理解为swagger的升级版,详情见:官网

开发过程中主要将代码写在此包下!

整体项目的框架

  1. com.chinaoly
  2. ├── common // 工具类
  3. └── annotation // 自定义注解
  4. └── config // 全局配置
  5. └── constant // 通用常量
  6. └── core // 核心控制
  7. └── enums // 通用枚举
  8. └── exception // 通用异常
  9. └── filter // 过滤器处理
  10. └── utils // 通用类处理
  11. ├── framework // 框架核心
  12. └── aspectj // 注解实现
  13. └── config // 系统配置
  14. └── datasource // 数据权限
  15. └── interceptor // 拦截器
  16. └── manager // 异步处理
  17. └── security // 权限控制
  18. └── web // 前端控制
  19. ├── frame-generator // 代码生成
  20. ├── frame-quartz // 定时任务
  21. ├── frame-system // 系统代码
  22. ├── frame-admin // 后台服务
  23. ├── frame-knife4j // 接口调用
  24. └── config // 系统配置
  25. └── controller // 控制层
  26. └── service // 业务逻辑层
  27. └── mapper // 数据库操作层
  28. └── domain // 实体对象层
  29. ├─dto // 数据传输对象
  30. ├─entity // 数据库对应的实体类
  31. ├─param // 请求参数
  32. ├─vo // 页面对象

具体逻辑 可看frame项目中有demo

注:param中可不加beginTime和endTime

  1. <if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
  2. and date_format(create_time,'%y%m%d') >= date_format(#{params.beginTime},'%y%m%d')</if>
  3. <if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
  4. and date_format(create_time,'%y%m%d') <= date_format(#{params.endTime},'%y%m%d')
  5. </if>

分页逻辑

参考官网https://doc.ruoyi.vip/ruoyi/document/htsc.html

前端实现:

  1. queryParams: {
  2. pageNum: 1,
  3. pageSize: 10
  4. },

后端实现:

  1. @PostMapping("/list")
  2. @ResponseBody
  3. public TableDataInfo list(User user)
  4. {
  5. startPage(); // 此方法配合前端完成自动分页
  6. List<User> list = userService.selectUserList(user);
  7. return getDataTable(list);
  8. }
  9. /**
  10. * 设置请求分页数据
  11. */
  12. protected void startPage() {
  13. PageDomain pageDomain = TableSupport.buildPageRequest();
  14. Integer pageNum = pageDomain.getPageNum();
  15. Integer pageSize = pageDomain.getPageSize();
  16. if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)) {
  17. String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
  18. PageHelper.startPage(pageNum, pageSize, orderBy);
  19. }
  20. }
  • 参数对象user中不需要添加pageNum、pageSize,orderBy对象也是同理。前端传入后,startPage中会自动接收,PageHelper会在sql中进行分页;
  • startPage(),只会对第一个查询(Select)语句得到的数据进行分页,栗子在官方文档中有说明;
  • 当service中需要分页时,继承BaseServiceImpl,调用startPage()方法
  • 开发中会有遇到 一个select查询语句无法实现逻辑的情况【如要将两个查询的list进行排序或处理逻辑后分页展示】,则需要手动分页,即手动构建pageInfo对象;

MyBatis-Plus

MyBatis-Plus

https://mybatis.plus/guide/

例子:https://blog.csdn.net/tian330726/article/details/106087857

发表评论

表情:
评论列表 (有 0 条评论,994人围观)

还没有评论,来说两句吧...

相关阅读