基于RuoYi框架快速搭建自己的后台管理系统

2023-10-27

RuoYi的介绍

        RuoYi是一个后台管理系统,基于经典技术组合(Spring Boot、Apache Shiro、MyBatis、Thymeleaf)主要目的让开发者注重专注业务,降低技术难度,从而节省人力成本,缩短项目周期,提高软件安全质量。

Ruo的生态系统

  • RuoYi-fast:单应用的后台管理系统
  • RuoYi:多模块的后台管理系统,从RuoYi3.0开始,进行模块拆分,本文基于此来搭建自己的后台管理系统
  • RuoYi-Vue:Vue分离版本
  • RuoYi-Cloud:Cloud微服务版本
  • RuoYi的项目扩展

在线体验   

系统需求

  • JDK >= 1.8
  • MySQL >= 5.7
  • Maven >= 3.0

启动流程

        1.拉取项目到本地并在IDE工具中打开

                这里我选择的工具是IDEA,RuoYi后台管理系统版本是v4.7.1,RuoYi提供的使用手册使用的工具是eclipse,工具打开项目类似,你们可基于自己的情况选择。

        IDEA打开项目:在File中选择Open,然后找到项目打开

        2.更换项目名及目录名称

├── xxxxx
│       └── xxxxx-admin
│       └── xxxxx-common
│       └── xxxxx-framework
│       └── xxxxx-generator
│       └── xxxxx-quartz
│       └── xxxxx-system
│       └── pom.xml

        3.更换顶级目录中的pom.xml

<modules>
	<module>xxxxx-admin</module>
	<module>xxxxx-framework</module>
	<module>xxxxx-system</module>
	<module>xxxxx-quartz</module>
	<module>xxxxx-generator</module>
	<module>xxxxx-common</module>
</modules>

  4.更换项目所有包名称com.ruoyi.xxx换成com.xxxxx.xxx

  5.更换各目录中的pom.xml
     顶级目录pom.xml
:

    <groupId>com.xxxxx</groupId>
    <artifactId>xxx</artifactId>
    <version>x.x.x</version>

    <name>xxx</name>
    <url>xxx</url>
    <description>xxx</description>
    
    <!-- 把ruoyi改成自己的 -->
    <properties>
        <xxx.version>x.x.x</xxx.version>
    </properties>

        <!-- 依赖声明 -->
    <dependencyManagement>
        <dependencies>

          ......

            <!-- 定时任务-->
            <dependency>
                <groupId>com.xxxxx</groupId>
                <artifactId>xxx-quartz</artifactId>
                <version>${xxx.version}</version>
            </dependency>

            <!-- 代码生成-->
            <dependency>
                <groupId>com.xxxxx</groupId>
                <artifactId>xxx-generator</artifactId>
                <version>${xxx.version}</version>
            </dependency>

            <!-- 核心模块-->
            <dependency>
                <groupId>com.xxxxx</groupId>
                <artifactId>xxx-framework</artifactId>
                <version>${xxx.version}</version>
            </dependency>

            <!-- 系统模块-->
            <dependency>
                <groupId>com.xxxxx</groupId>
                <artifactId>xxx-system</artifactId>
                <version>${xxx.version}</version>
            </dependency>

            <!-- 通用工具-->
            <dependency>
                <groupId>com.xxxxx</groupId>
                <artifactId>xxx-common</artifactId>
                <version>${xxx.version}</version>
            </dependency>


        </dependencies>
    </dependencyManagement>
    

        xxx-admin目录的pom.xml:

    <parent>
        <groupId>com.xxxxx</groupId>
        <artifactId>xxx</artifactId>
        <version>x.x.x</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <packaging>jar</packaging>
    <artifactId>xxx-admin</artifactId>
    
     <dependencies>

       ......

        <!-- 核心模块-->
        <dependency>
            <groupId>com.xxxxx</groupId>
            <artifactId>xxx-framework</artifactId>
        </dependency>

        <!-- 定时任务-->
        <dependency>
            <groupId>com.xxxxx</groupId>
            <artifactId>xxx-quartz</artifactId>
        </dependency>

        <!-- 代码生成-->
        <dependency>
            <groupId>com.xxxxx</groupId>
            <artifactId>xxx-generator</artifactId>
        </dependency>

    </dependencies>

         xxx-common目录的pom.xml:

    <parent>
        <groupId>com.xxxxx</groupId>
        <artifactId>xxx</artifactId>
        <version>x.x.x</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>xxx-common</artifactId>

        xxx-framework目录的pom.xml:

    <parent>
        <groupId>com.xxxxx</groupId>
        <artifactId>xxx</artifactId>
        <version>x.x.x</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>xxx-framework</artifactId>

     <dependencies>

        <!-- 系统模块-->
        <dependency>
            <groupId>com.xxxxx</groupId>
            <artifactId>xxx-system</artifactId>
        </dependency>

    </dependencies>

   xxx-generator的pom.xml:

    <parent>
        <groupId>com.xxxxx</groupId>
        <artifactId>xxx</artifactId>
        <version>x.x.x</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>xxx-generator</artifactId>

     <dependencies>

       ......

        <!-- 通用工具-->
        <dependency>
            <groupId>com.xxxxx</groupId>
            <artifactId>xxx-common</artifactId>
        </dependency>

      

    </dependencies>

   xxx-quartz的pom.xml:

    <parent>
        <groupId>com.xxxxx</groupId>
        <artifactId>xxx</artifactId>
        <version>x.x.x</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>xxx-quartz</artifactId>

    <dependencies>

        <!-- 通用工具-->
        <dependency>
            <groupId>com.xxxxx</groupId>
            <artifactId>xxx-common</artifactId>
        </dependency>

    </dependencies>

   xxx-system目录的pom.xml:

    <parent>
        <groupId>com.xxxxx</groupId>
        <artifactId>xxx</artifactId>
        <version>x.x.x</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>xxx-system</artifactId>

    <dependencies>

        <!-- 通用工具-->
        <dependency>
            <groupId>com.xxxxx</groupId>
            <artifactId>xxx-common</artifactId>
        </dependency>

    </dependencies>

        6.、更换application.yml指定要扫描的Mapper类的包的路径typeAliasesPackage包路径名称替换com.xxxxx

