ruoyi框架教程

news2024/11/24 6:38:34

心血来潮,写一篇关于ruoyi【若依】框架从0-1的教程。说一下使用感受吧,如果有一个架构师或者老手已经把架构改造完成也能指导你如何快速上手,那么你在后面的增删改查系列开发起来会如鱼得水。如果没有人改造,也没有人教你,可能会某个问题会处理很久,比如使用自定义的用户表登录,使用自定义的权限验证,比如使用自定义的密码加密,这三个问题对于新手来说都是致命的。

整体使用下来,唯一觉得快的部分就是它能生成前端的代码,然后在这个基础上修改就比较快。但是缺点也是致命的,封装的后台返回接口的字段居然都不一样,有的list会返回rows,有的返回data,说实话,就这一个缺点就能说明,那些人很垃圾。

简介

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

官网首页

https://www.ruoyi.vip/

官网文档

https://doc.ruoyi.vip/ruoyi/

 在线演示地址

https://vue.ruoyi.vip/

教程开始

1、安装依赖环境

名称备注
idealjava开发工具
JDK1.8java开发环境
Mysql8mysql数据库
redis实时缓存数据库
maven3项目构建工具
navicat数据库图形化管理工具
nodeJsnpm构建工具,用来开发编译运行前端vue项目

# JAVA开发环境搭建从0-1
# 包含了ideal, jdk, mysql, maven, redis, navicat等软件的下载及安装
https://blog.csdn.net/renkai721/article/details/126939604

2、下载源码

这里下载前后端分离的版本。版本介绍如下:

名称备注
RuoYi源码下载bootstrap+jquery+springboot2
RuoYi-Vue前后端分离版element+vue2+springboot2
RuoYi-Cloud微服务版未使用,不做评价
RuoYi-App移动端版未使用,不做评价

如果你会jquery+bootstrap不会vue就选择第一个版本。如果你会vue或者两者都会就下载vue的版本。 这里给新手一个建议,在你修改代码的时候最好先提交代码到git上一份,后面改动比较大,可能想找回之前的一个版本比较方便。不然的话,很容易进入到进退两难的困境。

下载后的文件夹如下

 文件夹结构描述

 

 3、导入SQL脚本

打开navicat工具,连接上数据库,然后创建一个数据库,名称叫【ry-vue】,然后通过工具把RuoYi-Vue-master\sql文件夹下的【ry_20231130.sql】和【quartz.sql】两个SQL脚本都导入进去。

4、修改配置文件

打开ruoyi-admin模块下的application-druid.yml文件,修改连接数据库的账号信息。

 打开ruoyi-admin模块下的application.yml文件,修改连接redis的账号信息。

 5、启动后台项目

看后台启动日志,如果成功了会看到启动成功。

6、启动VUE前端

# 进入项目目录
cd ruoyi-ui

# 安装依赖
npm install

# 建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题
npm install --registry=https://registry.npmmirror.com

# 启动服务
npm run dev
```
# 默认账号密码admin/admin123
浏览器访问 http://localhost:80

## 发布

```bash
# 构建测试环境
npm run build:stage

# 构建生产环境
npm run build:prod

7、启动效果图

8、技术交流

结束

-----华丽的分割线,以下是凑字数,大家不用花时间看,快去改代码-----

-----华丽的分割线,以下是凑字数,大家不用花时间看,快去改代码-----

-----华丽的分割线,以下是凑字数,大家不用花时间看,快去改代码-----

package cn.renkai721.bean.vo;
 
import lombok.extern.slf4j.Slf4j;
 
@Slf4j
public class MakeUpTheWordCount {
 
    private String make_up_the_word_count_column_999999999_1;
    private String make_up_the_word_count_column_999999999_2;
    private String make_up_the_word_count_column_999999999_3;
    private String make_up_the_word_count_column_999999999_4;
    private String make_up_the_word_count_column_999999999_5;
    private String make_up_the_word_count_column_999999999_6;
    private String make_up_the_word_count_column_999999999_7;
    private String make_up_the_word_count_column_999999999_8;
    private String make_up_the_word_count_column_999999999_9;
    private String make_up_the_word_count_column_999999999_10;
    private String make_up_the_word_count_column_999999999_11;
    private String make_up_the_word_count_column_999999999_12;
    private String make_up_the_word_count_column_999999999_13;
    private String make_up_the_word_count_column_999999999_14;
    private String make_up_the_word_count_column_999999999_15;
    private String make_up_the_word_count_column_999999999_16;
    private String make_up_the_word_count_column_999999999_17;
    private String make_up_the_word_count_column_999999999_18;
    private String make_up_the_word_count_column_999999999_19;
    private String make_up_the_word_count_column_999999999_20;
 
