# zknotebe **Repository Path**: chanchaw/zknotebe ## Basic Information - **Project Name**: zknotebe - **Description**: 知科云笔记后台服务, - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2023-07-08 - **Last Updated**: 2025-07-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: SpringBoot, 后台, Java ## README ## 教程笔记 教程笔记:https://www.yuque.com/yuqueyonghua0uca7/os6eyf/peikt5x2htbe3xs9?#%E3%80%8A%E7%9F%A5%E7%A7%91%E7%AC%94%E8%AE%B0%E3%80%8B ## redis ### 登录 token `UserServiceImpl.java # login` 方法中登录成功会使用 `UUID` 生成 `token` 写入 `redis` 中,以后的请求都要求客户端带有 token ,服务的从 redis 验证 token 的有效性决定当前登录状态是否有效,同时可以根据 token 获取用户身份 - token 在 redis 中是 key ,value 是用户信息。 ### 根据 token 获取用户登录信息 `SystemUtils.java # getRedisTokenUser` 根据 `token` 查询 `redis` 获取用户信息 ## Mybatis-Flex ### 引用 mybatis-flex 生成的静态对象 使用 IDEA 自带的 maven 时无法使用 mybatis-flex 生成的静态对象,如下图 ![](./doc/img/无法使用mybatis-flex静态对象.png) 参照自己的文章 https://www.yuque.com/chanchaw/pkb/kxdv6p#YhUDr 独立安装 maven(不使用 IDEA 内置的)然后配置 IDEA ![](./doc/img/配置IDEA使用自定义maven.png) 按照下图步骤清理并重新编译项目,上面的报错就消失了 ![](./doc/img/清理maven后mybatis-flex可用.png) ## 代码生成器 ### 传入参数 ```json { "folder":"java/cc/common", "freemarkerFileNameList":["${tableInfo.modelClassName}.java","${tableInfo.modelClassName}Mapper.java"], "data":{ "projPackage":{ "projPackage":"com.cc.whiteaccount" }, "tableInfo":{ "modelClassName":"OvertimeMain", "fieldInfoList":[ {"attributeName":"id","primaryKey":true,"javaType":"Integer","remarks":"自增主键"}, {"attributeName":"goodsName","primaryKey":false,"javaType":"String","remarks":"品名"} ] }, "billInfo":{ "billClass": "BillFabContract", "mainClass": "FabContractMain", "detailClass": "FabContractDetail", "billRemark": "成品合同单据" } } } ``` 12月21日 测试时前端点击生成代码时传递给后端的参数是 ```json { "folder": "java/cc/billWithExample", "freemarkerFileNameList": [ "${tableInfo.modelClassName}.java", "${tableInfo.modelClassName}Controller.java", "${tableInfo.modelClassName}Mapper.java", "${tableInfo.modelClassName}Mapper.xml", "${tableInfo.modelClassName}Service.java", "${tableInfo.modelClassName}ServiceImpl.java" ], "data": { "projPackage": { "projPackage": "com.cc.femis", "controller": "controller", "service": "service", "dao": "dao", "entity": "model" }, "tableInfo": { "dbName": "showa2023", "tableName": "apply_money_detail", "modelClassName": "ApplyMoneyDetail", "remarks": "单据|请款单|明细表", "fieldInfoList": [], "key": "apply_money_detail", "label": "apply_money_detail", "isDb": false, "isTable": true, "isField": false, "isLeaf": false } }, "dbConfig": { "ip": "localhost", "port": "3306", "userName": "root", "passWord": "chanchaw" } } ``` 后端执行后响应给前端的结果是 ```json { "success": true, "data": [ "ApplyMoneyDetail.java", "ApplyMoneyDetailController.java", "ApplyMoneyDetailMapper.java", "ApplyMoneyDetailMapper.xml", "ApplyMoneyDetailService.java", "ApplyMoneyDetailServiceImpl.java" ] } ``` ### 错误与提示 如下面提示模板 ts 中出错,表示模板文件的文件名中使用的变量没找到,例如模板文件名 Bill${billClass}.java,说明前端传递来的参数中没有名称为 billClass 的变量,或者该名称的变量处于内嵌对象的子属性。 ``` freemarker.core.InvalidReferenceException: The following has evaluated to null or missing: ==> billClass [in template "ts" at line 1, column 7] ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${billClass} [in template "ts" at line 1, column 5] ``` ## 安装与部署 ### 服务器 项目后台部署在 “染厂云” 服务器上,路径是 `/projs/zknote/` ,前后端项目都在该目录下,启动命令 `systemctl start zknote` ### 代码模板文件 代码的模板文件在 `/projs/zknote/templates/` ,制作新模板后记得将模板文件拷贝到该目录下 特别需要注意的,前端项目中模板文件树是根据 `/projs/zknote/templates/` 的目录结构创建的,但是实际使用的模板是后台项目源码中包含的文件