### 12.4.1 Function
plus系統的核心是Function表,代表了系統應該提供的所有功能,Function表示是一個樹結構,這符合業務系統的功能劃分
| ID | CODE | NAME | CREATE_TIME | ACCESS_URL | PARENT_ID | TYPE |
| ---- | ---------- | ---- | ----------- | -------------------- | --------- | ---- |
| 1 | user | | NULL | /admin/user/index.do | 0 | FN0 |
| 2 | user.query | | NULL | NULL | 1 | FN1 |
| 3 | user.edit | | NULL | NULL | 1 | FN0 |
code 字段是一個英文字符,跟Contorller的方法搭配,用在@Function注解里,表示當前方法的屬于哪個功能
~~~java
@GetMapping(MODEL + "/index.do")
@Function("user")
public ModelAndView index() {
ModelAndView view = new ModelAndView("/admin/user/index.html");
view.addObject("search", UserQuery.class.getName());
return view;
}
@GetMapping(MODEL + "/edit.do")
@Function("user.edit")
public ModelAndView edit(String id) {
ModelAndView view = new ModelAndView("/admin/user/edit.html");
CoreUser user = userConsoleService.queryById(id);
view.addObject("user", user);
return view;
}
~~~
PLUS系統并未像其他系統,通過注解來申明角色,因為系統角色可以無限擴展,這種角色申明只適合小系統
~~~java
//其他權限系統設計方式
@GetMapping(MODEL + "/edit.do")
@Allowed("amdin","manager")
public ModelAndView edit(String id) {
}
~~~
比如有些系統設計了@Allowed,參數是角色,來控制權限。這種擴展就有很大的局限性
Function 表的 ACCESS_URL 是一個抽象地址,用來表示此功能是否有入口地址。注意,他并不是菜單的訪問地址,后面的Menu 會關聯到Function從而獲得Function的訪問地址。
PARENT_ID 表示上一級功能,這有助于樹型管理。再次說明,Function只是你開發的目標系統的功能描述。并沒有涉及到權限,他相當于RBAC模型里的資源
Function中的type指名了功能是查詢功能,還是修改功能,如果是查詢功能,可以在后面數據權限里分配一個數據權限。FN0 表示查詢功能,FN1表示修改功能
- 再版說明
- 1 前言
- 1.1 內容介紹
- 1.2 Java EE
- 1.2.1 Java EE 架構
- 1.5 如何閱讀本書
- 1.6 本書第二版與第一版區別
- 1.7 本書例子
- 1.8 購買正版
- 2 Spring Boot 基礎
- 2.1 檢查Java環境
- 2.2 安裝IDE
- 2.3.1 安裝Eclipse
- 2.3.2 安裝Idea
- 2.3.3 Idea和 Eclipse 區別
- 2.3 Maven安裝和配置
- 2.3.1 Maven介紹
- 2.3.2 安裝Maven
- 2.3.3 pom文件構成
- 2.3.4 設置Maven鏡像
- 2.3.5 IDE設置Maven
- 2.4 Spring框架
- 2.4.1 Spring 歷史
- 2.4.2 Spring 容器介紹
- 2.4.3 Spring 常用注解
- 2.5 Hello,Spring Boot
- 2.5.1 創建一個Maven工程
- 2.5.2 增加Web支持
- 2.5.3 hello world
- 2.5.4 使用熱部署
- 2.5.5 添加Rest支持
- 2.5.6 配置HTTP監聽端口
- 3 MVC框架
- 3.1 集成MVC框架
- 3.1.1 引入依賴
- 3.1.2 Web應用目錄結構
- 3.1.3 Java 包名結構
- 3.2 使用Controller
- 3.3 URL 映射到方法
- 3.3.1 @RequestMapping
- 3.3.2 URL路徑匹配
- 3.3.4 HTTP method匹配
- 3.3.5 consumes和 produces
- 3.3.6 params和header匹配
- 3.4 方法參數
- 3.4.1 PathVariable
- 3.4.2 Model&ModelAndView
- 3.4.3 JavaBean接收HTTP參數
- 3.4.4 @RequsestBody接收JSON
- 3.4.5 MultipartFile
- 3.4.6 @InitBinder
- 3.5 驗證框架
- 3.5.1 JSR-303
- 3.5.2 MVC中使用@Validated
- 3.5.3 自定義校驗
- 3.6 WebMvcConfigurer
- 3.6.1 攔截器
- 3.6.2 跨域訪問
- 3.6.3 格式化
- 3.6.4 注冊Controller
- 3.7 Redirect 和 Forward
- 3.8 通用錯誤處理
- 3.9 異步請求
- 3.10 處理靜態資源
- 3.11 調用Service
- 3.11.1 申明一個Service類
- 3.11.2 事務管理
- 3.12 CURL 命令
- 4 視圖技術
- 4.1 Json技術
- 4.1.1 SpringBoot中使用Jackson
- 4.1.2 配置Jackson
- 4.1.3 Jackson三種使用方式
- 4.1.4 Jackson 樹遍歷
- 4.1.5 對象綁定
- 4.1.6 流式操作
- 4.1.7 Jackson 注解
- 4.1.9 集合的反序列化
- 4.1.10 關于Jackson性能說明
- 4.2 Beetl模板引擎
- 4.2.1 安裝Beetl
- 4.2.2 設置定界符號和占位符
- 4.2.3 自動檢測模板變化
- 4.2.4 GroupTemplate
- 4.2.5 使用變量
- 4.2.6 表達式
- 4.2.7 控制語句
- 4.2.8 函數調用
- 4.2.9 格式化函數
- 4.2.10 直接調用Java
- 4.2.11 標簽函數
- 4.2.12 HTML標簽
- 4.2.13 安全輸出
- 4.2.14 配置Beetl
- 4.2.15 布局
- 4.2.16 驗證模板
- 4.2.17 腳本引擎
- 4.2.18 為什么選擇Beetl
- 5 數據庫訪問
- 5.1 配置數據源
- 5.2 Hikari 配置選項
- 5.3 JDBC Template
- 5.3.1 查詢
- 5.3.2 修改
- 5.3.3 JdbcTemplate 增強
- 5.3 Spring Data JPA 支持
- 5.3.1 創建Entity
- 5.3.2 簡化Entity
- 5.3.3 Repository
- 5.3.4 CrudRepository
- 5.3.5 PagingAndSortingRepository
- 5.3.6 JpaRepository
- 5.3.7 持久化Entity
- 5.3.6 Sort
- 5.3.7 Pageable和 Page
- 5.3.8 基于方法名字查詢
- 5.3.9 @Query 查詢
- 5.3.10 使用JPA Query
- 5.3.11 Example 查詢
- 5.3.12 一個使用JPA糟糕回憶
- 6 BeetlSQL
- 6.1 BeetlSQL 特點
- 6.2 配置BeetlSQL
- 6.3 一個例子
- 6.3.1 創建實體對象
- 6.3.2 創建Dao
- 6.3.3 編寫Service
- 6.3.4 編寫一個復雜的SQL
- 6.4 SQLManager
- 6.5 Mrakdown 文件
- 6.6 跨數據庫
- 6.6 翻頁查詢
- 6.7 實體對象和多表結果集
- 6.8 直接使用SQL
- 6.9 Query 類
- 6.10 代碼生成
- 6.11 BeetlSQL函數
- 6.11 一些重要注解
- 6.11.1 @Table
- 6.11.2 @Version
- 6.11.3 @SqlResource
- 6.11.4 @SqlProvider
- 6.11.5 自定義注解
- 6.12 重要配置事項
- 6.13 擴展BeetlSQL
- 6.14 主從支持
- 6.15 最佳實踐
- 7 MyBatis
- 7.1 Spring Boot 集成
- 7.2 編寫Mapper文件
- 7.2.1 查詢
- 7.2.2 更新語句
- 7.2.4 SQL片段
- 7.3 動態SQL
- 7.4 MyBatis-Plus集成
- 8 Spring Boot 配置
- 8.1 SpringBoot 配置
- 8.1.1 服務器配置
- 8.1.2 使用其他Web服務器
- 8.1.3 配置啟動信息
- 8.1.4 配置瀏覽器顯示ico
- 8.2 日志配置
- 8.3應用配置讀取
- 8.3.1 Environment
- 8.3.2 @Value
- 8.3.3 @ConfigurationProperties
- 8.4 SpringBoot 自動裝配
- 8.4.1 @Configuration和@Bean
- 8.4.2 Bean條件裝配
- 8.4.3 Class 條件裝配
- 8.4.4 Environment裝配
- 8.4.5 其他條件裝配
- 8.4.6 聯合多個條件
- 8.4.7 Condition接口
- 8.4.8 制作Stater
- 8.5 Application.properties
- 8.6 其他配置
- 8.6.1 靜態文件配置
- 8.6.2 熱啟動配置
- 8.7 HikariCP配置
- 9 部署Spring Boot 應用
- 9.1 以Jar文件運行
- 9.2 以war方式部署
- 9.3 多環境部署
- 9.4 @Profile
- 9.5 Launcher
- 10 Testing 單元測試
- 10.1 JUnit 介紹
- 10.1.1 Junit相關概念
- 10.1.2 Junit 測試
- 10.1.3 Assert
- 10.1.4 Suite
- 10.2 Spring Boot 單元測試
- 10.2.1 測試范圍依賴
- 10.2.2 SpringBoot 測試腳手架
- 10.2.3 測試Service
- 10.2.4 測試MVC
- 10.2.5 完成MVC請求模擬
- 10.2.6 比較 MVC返回結果
- 10.2.7 JSON 比較
- 10.3 Mockito
- 10.3.1 模擬對象
- 10.3.2 模擬方法參數
- 10.3.3 模擬方法返回值
- 10.4 @Sql
- 11 AOP和事務
- 11.1 AOP
- 11.2 事務和Spirng 事務管理
- 11.2.1 事務處理
- 11.2.2 隔離保護
- 11.2.3 Spring Boot 事務管理
- 11.2.4 分布式事物
- 12 Spring Boot Plus 安裝
- 12.1 代碼工程
- 12.2 單體系統到系統拆分
- 12.3 安裝
- 12.4 核心模型
- 12.4.1 Function
- 12.4.2 Menu
- 12.4.3 Role
- 12.4.4 User表
- 12.4.5 數據字典表
- 12.4.6 審計表
- 12.5 代碼生成
- 12.5.1 子系統生成
- 12.5.1 配置子系統
- 12.5.2 業務代碼生成
- 12.6 權限系統原理
- 12.6.1 功能權限
- 12.6.2 數據權限
- 12.6.3 加密
- 12.7 Plus的配置類