    public String getMake_up_the_word_count_column_999999999_1() {
        return make_up_the_word_count_column_999999999_1;
    }
 
    public void setMake_up_the_word_count_column_999999999_1(String make_up_the_word_count_column_999999999_1) {
        this.make_up_the_word_count_column_999999999_1 = make_up_the_word_count_column_999999999_1;
    }
 
    public String getMake_up_the_word_count_column_999999999_2() {
        return make_up_the_word_count_column_999999999_2;
    }
 
    public void setMake_up_the_word_count_column_999999999_2(String make_up_the_word_count_column_999999999_2) {
        this.make_up_the_word_count_column_999999999_2 = make_up_the_word_count_column_999999999_2;
    }
 
    public String getMake_up_the_word_count_column_999999999_3() {
        return make_up_the_word_count_column_999999999_3;
    }
 
    public void setMake_up_the_word_count_column_999999999_3(String make_up_the_word_count_column_999999999_3) {
        this.make_up_the_word_count_column_999999999_3 = make_up_the_word_count_column_999999999_3;
    }
 
    public String getMake_up_the_word_count_column_999999999_4() {
        return make_up_the_word_count_column_999999999_4;
    }
 
    public void setMake_up_the_word_count_column_999999999_4(String make_up_the_word_count_column_999999999_4) {
        this.make_up_the_word_count_column_999999999_4 = make_up_the_word_count_column_999999999_4;
    }
 
    public String getMake_up_the_word_count_column_999999999_5() {
        return make_up_the_word_count_column_999999999_5;
    }
 
    public void setMake_up_the_word_count_column_999999999_5(String make_up_the_word_count_column_999999999_5) {
        this.make_up_the_word_count_column_999999999_5 = make_up_the_word_count_column_999999999_5;
    }
 
    public String getMake_up_the_word_count_column_999999999_6() {
        return make_up_the_word_count_column_999999999_6;
    }
 
    public void setMake_up_the_word_count_column_999999999_6(String make_up_the_word_count_column_999999999_6) {
        this.make_up_the_word_count_column_999999999_6 = make_up_the_word_count_column_999999999_6;
    }
 
    public String getMake_up_the_word_count_column_999999999_7() {
        return make_up_the_word_count_column_999999999_7;
    }
 
    public void setMake_up_the_word_count_column_999999999_7(String make_up_the_word_count_column_999999999_7) {
        this.make_up_the_word_count_column_999999999_7 = make_up_the_word_count_column_999999999_7;
    }
 
    public String getMake_up_the_word_count_column_999999999_8() {
        return make_up_the_word_count_column_999999999_8;
    }
 
    public void setMake_up_the_word_count_column_999999999_8(String make_up_the_word_count_column_999999999_8) {
        this.make_up_the_word_count_column_999999999_8 = make_up_the_word_count_column_999999999_8;
    }
 
    public String getMake_up_the_word_count_column_999999999_9() {
        return make_up_the_word_count_column_999999999_9;
    }
 
    public void setMake_up_the_word_count_column_999999999_9(String make_up_the_word_count_column_999999999_9) {
        this.make_up_the_word_count_column_999999999_9 = make_up_the_word_count_column_999999999_9;
    }
 
    public String getMake_up_the_word_count_column_999999999_10() {
        return make_up_the_word_count_column_999999999_10;
    }
 
    public void setMake_up_the_word_count_column_999999999_10(String make_up_the_word_count_column_999999999_10) {
        this.make_up_the_word_count_column_999999999_10 = make_up_the_word_count_column_999999999_10;
    }
 
    public String getMake_up_the_word_count_column_999999999_11() {
        return make_up_the_word_count_column_999999999_11;
    }
 
    public void setMake_up_the_word_count_column_999999999_11(String make_up_the_word_count_column_999999999_11) {
        this.make_up_the_word_count_column_999999999_11 = make_up_the_word_count_column_999999999_11;
    }
 
    public String getMake_up_the_word_count_column_999999999_12() {
        return make_up_the_word_count_column_999999999_12;
    }
 
    public void setMake_up_the_word_count_column_999999999_12(String make_up_the_word_count_column_999999999_12) {
        this.make_up_the_word_count_column_999999999_12 = make_up_the_word_count_column_999999999_12;
    }
 
    public String getMake_up_the_word_count_column_999999999_13() {
        return make_up_the_word_count_column_999999999_13;
    }
 
    public void setMake_up_the_word_count_column_999999999_13(String make_up_the_word_count_column_999999999_13) {
        this.make_up_the_word_count_column_999999999_13 = make_up_the_word_count_column_999999999_13;
    }
 
