248 lines
8.7 KiB
Markdown
248 lines
8.7 KiB
Markdown
# jero-boot 低代码开发平台(青春版)
|
||
|
||
===============
|
||
|
||
当前最新版本: 2.4.2(发布日期:20210126)
|
||
青春版修改内容请看第五点和第六点
|
||
|
||
## 后端技术架构
|
||
|
||
- 基础框架:Spring Boot 2.3.5.RELEASE
|
||
|
||
- 持久层框架:Mybatis-plus 3.4.1
|
||
|
||
- 安全框架:Apache Shiro 1.7.0,Jwt 3.11.0
|
||
|
||
- 数据库连接池:阿里巴巴Druid 1.1.22
|
||
|
||
- 缓存框架:redis
|
||
|
||
- 日志打印:logback
|
||
|
||
- 其他:fastjson,poi,Swagger-ui,quartz, lombok(简化代码)等。
|
||
|
||
## 开发环境
|
||
|
||
- 语言:Java 8
|
||
|
||
- IDE(JAVA): Eclipse安装lombok插件 或者 IDEA
|
||
|
||
- 依赖管理:Maven
|
||
|
||
- 数据库:MySQL5.7+ & Oracle 11g
|
||
|
||
- 缓存:Redis
|
||
|
||
## 技术文档
|
||
|
||
- 在线文档: [http://doc.xxx.com](http://doc.xxx.com)
|
||
|
||
- 常见问题: [http://xxx.com/doc/qa](http://xxx.com/doc/qa)
|
||
|
||
## 专项文档
|
||
|
||
### 初始管理员账户密码
|
||
|
||
账户: admin
|
||
密码: 123456
|
||
|
||
### 一、查询过滤器用法
|
||
|
||
```text
|
||
QueryWrapper<?> queryWrapper = QueryGenerator.initQueryWrapper(?, req.getParameterMap());
|
||
```
|
||
|
||
代码示例:
|
||
|
||
```text
|
||
|
||
@GetMapping(value = "/list")
|
||
public Result<IPage<JeroDemo>> list(JeroDemo jeroDemo, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
|
||
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
|
||
HttpServletRequest req) {
|
||
Result<IPage<JeroDemo>> result = new Result<IPage<JeroDemo>>();
|
||
|
||
//调用QueryGenerator的initQueryWrapper
|
||
QueryWrapper<JeroDemo> queryWrapper = QueryGenerator.initQueryWrapper(jeroDemo, req.getParameterMap());
|
||
|
||
Page<JeroDemo> page = new Page<JeroDemo>(pageNo, pageSize);
|
||
IPage<JeroDemo> pageList = JeroDemoService.page(page, queryWrapper);
|
||
result.setSuccess(true);
|
||
result.setResult(pageList);
|
||
return result;
|
||
}
|
||
|
||
```
|
||
|
||
- 查询规则 (本规则不适用于高级查询,高级查询有自己对应的查询类型可以选择 )
|
||
|
||
| 查询模式 | 用法 | 说明 |
|
||
|---------- |-------------------------------------------------------|------------------|
|
||
| 模糊查询 | 支持左右模糊和全模糊 需要在查询输入框内前或后带\*或是前后全部带\* | |
|
||
| 取非查询 | 在查询输入框前面输入! 则查询该字段不等于输入值的数据(数值类型不支持此种查询,可以将数值字段定义为字符串类型的) | |
|
||
| \> \>= < <= | 同取非查询 在输入框前面输入对应特殊字符即表示走对应规则查询 | |
|
||
| in查询 | 若传入的数据带,(逗号) 则表示该查询为in查询 | |
|
||
| 多选字段模糊查询 | 上述4 有一个特例,若某一查询字段前后都带逗号 则会将其视为走这种查询方式 ,该查询方式是将查询条件以逗号分割再遍历数组 将每个元素作like查询 用or拼接,例如 现在name传入值 ,a,b,c, 那么结果sql就是 name like '%a%' or name like '%b%' or name like '%c%' | |
|
||
|
||
### 三、代码生成器
|
||
|
||
> 功能说明: 一键生成的代码(包括:controller、service、dao、mapper、entity、vue)
|
||
|
||
- 模板位置: src/main/resources/jero/code-template
|
||
- 技术文档: <http://doc.xxx.com/>
|
||
|
||
### 四、编码排重使用示例
|
||
|
||
重复校验效果:
|
||

|
||
|
||
1.引入排重接口,代码如下:
|
||
|
||
```js
|
||
import { duplicateCheck } from '@/api/api'
|
||
```
|
||
|
||
2.找到编码必填校验规则的前端代码,代码如下:
|
||
|
||
```js
|
||
<a-input placeholder="请输入编码" v-decorator="['code', validatorRules.code ]"/>
|
||
|
||
code: {
|
||
rules: [
|
||
{ required: true, message: '请输入编码!' },
|
||
{validator: this.validateCode}
|
||
]
|
||
}
|
||
```
|
||
|
||
3.找到rules里validator对应的方法在哪里,然后使用第一步中引入的排重校验接口.
|
||
以用户online表单编码为示例,其中四个必传的参数有:
|
||
|
||
```text
|
||
{tableName:表名,fieldName:字段名,fieldVal:字段值,dataId:表的主键},
|
||
```
|
||
|
||
具体使用代码如下:
|
||
|
||
```text
|
||
validateCode(rule, value, callback){
|
||
let pattern = /^[a-z|A-Z][a-z|A-Z|\d|_|-]{0,}$/;
|
||
if(!pattern.test(value)){
|
||
callback('编码必须以字母开头,可包含数字、下划线、横杠');
|
||
} else {
|
||
var params = {
|
||
tableName: "onl_cgreport_head",
|
||
fieldName: "code",
|
||
fieldVal: value,
|
||
dataId: this.model.id
|
||
};
|
||
duplicateCheck(params).then((res)=>{
|
||
if(res.success){
|
||
callback();
|
||
}else{
|
||
callback(res.message);
|
||
}
|
||
})
|
||
}
|
||
}
|
||
```
|
||
|
||
6.访问后台项目(注意要开启swagger)
|
||
|
||
```text
|
||
http://localhost:8080/jero-boot/doc.html
|
||
```
|
||
|
||
### 五 精简功能
|
||
|
||
1. 去除了Online代码生成功能的sql,代码,配置文件
|
||
jero-boot-base-generater模块 和 jero-boot-base-generater-core模块
|
||
2. 去除了spring cloud相关的代码和依赖
|
||
3. 去除了demo模块的内容
|
||
4. 去除了多租户模块功能
|
||
5. 把jero-system-local-api模块改为jero-boot-base-api模块
|
||
删除jero-system-cloud-api模块
|
||
|
||
### 六 新增功能
|
||
|
||
1. 集成p6spy sql打印依赖
|
||
- 数据库url和驱动改为p6spy
|
||
- 注释了yml文件里mybatis-plus的sql打印
|
||
- 增加了[spy.properties](/jero-boot-single-startup/src/main/resources/spy.properties)配置文件
|
||
|
||
2. 增加[@DictPoint](/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/annotation/DictPoint.java)注解(会查找返回值中的@Dict返回字典数据)
|
||
使用方法如下:
|
||
|
||
```text
|
||
@DictPoint
|
||
@GetMapping(value = "/a")
|
||
public Result<SysMessage> a() {
|
||
|
||
}
|
||
```
|
||
|
||
3. 账号和密码提示信息改为"登录失败,用户名或密码错误!"
|
||
4. 验证码过期时间改为5分钟
|
||
5. 指定生成的jar包名
|
||
[pom.xml](./pom.xml)
|
||
|
||
```xml
|
||
<build>
|
||
<finalName>jero-boot</finalName>
|
||
</build>
|
||
```
|
||
|
||
6. 增加xss过滤,cors过滤,html过滤,sql过滤
|
||
[webConfig](/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/WebConfig.java)
|
||
[xss过滤](/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/filter/xss/XssFilter.java)
|
||
[cors过滤](/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/filter/cors/CorsFilter.java)
|
||
[html过滤](/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/filter/xss/HTMLFilter.java)
|
||
[sql过滤](/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/filter/xss/SqlFilter.java)
|
||
在jero-boot-base-core模块com.jero.config.filter路径下
|
||
7. @Valid相关
|
||
- 增加全局处理@Valid验证异常
|
||
在jero-boot-base-core模块com.jero.common.exception路径下
|
||
[JeroBootExceptionHandler](/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/exception/JeroBootExceptionHandler.java)
|
||
|
||
````text
|
||
/**
|
||
* get方法使用BindException接收
|
||
*/
|
||
@ExceptionHandler(BindException.class)
|
||
@ResponseBody
|
||
public Result<?> handleBindException(BindException e) {
|
||
log.error(e.getMessage(), e.getBindingResult().getFieldError().getDefaultMessage());
|
||
return Result.error(e.getBindingResult().getFieldError().getDefaultMessage());
|
||
}
|
||
|
||
/**
|
||
* post方法使用MethodArgumentNotValidException接收
|
||
*/
|
||
@ExceptionHandler(MethodArgumentNotValidException.class)
|
||
@ResponseBody
|
||
public Result<?> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
|
||
log.error(e.getMessage(),e.getBindingResult().getFieldError().getDefaultMessage());
|
||
return Result.error(e.getBindingResult().getFieldError().getDefaultMessage());
|
||
}
|
||
````
|
||
|
||
- 增加手动校验方法
|
||
[ValidUtil.validate()](/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/ValidUtil.java)
|
||
使用情景,当想要校验一个对象的参数是否符合规则时,随时随地都可以调用:
|
||
|
||
````text
|
||
public Result<SysUser> add(@RequestBody JSONObject jsonObject) {
|
||
Result<SysUser> result = new Result<SysUser>();
|
||
String selectedRoles = jsonObject.getString("selectedroles");
|
||
String selectedDeparts = jsonObject.getString("selecteddeparts");
|
||
SysUser user = JSON.parseObject(jsonObject.toJSONString(), SysUser.class);
|
||
ValidUtil.validate(user);
|
||
````
|
||
|
||
8. 修改重复校验工具的校验规则[DuplicateCheckController](/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/DuplicateCheckController.java)
|
||
- 增加了一个混淆表sys_confusion 参数有
|
||
- |表明|字段名|混淆码|
|
||
|----|----|----|
|
||
|table_name|field_name|confusion_code|
|
||
- 根据传入的混淆码获取表名和字段名,然后重复校验
|