「Fast AKash 1.0 ◎ 一个让开发回归本质,让业务主导需求的前后端分离式敏捷开发框架」正式发布
作者:互联网
Fast AKash ◎ API
文章目录
-
Fast AKash ◎ API - 前言
- 一、技术选型
- 二、项目地址
- 三、运行Fast Akash
- 四 、 SQL引擎使用入门「Fast Akash For Java」
- 五 、业务功能开发「Fast Akash For Java」
- 后记
前言
省去繁杂配置,简化冗余代码,精准精确,逻辑至上
欢迎您选择并使用Fast AKash前后端分离式快速开发框架 w(゚Д゚)w
Fast Akash已为您集成了项目最基础的欢迎您选择并使用系统管理相关模块
!支持「多权限分配及切换」w(゚Д゚)w
只需经过简单学习,您就可以轻松玩转本框架 w(゚Д゚)w
一、技术选型
-
Fast Akash For Java 「后端」
- Spring Boot 2.X
- Redis
- Rabbit MQ
- Druid
- MySql 5.7+
- JDK1.8+
- MyBatis
- …
-
Fast Akash For Ant-Design-Vue 「前端」
- Node.js
- Ant Design Of Vue
- Yarn
- WebPack
- @vue/cli ~3
- eslint
- …
二、项目地址
-
Gitee源码地址
-
github源码地址
- 「后端」 Fast Akash For Java - GitHub
- 「前端」 Fast Akash ForAnt-Design-Vue - GitHub
↑上图内的功能,基础版框架已为您提供其全部功能
三、运行Fast Akash
在您正式运行Fast Akash相关项目前,请确保您的电脑已安装并配置了项目必备的运行环境
1.Fast AKash For JAVA
- 安装相关工具及依赖
- 选择拉取gitee或github的项目源码至本地
- 在mysql中执行src/main/resource/sqlinit目录下的fastAkash.sql
- 将项目导入Idea或MyEclipse 「建议使用idea」
- 修改src/main/resource目录下的application-dev.yml文件,补全及修改指定配置项
spring:
rabbitmq:
host: xxx
port: 5672
username: xxx
password: xxx
redis:
database: 0
host: xxx
port: 6379
password: xxx
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:xxxx/dataBasename?characterEncoding=utf8&useSSL=false&serverTimezone=CTT&useInformationSchema=true&
username: root
password: xxxx
akashConfig:
defaultFilePath: d:/ # 系统默认的文件上传地址
log_queue: xxx # 日志服务使用的队列名称
init: # 若您不想在后台反复修改本配置,建议您将init.enable设置为true即可
enable: false # 基础数据初始化 「关闭后系统启动时将不再自动对「数据库库表、字段」及「@schema逻辑层」进行数据同步」
baseInit: false # 是否同步系统底层数据表 默认为「false」
history: false # 是否保存历史字段及表信息 默认为「false」 设置为「true」时,同步数据会对原有数据进行备份
tables: # 在init.enable为「true」时,可以指定需要同步的数据表「多个间以,隔开」,为空视为同步指定数据库所有数据表
access:
enable: false # 强制鉴权控制,测试时请根据需要打开[true]或关闭[false]本项
- 编译/启动项目
- 访问项目: localhost/fastAkash
- 项目目录
- 开发时,您无需关心Controller层,Dao层及API层
只需在schema「逻辑层」目录下编写您项目的核心逻辑代码即可
2.Fast AKash For Vue
纯后端的同学可以自行学习相关内容或在前端的同学的指导下操作 w(゚Д゚)w @
- 安装相关工具及依赖
- 选择拉取gitee或github的项目源码至本地
- 安装依赖: yarn install 「要在当前项目文件夹目录打开cmd窗口执行哦 w(゚Д゚)w 」
- 开发模式运行: yarn run serve
- 项目发布: yarn run build
「默认发布的代码在/dist目录下,也可以将build的地址更改至后端项目的/src/main/resource/static目录下或直接将/dist文件夹中的内容copy至后端项目的/src/main/resource/static目录中」
- 访问项目: localhost:8000/#/
- 项目基础配置地址:/src/config/defaultSetting.js
/**
* 项目默认配置项
* primaryColor - 默认主题色, 如果修改颜色不生效,请清理 localStorage
* navTheme - sidebar theme ['dark', 'light'] 两种主题
* colorWeak - 色盲模式
* layout - 整体布局方式 ['sidemenu', 'topmenu'] 两种布局
* fixedHeader - 固定 Header : boolean
* fixSiderbar - 固定左侧菜单栏 : boolean
* contentWidth - 内容区布局: 流式 | 固定
*
* storageOptions: {} - Vue-ls 插件配置项 (localStorage/sessionStorage)
* url : 后台请求链接
* accessLogin: 前端是否启用强制校验(测试时使用false)
*/
export default {
url: '',
accessLogin: true,
navTheme: 'dark', // theme for nav menu
primaryColor: '#1890ff', // primary color of ant design
layout: 'sidemenu', // nav menu position: `sidemenu` or `topmenu`
contentWidth: 'Fluid', // layout of content: `Fluid` or `Fixed`, only works when layout is topmenu
fixedHeader: false, // sticky header
fixSiderbar: false, // sticky siderbar
multiTab: true,
colorWeak: false,
menu: {
locale: false
},
title: 'AkashFast',
pwa: false,
iconfontUrl: '',
production: process.env.NODE_ENV === 'production' && process.env.VUE_APP_PREVIEW !== 'true'
}
- 项目菜单路由配置地址:/src/config/router.config.js
「更详细的内容将在未来放出,敬请关注~w(゚Д゚)w 」
四 、 SQL引擎使用入门「Fast Akash For Java」
在本小节中,您将学习到Fast Akash开发中最为核心的功能引擎sqlEngine最简单的使用方式
这也将是您在未来使用Fast Akash For Java开发时不可或缺的一大助力w(゚Д゚)w
SQL 引擎使用示例①:↓
private sqlEngine buildEngine(BaseData executeData) {
BaseData data = StringKit.parseBaseData(executeData.getString("executeData"));
sqlEngine st = new sqlEngine().execute("sys_user", "t")
.joinBuild("sys_userrole","s", joinType.L)
.joinColunm("s","uid","t","id")
.joinFin();
//TODO 参数匹配
//请注意,若使用此类型进行数据操作时,请严格按照sqlEngine传参格式在key值前加入固定参数标识@,如@key
Integer state = data.getInter("state");
if (state != -1) {
st.queryBuild(queryType.and, "t", "@state", conditionType.EQ, groupType.DEF, state + "");
}
// 权限查询
String rid = data.getString("rid");
st.queryBuild(queryType.and,"s","@rid",conditionType.QUERY_ROLE,groupType.DEF,!rid.isEmpty() ? rid : getRid(data));
st.appointColumn("s",groupType.DEF,"rid,uid");
st.appointColumn("t", groupType.DEF, "id,name,email,mobile,openid,last_ip,last_time,state,version,is_lock");
st.groupBuild("s", "uid");
st.dataSort("t","name", sortType.UTF_ASC);
return st;
}
/**
* 查询系统内已有的系统用户「顾问」
*
* @param executeData
* @return
*/
@Access({AccessType.SEL})
public Map<String, Object> selectUserList(BaseData executeData) {
return baseApi.selectPageBase(pageEngine(buildEngine(executeData), executeData, false).selectTotal());
}
/**
* 根据查询列表设置的条件导出用户信息
*
* @param executeData
* @return
*/
@Access({AccessType.EXPORT})
public ModelAndView exportUserData(BaseData executeData) {
//1.设置xlxs的基本信息
BaseData excelParams = new BaseData();
excelParams.put("cellName", "name,email,mobile,note,is_lock");
excelParams.put("cellParseName", "用户名,企业邮箱,联系方式,备注信息,是否锁定");
//2.对特定字段转换
BaseData parseParams = new BaseData();
BaseData parseLock = new BaseData();
parseLock.put("0","否");
parseLock.put("1","是");
parseParams.put("is_lock",parseLock);
excelParams.put("parseCellValue", parseParams);
excelParams.put("fileName", "系统用户信息");
return excelImport.importExcel(baseApi.selectBase(buildEngine(executeData).selectFin("")), excelParams);
}
以上代码为标准示例,也是更为推荐您在后期开发时使用的一种标准代码模板(查询及导出)
接下来我将带您使用SQL引擎创建一个最简单的SQL查询语句
// 声明并表示一个SQL引擎的开始及创建
sqlEngine st = new sqlEngine();
// 声明主表及主表别名
st.execute("table", "t");
// 结束标识,以此表示一个完整SQL的结束
st.selectFin('');
以上代码将生成 : select * from table as t;
怎么样,是不是很简单w(゚Д゚)w
接下来我将带您创建一个带条件的简单查询
// 声明并表示一个SQL引擎的开始及创建
sqlEngine st = new sqlEngine();
// 声明主表及主表别名
st.execute("table", "t");
// 声明一个查询条件
st.queryBuild(queryType.and, "t", "@state", conditionType.EQ, groupType.DEF, "0");
// 结束标识,以此表示一个完整SQL的结束
st.selectFin('');
以上代码将生成 : select * from table as t where t.state = 0 ;
难度要提升了哦,让我们来试试连表如何实现吧w(゚Д゚)w
// 声明并表示一个SQL引擎的开始及创建
sqlEngine st = new sqlEngine();
// 声明主表及主表别名
st.execute("table", "t");
// 声明外联表,外联表别名及连表规则,本示例中为L,即Left
st.joinBuild("table2","s", joinType.L)
// 声明外联表关系
st.joinColunm("s","uid","t","id")
// 声明当前外联关系的结束
st.joinFin();
st.queryBuild(queryType.and, "t", "@state", conditionType.EQ, groupType.DEF, "0");
// 结束标识,以此表示一个完整SQL的结束
st.selectFin('');
以上代码将生成 : select * from table as t left join table2 as s on s.uid=t.id where t.state = 0 ;
学到这里您是不是已经感觉迫不及待要自己尝试一下了呢?(๑•̀ㅂ•́)و✧
稍等一下,还有一样黑科技↓
st.queryBuild(queryType.and,"s","@rid",conditionType.QUERY_ROLE,groupType.DEF,rid);
他就是:QUERY_ROLE
想必您已经在最开始的示例中见过他了
他的作用就是根据给定的权限查询其权限及其全部子级权限
在您需要对数据加权时,他将会是您的得力助手哦o(*≧▽≦)ツ
只需要一句代码,您就可以轻而易举的实现权限层级的数据分离了,是不是很棒?
最后,让我们再认识几个常用的小伙伴吧~
// 声明需要对查询结果进行排序
// 目前支持ASC,DESC以及根据中文进行排序的UTF_ASC,UTF_DESC
st.dataSort("t","name", sortType.UTF_ASC);
// 声明需要定向查询的字段
// 使用#可以为当前字段添加别名,即 select rid as role_id from xxx...
// 用逗号(英文)隔开多个需要查询的字段
// 多表使用时,再次声明即可
st.appointColumn("s",groupType.DEF,"rid,uid");
st.appointColumn("t",groupType.DEF,"rid#role_id");
// 数据分页,limit 1,10 「正常情况下,使用时记得加上@标识哦」
st.dataPaging("@1", "@10");
// 结束标识,因为我很关键,所以我又来了
st.selectFin('');
sql引擎的简单使用方式就暂时介绍到这里了,后期我会详细的写一篇API提供给大家,敬请关注~<( ̄︶ ̄)>
五 、业务功能开发「Fast Akash For Java」
在本小节中,您将学习在Fast Akash中如何快速开发您的逻辑代码
充分感受并体验到Akash为您带来的极致编码体验
在schema目录下创建一个java文件夹,如「business」
在「business」文件夹下创建您的业务逻辑代码类,如「businessSchema.java」
/**
* business 业务逻辑类
* TODO : 业务逻辑类
* @author HaoNan Yan
*/
@Service
@Transactional(readOnly = true)
@Schema(code = "business", name = "业务逻辑类")
public class businessSchema extends BaseSchema {
// ...
}
以下两点很关键!!这关系着系统是否可以正常的对外提供数据接口!!
- schema业务类必须标注@Schema注解
- 业务类相关schema必须继承BaseSchema
在您熟悉并了解@Schema注解后,我们现在开始编写一个逻辑方法
/**
* 「新增/创建」
*/
@Access({AccessType.ADD})
@Transactional(readOnly = false)
public String add(BaseData executeData) {
// ...
}
/**
* 「删除」
*/
@Access({AccessType.DEL})
@Transactional(readOnly = false)
public String del(BaseData executeData) {
// ...
}
/**
* 「更新」
*/
@Access({AccessType.UPD})
@Transactional(readOnly = false)
public String upd(BaseData executeData) {
// ...
}
// 查询
@Access({AccessType.SEL})
// 导出
@Access({AccessType.EXPORT})
// 导入/上传
@Access({AccessType.UPLOAD})
// ...
方法一定要加上@Access鉴权注解哦,系统会以此为标准对接口进行鉴权限制
请根据方法实际作用效果选择对应的AcessType
在简单的了解了类和方法的关键注解后,我们接下来学习一下对外的统一标准接口
/**
* 系统业务 · 统一入口
*
*
* @param schemaName 需要调用的业务逻辑名称,默认使用base
* @param methodName 需要请求的方法名称
* @param id 数据表id / sql数据引擎id TODO ※ schemaName非base时,允许为空
* @param data 封装参数 方法所需参数集合 TODO ※ 允许为空,为空时建议传入 -> {}
* {
* *id :
* *executeData :
* {
* paramA : ……参数A
* paramB : ……参数B
* ……
* }
* }
* TODO 基础逻辑方法 「base」 :
* 1. select 查询数据 TODO ※ 需要使用sql引擎id
* 2. selectPage 查询数据「含分页」 TODO ※ 需要使用sql引擎id
* 3. selectByOne 根据数据id查询指定数据信息
* 4. insertData 新增数据
* 5. updateData 更新数据
* 6. deleteDataSoft 数据软删除
* 7. deleteData 数据暴力删除
* TODO 3~7 demo示例可在AkashApplicationTests查看
*
* @return 请求结果
*/
@CrossOrigin(origins = "*", maxAge = 3600)
@RequestMapping(value = "/executeUnify",
method = RequestMethod.POST,
produces = "application/json;charset=UTF-8")
public String executeUnify(
@RequestParam(value = "schemaName", required = false, defaultValue = "base") String schemaName,
@RequestParam(value = "methodName") String methodName,
@RequestParam(value = "id", required = false, defaultValue = "") String id,
@RequestParam(value = "data", required = false, defaultValue = "{}") String data) {
if (accessTool.accessParamCheck(schemaName, methodName, id)) {
//⚠ 检测到注入攻击
Map<String, Object> result = new ConcurrentHashMap<>();
result.put("result", "0");
result.put("resultData", "⚠ 操作失败,请联系管理员");
return JSON.toJSONString(result);
} else {
//数据正常,放行
BaseData execute = StringKit.parseBaseData(data);
return StringKit.formatSchemaData(invokeMethod(schemaName, methodName, id, execute));
}
}
executeUnify: 除导入上传及导出下载外,统一的标准型对外接口
这个接口具备统一的入参及返回值格式,即前端无需因为接口不统一的繁琐而增大工作量,后端也不用为了不同返回值的格式而浪费大量的时间
现在我们结合@Schema来实现一次接口调用
接口地址:localhost/executeUnify
{
schemaName: business
methodName: sel
id:
data: {"state":1}
}
返回值:
{
result: "NAC"
resultData: "⚠ 操作失败:无数据访问权限"
}
聪明的你是不是已经发现了
schemaName就是@Schema注解的code
methodName就是schema中的sel方法
而返回值也是经过系统处理,变成了result + resultData的格式
至此,相关后台的简要学习就要结束了,更多相关本框架的学习内容敬请关注我的博客~
后记
有关BUG反馈,请提交至gitee或github的issue
如您或更好的想法及建议,请加Q群:515548799
如您想加入协作,请加Q群并联系群主
如果您喜欢Fast Akash,请在gitee或github点击watch/star或fork本项目
您的支持,就是Fast Akash攀向巅峰的最大助力!
Thaks for watch and change Fast Akash
标签:false,AKash,Fast,st,executeData,分离式,1.0,id,Akash 来源: https://blog.csdn.net/qq_27047215/article/details/115228902