# 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> list(JeroDemo jeroDemo, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { Result> result = new Result>(); //调用QueryGenerator的initQueryWrapper QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(jeroDemo, req.getParameterMap()); Page page = new Page(pageNo, pageSize); IPage 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 - 技术文档: ### 四、编码排重使用示例 重复校验效果: ![输入图片说明](https://static.oschina.net/uploads/img/201904/19191836_eGkQ.png "在这里输入图片标题") 1.引入排重接口,代码如下: ```js import { duplicateCheck } from '@/api/api' ``` 2.找到编码必填校验规则的前端代码,代码如下: ```js 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 a() { } ``` 3. 账号和密码提示信息改为"登录失败,用户名或密码错误!" 4. 验证码过期时间改为5分钟 5. 指定生成的jar包名 [pom.xml](./pom.xml) ```xml jero-boot ``` 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 add(@RequestBody JSONObject jsonObject) { Result result = new Result(); 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| - 根据传入的混淆码获取表名和字段名,然后重复校验