关于代码生成:FoxnicWeb-代码生成-10-生成菜单与授权

Foxnic-Web 代码生成 (10) —— 生成菜单与受权概述 模块代码生成之后,咱们须要为配置菜单。配置菜单是一系列的过程,包含创立资源、创立菜单并关联资源,并将菜单受权给指定的角色。 本文中的示例代码均可在 https://gitee.com/LeeFJ/foxni... 我的项目中找到,本文对照 webfull 我的项目解说。 残缺示例 Foxnic-Web 我的项目提供代码生成的残缺示例,请大家参考: https://gitee.com/LeeFJ/foxni...生成菜单 生成菜单蕴含若干步骤,波及到资源、菜单、角色等零碎表。示例我的项目 webfull 中的 generator 模块下的 MenuGenerator 类曾经实现菜单生成与受权的全过程。以下是菜单生成时应用的局部代码: /*** 超级管理员角色ID* */public static final String SUPER_ADMIN_ROLE_ID="110352963290923110";public static void main(String[] args) { MenuGenerator mg=null; // 创立一个 MenuGenerator,并传入必要的参数 mg=new MenuGenerator(WebFullTables.WEBFULL_EXAMPLE_REIMBURSEMENT.$TABLE, ReimbursementServiceProxy.class, ReimbursementPageController.class); // 生成菜单 mg.generate("643084271635922944");} 下面的代码中,咱们能够看到,MenuGenerator 应用一个常量指定了默认受权的角色。MenuGenerator 类在生成菜单时须要传入数据表元数据对象、Proxy 类、PageController 类,以提取资源门路。 生成菜单时调用 generate 办法,该办法须要传入一个上级菜单ID作为参数。因为 generate 办法会操作多表,改办法在外部应用了事务管控,不会因为某个步骤失败而产生垃圾数据。 generate 办法执行后会在控制台输入 batchId , 这个 batchId 也被存入菜单表中,batchId 能够用于以生成菜单的回滚。 回滚菜单 生成菜单时也有可能因为一些误操作而生成了谬误的菜单,这时咱们就须要撤销曾经生成的菜单、资源以及角色受权。咱们须要找到 batchId,而后调用 MenuGenerator.removeByBatchId() 。如下代码所示: ...

January 13, 2023 · 1 min · jiezi

关于代码生成:mybatisgenerator代码生成器的使用方法

mybatis-generator代码生成器依赖<dependencies> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.15</version> </dependency> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.7</version> </dependency> </dependencies> <build> <plugins> <plugin> <!--Mybatis-generator插件,用于主动生成Mapper和POJO--> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.2</version> <configuration> <!--配置文件的地位--> <configurationFile>src/main/resources/mybatis/mybatis-generator.xml</configurationFile> <verbose>true</verbose> <overwrite>true</overwrite> </configuration> <executions> <execution> <id>Generate MyBatis Artifacts</id> <goals> <goal>generate</goal> </goals> </execution> </executions> <dependencies> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.7</version> </dependency> </dependencies> </plugin> </plugins> </build>配置文件<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration> <!--数据库驱动--> <classPathEntry location="D:\Java\apache-maven-3.5.4\repository\mysql\mysql-connector-java\8.0.15\mysql-connector-java-8.0.15.jar"/> <context id="context" targetRuntime="MyBatis3"> <commentGenerator> <property name="suppressDate" value="true"/> <property name="suppressAllComments" value="true"/> </commentGenerator> <!--数据库链接地址账号密码--> <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/miaosha?serverTimezone=UTC" userId="root" password="123"> </jdbcConnection> <javaTypeResolver> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <!--生成Model类寄存地位--> <javaModelGenerator targetPackage="com.miaosha.dataobject" targetProject="src/main/java"> <property name="enableSubPackages" value="true"/> <property name="trimStrings" value="true"/> </javaModelGenerator> <!--生成映射文件寄存地位--> <sqlMapGenerator targetPackage="mybatis.mapper" targetProject="src/main/resources"> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> <!--生成Dao类寄存地位--> <javaClientGenerator type="XMLMAPPER" targetPackage="com.miaosha.dao" targetProject="src/main/java"> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <!--生成对应表及类名--> <table tableName="user_info" domainObjectName="userDAO" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> </table> <table tableName="user_password" domainObjectName="userpasswordDAO" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> </table> </context></generatorConfiguration>生成代码 ...

February 24, 2022 · 1 min · jiezi

sanritoolsmaven-代码生成工具