    public String getMake_up_the_word_count_column_999999999_14() {
        return make_up_the_word_count_column_999999999_14;
    }
 
    public void setMake_up_the_word_count_column_999999999_14(String make_up_the_word_count_column_999999999_14) {
        this.make_up_the_word_count_column_999999999_14 = make_up_the_word_count_column_999999999_14;
    }
 
    public String getMake_up_the_word_count_column_999999999_15() {
        return make_up_the_word_count_column_999999999_15;
    }
 
    public void setMake_up_the_word_count_column_999999999_15(String make_up_the_word_count_column_999999999_15) {
        this.make_up_the_word_count_column_999999999_15 = make_up_the_word_count_column_999999999_15;
    }
 
    public String getMake_up_the_word_count_column_999999999_16() {
        return make_up_the_word_count_column_999999999_16;
    }
 
    public void setMake_up_the_word_count_column_999999999_16(String make_up_the_word_count_column_999999999_16) {
        this.make_up_the_word_count_column_999999999_16 = make_up_the_word_count_column_999999999_16;
    }
 
    public String getMake_up_the_word_count_column_999999999_17() {
        return make_up_the_word_count_column_999999999_17;
    }
 
    public void setMake_up_the_word_count_column_999999999_17(String make_up_the_word_count_column_999999999_17) {
        this.make_up_the_word_count_column_999999999_17 = make_up_the_word_count_column_999999999_17;
    }
 
    public String getMake_up_the_word_count_column_999999999_18() {
        return make_up_the_word_count_column_999999999_18;
    }
 
    public void setMake_up_the_word_count_column_999999999_18(String make_up_the_word_count_column_999999999_18) {
        this.make_up_the_word_count_column_999999999_18 = make_up_the_word_count_column_999999999_18;
    }
 
    public String getMake_up_the_word_count_column_999999999_19() {
        return make_up_the_word_count_column_999999999_19;
    }
 
    public void setMake_up_the_word_count_column_999999999_19(String make_up_the_word_count_column_999999999_19) {
        this.make_up_the_word_count_column_999999999_19 = make_up_the_word_count_column_999999999_19;
    }
 
    public String getMake_up_the_word_count_column_999999999_20() {
        return make_up_the_word_count_column_999999999_20;
    }
 
