若依
SQL
1、
drop table if exists sys_dept;
create table sys_dept (
dept_id bigint(20) not null auto_increment comment '部门id',
parent_id bigint(20) default 0 comment '父部门id',
ancestors varchar(50) default '' comment '祖级列表',
dept_name varchar(30) default '' comment '部门名称',
order_num int(4) default 0 comment '显示顺序',
leader varchar(20) default null comment '负责人',
phone varchar(11) default null comment '联系电话',
email varchar(50) default null comment '邮箱',
status char(1) default '0' comment '部门状态(0正常 1停用)',
del_flag char(1) default '0' comment '删除标志(0代表存在 2代表删除)',
create_by varchar(64) default '' comment '创建者',
create_time datetime comment '创建时间',
update_by varchar(64) default '' comment '更新者',
update_time datetime comment '更新时间',
primary key (dept_id)
) engine=innodb auto_increment=200 comment = '部门表';
1、删除sys_dept如果存在
2、bight--大整数类型
varchar--可变长度字符串类型
char--固定字符串类型,为什么部门状态不用Int用char,char(1),这里的char是数字,只占1个字节,而Int占了4个字节,更浪费空间(实际占用:在 utf8 或 utf8mb4 字符集中数字也只占用 1 个字节,如果是中文的char,可能占1-3个字节,看是什么编码)
3、为什么auto_increment=200 ,要从200开始自增,防止易于维护:系统内置数据和用户数据分离明显、扩展性好:为未来可能的手动插入数据预留空间、避免冲突:防止自增ID与预设数据ID冲突
4、没什么要特别记,记住数据库常见这几种数据类型就行
5、SQL的char和Java的char是不一样的
-- SQL中的char是固定长度的字符串类型
char(1) -- 表示固定长度为1的字符串,可以存储'0', 'A', '中'等单个字符
char(10) -- 表示固定长度为10的字符串
-- Java中的char是基本数据类型,表示单个字符
char c = 'A'; // 只能存储单个字符
char c2 = '中'; // 可以存储Unicode字符
2、
-- 4、角色信息表
-- ----------------------------
drop table if exists sys_role;
create table sys_role (
role_id bigint(20) not null auto_increment comment '角色ID',
role_name varchar(30) not null comment '角色名称',
role_key varchar(100) not null comment '角色权限字符串',
role_sort int(4) not null comment '显示顺序',
data_scope char(1) default '1' comment '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)',
menu_check_strictly tinyint(1) default 1 comment '菜单树选择项是否关联显示',
dept_check_strictly tinyint(1) default 1 comment '部门树选择项是否关联显示',
status char(1) not null comment '角色状态(0正常 1停用)',
del_flag char(1) default '0' comment '删除标志(0代表存在 2代表删除)',
create_by varchar(64) default '' comment '创建者',
create_time datetime comment '创建时间',
update_by varchar(64) default '' comment '更新者',
update_time datetime comment '更新时间',
remark varchar(500) default null comment '备注',
primary key (role_id)
) engine=innodb auto_increment=100 comment = '角色信息表';
前端
1、如果解决浏览器跨域问题,将请求指定到前端代码,然后前端的服务转化请求到后端的地址,请求后端的内容,服务和服务之间请求是没有跨域问题
具体流程是:
- 浏览器 → localhost:80/dev-api/system/user/info (GET)--前端代码请求用axios请求地址写dev-api/system/user/info。。。,浏览器会自动加上当前IPlocalhost:80
- Webpack Dev Server 接收请求--(自动识别拦下有dev-api的请求)
- Webpack Dev Server → localhost:8080/system/user/info (GET) --自动转化成后端的地址
- 后端Spring Boot应用处理请求
- Spring Boot → Webpack Dev Server 返回JSON响应
- Webpack Dev Server → 浏览器 返回响应
- 浏览器中的JavaScript处理响应数据
在vue.js文件修改dev-api或prod-api对应后端的地址
2、
开发环境启动:npm run dev
生产环境构建:npm run build:prod
根据package.json的命令,来决定启动哪个环境,
// src/utils/request.js
import axios from 'axios'
// process.env.VUE_APP_BASE_API 会根据环境自动切换
const service = axios.create({
baseURL: process.env.VUE_APP_BASE_API, // 自动识别 /dev-api 或 /prod-api,
timeout: 5000
})
export default service
3、虽然前端也能用node,js的web服务启用,但是一般生产环境都是交给nginx启动
--Node.js服务:
需要持续运行Node.js进程
内存占用较高(V8引擎)
CPU消耗相对较大
--Nginx服务:
内存占用极低(通常几MB)
CPU消耗很少
进程管理简单
生产环境构建:npm run build:prod后发到nginx
后端模块
ruoyi-admin管理模块
启动类
1、
//启动类
//exclude = { DataSourceAutoConfiguration.class 是排除Spring Boot的默认数据源自动配置
// 如果不排除,默认会自动配置数据源,Spring Boot会自动寻找application.yml中的数据源配置,并创建默认的DataSource bean
//1、配置冲突:若依有自己的数据源配置(Druid)2、功能限制:默认数据源缺少监控、连接池管理等功能3、自定义需求:若依需要使用Druid的高级特性
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
public class RuoYiApplication
{
public static void main(String[] args)
{
// System.setProperty("spring.devtools.restart.enabled", "false");
SpringApplication.run(RuoYiApplication.class, args);
System.out.println("(♥◠‿◠)ノ゙ 若依启动成功 ლ(´ڡ`ლ)゙ \n" +
2、
druid监控
访问地址:http://localhost:8080/druid
用户名:ruoyi
密码:123456
3、如何配置druid
写了druid配置类文件,然后在application.yml中引入
# application.yml
spring:
profiles:
include: druid # 包含application-druid.yml配置
4、RuoYiServletInitializer类
有这个类说明可以打包成war包,运行到tomcat这种servlet容器
登录与认证
@RestController
public class SysLoginController {
// 通过Spring注入依赖
@PostMapping("/login")
public AjaxResult login(@RequestBody LoginBody loginBody) {
// 生成并返回认证令牌
}
@GetMapping("getInfo")
public AjaxResult getInfo() {
// 返回用户详细信息、角色和权限
}
@GetMapping("getRouters")
public AjaxResult getRouters() {
// 返回菜单路由信息
}
}
如何在请求后/login后也请求getinfo和getrouters
// src/store/modules/user.js 或类似文件
const actions = {
// 登录
login({ commit }, userInfo) {
const { username, password, code, uuid } = userInfo
return new Promise((resolve, reject) => {
login(username, password, code, uuid).then(res => {
// 1. 登录成功,获取token
const token = res.token
commit('SET_TOKEN', token)
setToken(token)
// 2. 登录成功后,立即获取用户信息和路由信息
Promise.all([
dispatch('getInfo'),
dispatch('getRouters')
]).then(() => {
resolve()
})
}).catch(error => {
reject(error)
})
})
},
// 获取用户信息
getInfo({ commit, state }) {
return new Promise((resolve, reject) => {
getInfo().then(res => {
const { user, roles, permissions } = res
commit('SET_USER', user)
commit('SET_ROLES', roles)
commit('SET_PERMISSIONS', permissions)
resolve(res)
}).catch(error => {
reject(error)
})
})
},
// 获取路由信息
getRouters({ commit, state }) {
return new Promise((resolve, reject) => {
getRouters().then(res => {
const { data } = res
commit('SET_ROUTERS', data)
resolve(data)
}).catch(error => {
reject(error)
})
})
}
}
登陆页验证码
CaptchaController管理验证码的生成和验证
1. 用户访问登录页面 (/login)
↓
2. Vue组件创建,调用 getCaptcha()
↓
3. 发送 GET /captchaImage 请求
↓
4. 后端生成验证码图片和UUID
↓
5. 验证码存入Redis,图片Base64编码返回
↓
6. 前端显示验证码图片
↓
7. 用户输入用户名、密码、验证码
↓
8. 点击登录按钮,发送POST /login请求
↓
9. 后端验证验证码(从Redis获取对比)
↓
10. 验证通过则登录成功

ruoyi-system 系统模块
用户管理系统
sysuser类--路径在common-core-domain-entity
public class SysUser extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 用户ID */
@Excel(name = "用户序号", type = Type.EXPORT, cellType = ColumnType.NUMERIC, prompt = "用户编号")
private Long userId;
这串注解 `@Excel(name = "用户序号", type = Type.EXPORT, cellType = ColumnType.NUMERIC, prompt = "用户编号")` 的各个参数值如下:
## 1. 注解参数详解
### name = "用户序号"
- **值**: `"用户序号"`
- **作用**: 在Excel文件中该列的标题显示为"用户序号"
### type = Type.EXPORT
- **值**: `Type.EXPORT`
- **作用**: 指定该字段仅在导出Excel时使用
- **可选值**:
- `Type.ALL`: 导入和导出都使用(默认)
- `Type.EXPORT`: 仅导出时使用
- `Type.IMPORT`: 仅导入时使用
### cellType = ColumnType.NUMERIC
- **值**: `ColumnType.NUMERIC`
- **作用**: 指定Excel单元格的数据类型为数字类型
- **可选值**:
- `ColumnType.NUMERIC`: 数字类型
- `ColumnType.TEXT`: 文本类型
- `ColumnType.IMAGE`: 图片类型
### prompt = "用户编号"
- **值**: `"用户编号"`
- **作用**: 在Excel单元格中显示提示信息"用户编号"
## 2. 实际效果
### 导出Excel时的表现:
Excel文件:
┌────────┬────────┬────────┬────────┐
│ 用户序号 │ 用户名称 │ 用户邮箱 │ 手机号码 │
├────────┼────────┼────────┼────────┤
│ 1 │ 管理员 │admin@xx.com│138xxxxxxx│
│ 2 │ 张三 │zhang@xx.com│139xxxxxxx│
└────────┴────────┴────────┴────────┘
### 单元格特性:
- **数据格式**: 数字格式(可进行数值计算)
- **单元格提示**: 鼠标悬停时显示"用户编号"提示
- **仅导出**: 导入Excel时不会使用此字段
## 3. 完整的Excel注解配置示例
### 对比其他字段:
```java
/** 用户ID */
@Excel(name = "用户序号", type = Type.EXPORT, cellType = ColumnType.NUMERIC, prompt = "用户编号")
private Long userId;
/** 部门ID */
@Excel(name = "部门编号", type = Type.IMPORT) // 仅导入时使用
private Long deptId;
/** 用户账号 */
@Excel(name = "登录名称") // 默认为ALL,数字类型
private String userName;
/** 用户昵称 */
@Excel(name = "用户名称")
private String nickName;
/** 手机号码 */
@Excel(name = "手机号码", cellType = ColumnType.TEXT) // 强制文本格式
private String phonenumber;
4. 在若依系统中的使用
### 导出用户列表:
```java
// Controller中使用
@GetMapping("/export")
public AjaxResult export(SysUser user) {
List<SysUser> list = userService.selectUserList(user);
ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
return util.exportExcel(list, "用户数据");
}
### 生成的Excel效果:
- **"用户序号"列**: 显示为数字格式,单元格有"用户编号"提示
- **仅在导出时显示**: 导入模板中不会包含此列
## 5. 总结
这个注解配置的具体值为:
- **name**: "用户序号" - Excel列标题
- **type**: Type.EXPORT - 仅导出使用
- **cellType**: ColumnType.NUMERIC - 数字格式
- **prompt**: "用户编号" - 单元格提示信息
这样的配置使得用户ID在导出Excel时以数字格式显示,并提供友好的用户界面提示。
不需要写 @Autowired 注入,因为这个类是实体类(Entity),不是Spring管理的Bean组件。只有像@service,@controllor这类组件才要autowired注入
框架设计

黑马程序员AI+若依框架项目
基础篇
1、入门案例,用代码生成器的功能时,记得vue模板选vue2,不然代码导入后,会一直加载不出页面
2、代码生成时,先导入sql文件,再配置代码生成信息,再下载代码导入项目
3、改完前前端代码记得重启下前端服务


二次开发
1、新建sky-merchant子模块(maven模块)
2、父工程版本锁定
3、sky-admin添加依赖

浙公网安备 33010602011771号