代码模板生成项目地址: https://gitee.com/sanri/sanri-tools-maven 优点?可能你已经在网上见过一些代码生成工具,还有 mybatis 自带的生成工具; 但是它帮你生成的实体类,还需要进行二次加工;有可能你需要继承一个基类,有可能你加了 swagger-ui 注解,有可能你使用了 lombok 并不需要 get & set ,有可能你使用 persistence-api 需要加 Column 注解 ; 我们急需一个可以获取元数据来自定义自己的模板来生成代码; 当然代码生成只是我工具的一小部分,还有很多实用的小功能集于一身. 发现BUG可以提Issue,可以给我发邮件,可以加我QQ,可以进代码生成群讨论. 作者QQ: 2441719087 作者邮箱: ningxiangsanri@163.com 代码生成交流群: 645576465 作者微信:sanri1993- 如何使用下载 release 版本的 tomcat 包,直接运行即可https://gitee.com/sanri/sanri-tools-maven/repository/archive/v1.1.0?format=zip 当前收纳的一些小工具方法或变量取名数据提取生份证号码生成与验证kafka 监控和 offset 设置,支持新旧版本 kafkazookeeper 数据监控模板代码生成,根据列字段列字段比较数据库表字段,注释,名称查询,及后续模板代码操作webservice 调试工具,只要输入 wsdl 地址,自动解析并构建 xml 消息下划线转驼峰,驼峰转下划线工具图片转 base64 ,base64 转图片SQL 客户端,已经支持 mysql,postgresql,oracle ; 可自定义实现其它数据库 表结构查询pojo,xml 生成项目模板代码生成数据导出数据表处理工具(SQL 客户端升级版 ) 可以根据变量自定义模板由多个模板组成一种方案单表使用模板生成,然后生成多种模板的代码后统一下载单表使用方案生成多表使用方案生成演示图首页图,主要展示可用的工具列表。这里并没有展示全部工具,可以按需添加代码生成工具截图kafka 监控截图

September 8, 2019 · 1 min · jiezi

『-效率工具-』Spring-Boot版的轻量级代码生成器减少70以上的开发任务

一. 前言之前很着迷于代码自动生成,减少写重复代码的工作量。网络上也搜索了很久,有基于插件的,有GUI的。但其配置和学习成本都比较高,都不是很如我意。本想自己用SpringBoot写一个,在收集相关的资料的时候, 偶然找到了人人开源实现的一个renren-generator项目,也正好是Spring Boot搭建的,也就下载下来,自己玩起来了。结合自己项目修改模板使用过后, 还是很方便的。我也不重复造轮子了。那么接下来就说说使用心得。 字段类型与实体类型可以自由配置支持表前缀可以设置是否取消数据库支持Mysql、Sqlserver、Oracle、Postgresql可在线生成entity、xml、dao、service、vue、sql代码2.本地部署我fork了一个renren-generator项目地址:https://gitee.com/rayson517/r... 通过git下载源码修改application.yml,更新MySQL账号和密码、数据库名称Eclipse、IDEA运行RenrenApplication.java,则可启动项目项目访问路径:http://localhost演示效果图: 3. 根据实际项目情况DIY代码生成模板模板路径在resources/template文件夹下面, 然后根据已有项目的代码结构,进行修改就好。 4. 一键生成sql数据库说明文档,解放双手这个功能是我自己DIY增加的功能,目前还没提交上去。需要的可以留言呢。 5. 扩展支持DB2扩展数据库DB2的支持,因为我们公司有在用。所以准备增加一个支持。

June 18, 2019 · 1 min · jiezi

使用-Nodejs-写一个代码生成器