    public void setMake_up_the_word_count_column_999999999_20(String make_up_the_word_count_column_999999999_20) {
        this.make_up_the_word_count_column_999999999_20 = make_up_the_word_count_column_999999999_20;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1405971.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【江科大】STM32:中断系统(理论)

文章目录 中断系统为什么要使用中断中断优先级中断嵌套STM32的中断系统如何管理这些中断NVIC的结构![请添加图片描述](https://img-blog.csdnimg.cn/c77b038fd63a4ddfbcd3b86f6dfe596b.png) 优先级窗口看门狗(WWDG):外部中断模块的特性&#…

[Python] scikit-learn - K近邻算法介绍和使用案例

什么是K近邻算法? K近邻算法(K-Nearest Neighbors,简称KNN)是一种基于实例的学习方法,主要用于分类和回归任务。它的基本思想是:给定一个训练数据集,对于一个新的输入实例,在训练数据集中找到与该实例最邻近的K个实例…

SpringBoot统一返回和统一异常处理

Session 认证和 Token 认证 过滤器和拦截器 SpringBoot统一返回和统一异常处理 上篇文章我们学习了基于 Token 认证的登录功能实现,分别使用了过滤器和拦截器去实现登录功能,这篇文章我们来学习项目中常用的统一返回结果和统一异常处理。 一、统一返…

java.lang.IllegalArgumentException: When allowCredentials is true

1.遇到的错误 java.lang.IllegalArgumentException: When allowCredentials is true, allowedOrigins cannot contain the special value "*" since that cannot be set on the "Access-Control-Allow-Origin" response header. To allow credentials to a…

vue echarts地图

下载地图文件: DataV.GeoAtlas地理小工具系列 范围选择器右侧行政区划范围中输入需要选择的省份或地市,选择自己想要的数据格式,这里选择了geojson格式,点右侧的蓝色按钮复制到浏览器地址栏中,打开的geojson文件内容…

[每日一题] 01.23 - 画矩形

画矩形 height,width,c,d input().split() height,width,d int(height),int(width),int(d) lis [c * width if d else c * (width - 2) c for i in range(height) ]lis: ##### # # # # ##### 或 # # # # # # # #if not d:print(c * width)for i in lis[1:-1…

苹果眼镜(Vision Pro)的开发者指南(3)-【3D UI SwiftUI和RealityKit】介绍

为了更深入地理解SwiftUI和RealityKit,建议你参加专注于SwiftUI场景类型的系列会议。这些会议将帮助你掌握如何在窗口、卷和空间中构建出色的用户界面。同时,了解Model 3D API将为你提供更多关于如何为应用添加深度和维度的知识。此外,通过学习RealityView渲染3D内容,你将能…

【加解密篇】电子数据取证分析之特殊的自加密BitLocker解密

【加解密篇】电子数据取证分析之特殊的自加密BitLocker解密 数据加解密通常是个耗时费力的事情—【蘇小沐】 1、实验环境 Windows 11 专业版,[23H2(22631.3007)] (一)自动开启BitLocker之天坑 1、经验之谈 在201…

php基础学习之数据类型

php数据类型的基本概念 数据类型:data type,在PHP中指的是数据本身的类型,而不是变量的类型。 PHP 是一种弱类型语言,变量本身没有数据类型。 把变量类比成一个杯子(容器),杯子可以装雪碧、可…

2024茶饮品牌如何出圈,媒介盒子分析

随着新式茶饮的消费场景更加多元化,品类不断拓宽,消费者对新式茶饮的热情也是只增不减。居民可支配收入水平不断上升,居民消费升级为新式茶饮的发展也提供了良好基础,今天媒介盒子就来和大家聊聊:2024茶饮品牌如何出圈…

【数据分析】matplotlib、numpy、pandas速通

教程链接:【python教程】数据分析——numpy、pandas、matplotlib 资料:https://github.com/TheisTrue/DataAnalysis 1 matplotlib 官网链接:可查询各种图的使用及代码 对比常用统计图 1.1 折线图 (1)引入 from …

软考之软件工程

一、瀑布模型 严格区分阶段,每个阶段因果关系紧密相连,只适合需求明确的项目 缺点:软件需求完整性、正确性难确定;严格串行化,很长时间才能看到结果;瀑布模型要求每个阶段一次性完全解决该阶段工作&#xf…

Prometheus+Grafana监控Mysql数据库

Promethues Prometheus https://prometheus.io Prometheus是一个开源的服务监控系统,它负责采集和存储应用的监控指标数据,并以可视化的方式进行展示,以便于用户实时掌握系统的运行情况,并对异常进行检测。因此,如何…

【测试开发】Junit5 + YAML 轻松实现参数化和数据驱动,让 App 自动化测试更高效(一)

1. 何为数据驱动 什么是参数化?什么又是数据驱动?经常有人会搞不明白他们的关系,浅谈一下个人的理解,先来看两个测试中最常见的场景: 登录:不同的用户名,不同的密码,不同的组合都需要…

makefile编译静态链接库(.a文件)

文章目录 makefile编译静态链接库(.a文件) makefile编译静态链接库(.a文件) 搞个文件测试静态链接库 aTest.h // // Created by qiufh on 2024-01-23. //#ifndef UNTITLED3_ATEST_H #define UNTITLED3_ATEST_Hclass aTest { pu…

c语言数据结构:单链表及其相关基础操作

目录 0.创建一个额外新的结点 1.链表的概念及其结构 2.单链表的概念 3.单链表的结点的创建 4. 顺序表的打印 5. 链表的尾插 5.1 有关单链表的传参 (重点) 5.1.1 错误的写法 5.1.2 如何修正 5.1.3 正确的写法 5.1.4 看穿二级指针变量 ​编辑 6.链表的头插 7.单链表的…

C++进阶:多态(下)

1、多态的原理 多态之所以可以实现,主要是因为虚函数表的存在,虚函数表用于记录虚函数的地址,他是一个函数指针数组,在类中用一个函数指针数组指针来指向数组,子类继承了父类的虚函数表,当有重写的情况发生…

软考14-上午题-编译、解释程序翻译阶段

一、编译、解释程序【回顾】 目的:高级程序设计语言(汇编语言、高级语言)—【翻译】—>机器语言 1-1、编译方式 将高级语言书写的源程序——>目标程序(汇编语言、机器语言) 包含的工作阶段:词法分…

latex添加图片以及引用的实例教程

原理 在 LaTeX 中插入图片,通常是使用 \includegraphics 命令,它是由 graphicx 包提供的。首先,确保在文档的前言部分(\documentclass 之后和 \begin{document} 之前)包含了 graphicx 包。 下面是一个基本的例子来展…

Hikvision综合安防管理平台files;.css接口存在任意文件读取漏洞 附POC软件

免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。 1. Hikvisi…