# MyBatis
mybatis:
    # 搜索指定包别名
    typeAliasesPackage: com.你的包名.**.domain

7.更换mapper文件的namespace包路径

ruoyi-system/resources/mapper/system/* 
ruoyi-quartz/resources/mapper/quartz/* 
ruoyi-generator/resources/mapper/generator/*

xml包路径名称替换com.xxxxx

8、更换日志路径

  • 更换application.yml文件logging属性为com.xxxxx: debug
  • 更换logback.xml文件为com.xxxxx

9.在mysql8建数据库然后运行sql文件

        如果不是mysql8,得改application-druid.yml中datasource的type

10、启动项目验证

        访问地址:

                http://localhost/端口号

修改ruoyi系统总结

        1.改ruoyi的界面

                界面在xxx-admin资源文件的templates模板下

      注意:

                核心菜单是在数据库里改的,如系统管理、系统监控、系统工具、若依官网,在sys_menu表中

        2.加自己模块

                先在库里建该模块的表,然后在本地启动项目,在系统工具模块下代码生成部分中,点导入然后选择自己的表,即可生成对应的界面及后端代码,mybatis配置文件也已生成好

     注意:

            生成代码前可先修改对应的记录,修改基本信息、字段信息及生成信息,其中基本信息可修改作者、实体类名称、表描述等,字段信息这个很重要,里面可对性别和证件类型加字典类型,然后显示类型中选择对应的控件,对应的字典类型在系统管理模块的字典管理部分下。

            用户得先在sys_menu中加入自己的模块,具体可参考其他模块,也可以运行生成的代码包中的sql文件,根据我的实践经验运行文件后会生成在系统管理模块下而不是单独一个模块,用户如果想单独一个模块可以自己改。

           加入模块后,把生成的代码加入到对应的目录下

        3.添加基本数据

                用户如果有基本数据的需求,可在系统管理的字典管理部分下,新增即可,在列表中加入数据其中字典标签和字典键值最重要,他们是一一对应的。

                前端使用字典数据:

        1.下拉框显示字典数据

        其中getType下是你选择的对应字典数据的字典类型,这样界面对应字段的下拉框就会显示你添加的字典数据

<li>
    <label>状态:</label>                     
    <select name="state" th:with="type=${@dict.getType('sys_submit_state')}">
        <option value="">所有</option>
        <option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
    </select>
</li>

当表格显示字典数据字段时你会发现显示的是键值而不是标签,这时或许得进行转换

<script th:inline="javascript">

    ......
 var stateDatas = [[${@dict.getType('sys_submit_state')}]];

......
  columns: [    
                {
                    checkbox: true
                },
                {
                    field: 'state',
                    title: '状态',
                    formatter: function(value, row, index) {
                       return $.table.selectDictLabel(stateDatas, value);
                    },
                    sortable: true
                }

    }]
......
           
</script>

当你的字典数据特别多时,你会发现一个一个添加很不方便而且很容易出错,但可惜的是ruoyi字典管理并没有导入,如果你有这方面需求你可以尝试着改字典管理部分加个导入,这部分我并没尝试,因为基本数据最多也才40个。

如果想实现在表格展示中对字段加一些样式,可参考如下,选择想要的即可:

 

        后端使用基本数据:

@Autowired
private ISysDictDataService iSysDictDataService;

    
//核心代码
SysDictData sysDictData = new SysDictData();
//用户可根据自己的需求,查询对应的数据
//DictType如“sys_user_sex”,DictLabel如"0"
sysDictData.setDictType(dictType);
sysDictData.setDictValue(dictLabel);
List<SysDictData> DictDatas = iSysDictDataService.selectDictDataByLabelType(sysDictData);

其中特别注意,当导出时,你会发现导出的是键值而不是标签,比如你导出的性别是0而不是男

,这时你可以这样做:

在实体类中对应字段上@Excel注解里加 readConverterExp,把对应的键值对都写出来,要是该字段数据特别多用这种方法简直是恶梦,目前我还只试过该方法转换,但我想应该可以在导出对应的一系列方法中改代码改成能够动态的转化

    @Excel(name = "性别", readConverterExp = "0=男,1=女,2=未知")
    private String sex;

4.生成的界面的新增、修改、删除导出等逻辑

        对应的方法ruoyi已经给你封装好呢,你直接调用即可,在ry-ui.js中可找到对应的方法,如以下代码:

<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="xxxxx:xxx:add">
    <i class="fa fa-plus"></i> 添加
</a>

其中onclick对应的方法在ry-ui.js中可找到:

至于该方法中调用的其他方法同样可在js文件中找到

  // 添加信息
  add: function(id) {
      table.set();
      $.modal.open("添加" + table.options.modalName, $.operate.addUrl(id));
  },

至于其他生成的功能的实现也同样如此

如果你想加入自己的方法,你可以按照他的流程在对应的文件中加即可,写好前端后再写一系列层层调用的后端类

5.权限控制

        前端的界面权限控制可通过shiro:hasPermission实现,有该字段内容的才显示,

shiro:hasPermission="admin"  表示只有管理员可显示
<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="xxxxx:xxx:add">
    <i class="fa fa-plus"></i> 添加
</a>
后端权限控制可参考如下代码:
@Autowired
private ISysRoleService iSysRoleService;
       
Long userId = ShiroUtils.getUserId();
SysRole sysRole = iSysRoleService.selectRoleById(userId);
if(sysRole!=null){
  if("admin".equals(sysRole.getRoleKey())){
                
  }else{

}

6.如何更好的使用ruoyi

        1.当遇到不会的难题时可查阅ruoyi官方文档

        2.可参考实例演示下的各种功能,当有你需要的时

                对应的代码可在xxx-admin下的system下找到,当你鼠标停在对应的图标时会显示对应的接口,你可按着去找对应的

        3.可去ruoyi社区中看别人有没有对应的问题

        

总结:

       写这篇文章时我对ruoyi的使用还不是很多然后我也只想到这些,等以后用到ruoyi更有趣的地方时再来分享, ruoyi的所有实现都可在项目中找到代码,只不过在一些框架上又做了封装然后你可直接用,当你的需求ruoyi现有的没法实现时你可先看ruoyi代码逻辑,然后在该基础上加自己的代码实现自己需求,也可直接修改ruoyi的代码,你感觉你实现的需求还不错时可以考虑贡献你的代码然后丰富ruoyi,也可贡献你的系统,前提是你自己写的或已经得到授权,这样别人也可基于你的系统快速完成他的需求,赠人玫瑰,手有余香!

        

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于RuoYi框架快速搭建自己的后台管理系统 的相关文章

随机推荐

  • FAPI专题-1:5G nFAPI接口 - 中文规范-1- 概述、总体框架

    目录 前言 范围 第1章 简介 第2章 nFAPI接口详解 待续 2 1 nFAPI接口的主要流程 2 1 1 PNF的主要流程 M面 2 1 2 P5接口的主要流程 C面 2 1 3 P7接口的主要流程 U面 2 2 5G nFAPI接口
  • Ubuntu20.04下安装nvidia驱动

    ubuntu drivers devices 会显示你的电脑上可用的nvidia驱动 只需要安装推荐的版本即可 后面有recommend字样 打开电脑里的软件和更新app 这里建议换提前换源 阿里源或者清华源 来到附加驱动这个页面 选择你刚
  • 毕设分享 机器人工程专业毕设选题推荐

    文章目录 1前言 2 如何选题 3 机器人工程 毕设 选题推荐 4 最后 1前言 近期不少学弟学妹询问学长关于机器人工程专业工程专业相关的毕设选题 学长特意写下这篇文章以作回应 以下是学长亲手整理相关的毕业设计选题 都是经过学长精心审核的题
  • 使用laravel-admin后台sdk报错Failed to load resource: net::ERR_CERT_AUTHORITY_INVALID、Provisional headers a...

    报错Failed to load resource net ERR CERT AUTHORITY INVALID请先确定自己的资源url是否可以确实访问到 地址正确与否 访问权限是否开启等 若network中有静态资源报错Provision
  • adworld-web-inget-20221226

    inget 题目来源 宜兴网信办 题目描述 无 题目场景 http 61 147 171 105 51222 http 61 147 171 105 51222 id 1 27 20 20or 201 1 20 Please enter I
  • 数字后端基本概念介绍——Macro

    今天要介绍的数字后端基本概念是Macro 中文名宏单元 这是设计中最常见的一个单元了 Macro是一个宽泛的概念 通常我们把它分为硬核 Hard Macro 和软核 Soft Macro 硬核就是我们最常见的Hard Marco 包括Mem
  • 【Redis】3、Redis 作为缓存(Redis中的穿透、雪崩、击穿、工具类)

    目录 一 什么是缓存 二 给业务添加缓存 减少数据库访问次数 三 给店铺类型查询业务添加缓存 1 使用 String 类型 2 使用 List 类型 四 缓存的更新策略 1 主动更新 2 最佳实现方案 3 给查询商铺的缓存添加超时剔除和主动
  • Linux文件目录操作命令

    目录 Linux常用的基础命令 使用技巧 1 ls命令 查看当前目录所有内容 ls 命令的多种使用方法 注 假如执行乱码 则执行以下两步的代码 2 cd命令 切换当前工作目录 即进入指定目录 3 cat命令 显示文件内容 4 more命令
  • 智能语音技术的深度解析

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由腾讯云AI中心发表于云 社区专栏 广义上来讲智能语音技术有各种各样的定义 以上是常见的一些热门的场景 语音识别 刚才罗老师也分享了部分内容 语音合成是文字变成语音 这部分我们后
  • Linux 引导过程概述

    引导过程 一 引导过程 引导过程总览 1 开机自检 2 MBR引导 3 GRUB菜单 4 加载Linux 内核 5 INIT 进程初始化 二 INIT 进程 1 INIT进程 2 inittab 配置文件 inittab文件中的字段 1 i
  • 手写线程池

    package cn pzh xzh javaee thread import javafx concurrent Worker import java util ArrayList import java util LinkedList
  • 【AD20学习笔记】PCB设计规则设置及手工布线

    7 21 今天干了啥 7 22 7 23 7 24 啊 咋24号了 回流为什么要打孔啊 数字地 信号地的区别 本章快捷键 shift E 捕捉捕捉不到的点 可以控制高亮的亮度 L 表示显示的板层 网络可以右击选择改变颜色 然后选择显示替换
  • C# 一种求平方根的方法 立方根也可以 极大 极小都可以

    不知道研究这些干啥 纯纯的浪费时间 public static double TQSquare double number Random random1 new Random DateTime Now Millisecond double
  • 少儿编程教育机构

    计算机就像一个人 才刚刚清醒 但已经改变了生活中的很多东西 革新了旧行业 也出现了许多新的商业模式 比如 淘宝购物 滴滴打车 支付宝付款 高德地图导航等这些习以为常的App 以及作为纽带的互联网 无不来自于我们所编写的程序 格物斯坦小坦克认
  • python期末版二版-习题题库

    Python程序设计 题库 一 填空题 1 Python安装扩展库常用的是 工具 pip 2 Python标准库math中用来计算平方根的函数是 sqrt 3 Python程序文件扩展名主要有 和两种 其中后者常用于GUI程序 py pyw
  • vue获取当前时间的前七天日期

  • SpringBoot项目配置国际化

    1 引言 效果 1 根据浏览器默认语言设置的信息切换国际化 2 点击链接切换语言 2 配置步骤 1 设置file encoding 如果不设置 获取properties内容会乱码 当前项目配置 点击setting搜索file encodin
  • 报错Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).解决方法

    在Ubuntu中用apt get安装软件 系统报出Unmet dependencies错误 Unmet dependencies Try apt fix broken install with no packages or specify
  • MYSQL的慢查询

    通过查询SQL的执行频次 我们就能够知道当前数据库到底是增删改为主 还是查询为主 那假如说是以查询为主 次数我们可以借助于慢查询日志 接下来 我们就来介绍一下MySQL中的慢查询日志 慢查询日志 慢查询日志记录了所有执行时间超过指定参数 l
  • 基于RuoYi框架快速搭建自己的后台管理系统

    RuoYi的介绍 RuoYi是一个后台管理系统 基于经典技术组合 Spring Boot Apache Shiro MyBatis Thymeleaf 主要目的让开发者注重专注业务 降低技术难度 从而节省人力成本 缩短项目周期 提高软件安全