若依
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號