背景第一次接触代码生成器用的是动软代码生成器,数据库设计好之后,一键生成后端 curd代码。之后也用过 CodeSmith , T4。目前市面上也有很多优秀的代码生成器,而且大部分都提供可视化界面操作。 自己写一个的原因是因为要集成到自己写的一个小工具中,而且使用 Node.js 这种动态脚本语言进行编写更加灵活。 原理代码生成器的原理就是:数据 + 模板 => 文件。 数据一般为数据库的表字段结构。 模板的语法与使用的模板引擎有关。 使用模板引擎将数据和模板进行编译,编译后的内容输出到文件中就得到了一份代码文件。 功能因为这个代码生成器是要集成到一个小工具 lazy-mock 内,这个工具的主要功能是启动一个 mock server 服务,包含curd功能,并且支持数据的持久化,文件变化的时候自动重启服务以最新的代码提供 api mock 服务。 代码生成器的功能就是根据配置的数据和模板,编译后将内容输出到指定的目录文件中。因为添加了新的文件,mock server 服务会自动重启。 还要支持模板的定制与开发,以及使用 CLI 安装模板。 可以开发前端项目的模板,直接将编译后的内容输出到前端项目的相关目录下,webpack 的热更新功能也会起作用。 模板引擎模板引擎使用的是 nunjucks。 lazy-mock 使用的构建工具是 gulp,使用 gulp-nodemon 实现 mock-server 服务的自动重启。所以这里使用 gulp-nunjucks-render 配合 gulp 的构建流程。 代码生成编写一个 gulp task : const rename = require('gulp-rename')const nunjucksRender = require('gulp-nunjucks-render')const codeGenerate = require('./templates/generate')const ServerFullPath = require('./package.json').ServerFullPath; //mock -server项目的绝对路径const FrontendFullPath = require('./package.json').FrontendFullPath; //前端项目的绝对路径const nunjucksRenderConfig = { path: 'templates/server', envOptions: { tags: { blockStart: '<%', blockEnd: '%>', variableStart: '<$', variableEnd: '$>', commentStart: '<#', commentEnd: '#>' }, }, ext: '.js', //以上是 nunjucks 的配置 ServerFullPath, FrontendFullPath}gulp.task('code', function () { require('events').EventEmitter.defaultMaxListeners = 0 return codeGenerate(gulp, nunjucksRender, rename, nunjucksRenderConfig)});代码具体结构细节可以打开 lazy-mock 进行参照为了支持模板的开发,以及更灵活的配置,我将代码生成的逻辑全都放在模板目录中。 ...

May 10, 2019 · 5 min · jiezi

json to graphql schema: json2graphql

json2graphqljson2graphql 是一个根据 json 生成 GraphQL Schema 的工具。可在 https://luojilab.github.io/js… 在线体验其功能。关于 GraphQLGraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。由于其强类型,返回结果可定制,自带聚合功能等特性,由 facebook 开源后,被 github 等各大厂广泛使用。核心概念:TypeFieldQuery/MutationArgumentsInputVariablesAliases更多请参考 https://graphql.cn/为什么选用 GraphQL相比 REST API, GraphQL 提供了更高的灵活性。接口调用方能够精确的定义其所需数据,并通知服务方只返回这部分数据,该功能是 REST API 无法提供的。GraphQL 能够使客户端只进行一次接口调用,即可获取多个 REST API 请求返回的数据。这种数据聚合的能力,正是我们所需要的。json protobuf 与 GraphQL由于 protobuf 和 GraphQL 都是强类型的,所以可以直接从 protobuf 的 schema 生成 GraphQL Schema,因而才能有自动聚合 grpc 服务生成 GraphQL 接口的框架 rejoiner。但同样的方法不适用于 json,因为标准的 json 并不包含 schema,单纯根据 json 文件无法确定知道每个字段的类型(因为有空值,以及嵌套的情况)。因而目前无法实现类似 rejoiner for json 这样的全自动框架。我们虽不能生成最终的 GraphQL Schema,但是基于对 json 的解析和一些约定,我们可以生成一个 GraphQL Schema 的草稿,生成 Schema 的绝大部分内容,并将有疑问的地方标记出来。json2graphql 就是一个用 golang 实现的 json 生成 schema 的工具。如果你不熟悉 golang,可以使用其在线版本 https://luojilab.github.io/js…在从 REST API 迁移到 GraphQL 的过程中,我们有很多接口会返回大量字段(几十个),如果完全手动编写这些 Schema,将是非常痛苦的,我们开发 json2graphql 的初衷就是解决这个问题,大大缩短开发时间。以下介绍该工具用法。Usagego run main.go -hNAME: inspect - generate a graphql schema based on jsonUSAGE: main [global options] command [command options] [arguments…]DESCRIPTION: inspect json and generate draft schema.graphqlCOMMANDS: inspect generate a graphql schema based on json help, h Shows a list of commands or help for one commandGLOBAL OPTIONS: –verbose, -v show logs –input value, -i value the json filename –output value, -o value the target filename to store generated schema –help, -h show helpExamplego run main.go -i example.jsonLive Demohttps://luojilab.github.io/js…TODO[x] build it as a web service that render schema on the fly like json.cn[ ] support to read from multi json files.[ ] get input from http request rather than local file.[ ] integrate with graphql server frameworks like gqlgen and auto generate resolver ...

February 2, 2019 · 1 min · jiezi