代码生成(1) : 根据接口文档生成实体类属性

ExcelUtil.java : https://blog.csdn.net/Lxinccode/article/details/97279040

说明 : xls文件第一行可以不需要,字段名、字段类型、字段含义和字段说明位置可以配置

创建xls文件,内容如下

字段名字段类型长度字段含义字段说明必选
nameString10姓名人的姓名必须
ageInteger2年龄人的年龄必须

生成的代码如下

@ApiModelProperty("字段含义,说明:字段说明")
private null 字段名;

@ApiModelProperty("姓名,说明:人的姓名")
private String name;

@ApiModelProperty("年龄,说明:人的年龄")
private Integer age;

工具代码如下 


import cn.nordrassil.util.ExcelUtil;
import cn.nordrassil.util.StringUtil;

import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

/**
 * @Date: 2020/9/16 15:08
 * @Description: 根据文档生成实体类
 */
public class GenerateAttributeServer {

    private final static Map<String, String> map = new HashMap<String, String>() {{
        put("JSONString", "String");
        put("String", "String");
        put("VarChar2", "String");
        put("Varchar2", "String");
        put("varchar", "String");
        put("int", "Integer");
        put("Int", "Integer");
        put("Integer", "Integer");
        put("Double", "Double");
        put("Long", "Long");
    }};

    private final static Integer ZI_DUAN_MING = 0;
    private final static Integer ZI_DUAN_LEI_XING = 1;
    private final static Integer ZI_DUAN_HAN_YI = 3;
    private final static Integer ZI_DUAN_SHUO_MING = 4;

    public static void main(String[] args) {
        test1();
    }

    private static void test1() {
        List<String> obj = new LinkedList<>();
        List<List<String>> lists = ExcelUtil.readXls("/Users/leyili/Desktop/test1.xls");
        StringBuilder stringBuilder = new StringBuilder();
        for (List<String> list : lists) {
            if (list.size() == 0)
                break;
            int i = 0;
            for (String l : list) {
                if (l.equals(""))
                    i++;
            }
            if (i == list.size())
                continue;
            String descrbe = list.get(ZI_DUAN_HAN_YI);
            if (list.size() > ZI_DUAN_SHUO_MING && !list.get(ZI_DUAN_SHUO_MING).equals("")){
                descrbe += ",说明:"+list.get(ZI_DUAN_SHUO_MING);
            }
            descrbe = descrbe.replaceAll("\"", "");
            descrbe = descrbe.replaceAll("\n",",");
            stringBuilder.append("@ApiModelProperty(\"" + descrbe + "\")\n");
            stringBuilder.append("private ");
            if (list.get(ZI_DUAN_LEI_XING).indexOf("JSONString_") != -1) {
                String type = list.get(ZI_DUAN_LEI_XING).split("_")[1];
                switch (type) {
                    case "S":
                        stringBuilder.append("String");
                        break;
                    case "I":
                        stringBuilder.append("Integer");
                        break;
                    case "LI":
                        stringBuilder.append("List<Integer>");
                        break;
                    case "LLI":
                        stringBuilder.append("List<List<Integer>>");
                        break;
                    default:
                        break;
                }
            } else if (list.get(ZI_DUAN_LEI_XING).equals("JsonArray")) {
                String o = StringUtil.oneToUp(list.get(ZI_DUAN_MING));
                stringBuilder.append("List<"+o+"> ");
                obj.add(o);
            } else if (list.get(ZI_DUAN_LEI_XING).equals("JSONObject") || list.get(ZI_DUAN_LEI_XING).equals("Json") || list.get(ZI_DUAN_LEI_XING).equals("JsonObject")) {
                String o =oneToUp(list.get(ZI_DUAN_MING));
                stringBuilder.append(o);
                obj.add(o);
            } else if (list.get(ZI_DUAN_LEI_XING).indexOf("JSONString_") != -1) {
                String type = list.get(ZI_DUAN_LEI_XING).split("_")[1];
                switch (type) {
                    case "LS":
                        stringBuilder.append("List<String>");
                        break;
                    case "LI":
                        stringBuilder.append("List<Integer>");
                    default:
                        break;
                }
            } else {
                stringBuilder.append(map.get(list.get(ZI_DUAN_LEI_XING)));
            }
            stringBuilder.append(" ").append(list.get(ZI_DUAN_MING)).append(";\n\n");
        }
        if (obj.size() >0){
            for (String s : obj) {
                stringBuilder.append("@Setter\n").append("@Getter\npublic static class ").append(s).append("{\n");
                stringBuilder.append("\n}\n");
            }
        }
        System.err.println(stringBuilder);
    }


    /**
     * 首字母转大写
     * @param str
     * @return
     */
    public static String oneToUp(String str){
        return str.substring(0,1).toUpperCase()+str.substring(1);
    }

}

@ApiModelProperty 是 swagger,maven坐标如下

<springfox-swagger.version>2.9.2</springfox-swagger.version>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>${springfox-swagger.version}</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>${springfox-swagger.version}</version>
            <exclusions>
                <exclusion>
                    <artifactId>mapstruct</artifactId>
                    <groupId>org.mapstruct</groupId>
                </exclusion>
            </exclusions>
        </dependency>

END。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
软件简介: DbToCode 是一款为 C# 数据库程序员设计的自动代码生成器,DbToCode 生成的代码基于基于面向对象的思想和三层架构设计,结合了Petshop中经典的思想和设计模式,融入了工厂模式,反射机制等等一些思想。采用 Model + DAL + BLL + Web 的设计,主要实现在 C# 中对应数据库中表的基类代码的自动生成,包括生成属性、添加、修改、删除、查询、存在性、 Model 类构造等基础代码片断,使程序员可以节省大量机械录入的时间和重复劳动,而将精力集中于核心业务逻辑的开发。 DbToCode 同时提供方便的数据库查询管理,SQL脚本生成,存储过程生成,数据库文档生成,Web项目文件发布,代码生成自动导出文件等多项开发工作中常用到的功能,您可以很方便地进行项目开发。 详细功能说明: 1.自动代码生成。 可以生成三层架构的代码。如果采用类似petshop架构模式的架构,则代码生成效率很高。 它可以生成:实体Model,DAL(数据访问层),IDAL(接口层),DALFactory(类工厂),BLL(业务逻辑层),WEB层等多层的代码,可以节省大量的时间来做业务逻辑的代码,那些重复的代码就交给它去做吧,1分钟生成一个架构所有的基本代码。我感觉有了它开发项目的效率简直好轻松。 (1)自动生成属性注释. (2)可以自由设定命名空间和实体类名。 (3)免费提供数据库访问,页面数据校验等等基础类库及封装类库源码。自己可以对其进行修改保存满足自己的需要。 (4)支持不同类型数据层的生成: 基于SQL语句,基于参数,基于存储过程。 (5)支持选择不同架构代码生成:简单基本三层结构;基于工厂模式+反射机制+缓存机制的复合结构;自定义结构模版。 (6)可以生成增加,显示等页面主体Html代码,和后台.cs处理代码。 (7)支持对多种类型数据库生成代码:如SQLServer2000,SQLServer2005,Oracle,OleDb等。 2.数据库管理器。 类似SQLServer2000的管理界面,方便平常在代码编辑的时候想查看数据库的信息,并且可以很直观的查看字段类型,长度,主键,默认值等详细信息,省去了在代码和数据库管理器之间的来回切换,方便快捷。 (1)支持多种类型数据库。如SQLServer2000,SQLServer2005,Oracle,OleDb等。 (2)创建表脚本和存储过程及数据脚本,支持执行。 (3)导出表脚本和存储过程文件。 (4)表的重命名,删除操作。 3.查询分析器。 实现类似于SQLServer的查询分析器的功能,方便编写代码时想进行数查询。 (1)实现执行选中部分SQL语句。 (2)实现关键字高亮。 (3)支持F5快捷键执行语句。 (4)实现打开现有脚本,保存当前脚本功能。 (5)实现错误检测提示功能。 4. 自动生成存储过程和SQL脚本。 可以根据选定的数据库和表(可多选),生成表的创建脚本,以及表数据的插入脚本,同时可以生成表的增,删,改,查等操作的存储过程脚本。支持在当前生成和导出脚本文件功能. 5. 自动生成数据库结构文档。 可以根据选定的数据库和表(可批量生成),可以生成字段的详细信息,包括默认值,描述等信息.生成相应的表结构文档,免去手工写文档和操作的麻烦。 6. Web项目文件发布。 有时候我们需要根据自己的要求,导出项目文件,VS.NET自带的复制项目功能,对一些图片或js 文件等等其他一些文件,不能自动导出,除非把这些都添加到项目里。所以,有了这个功能,对项目发布非常的方便,并且支持自己定义哪些发布哪些不发布。 7. 代码生成自动导出功能。 代码生成器可以选定一个表来生成代码,然后粘贴到项目里。但如果表很多,来回这么操作太麻烦,所以,这个功能可以按三层架构,自动建立文件夹,并自动生成所选的所有表的.cs代码文件,只需要添加到项目里就可以了。 8.其他功能: (1) C#ToVB.NET代码换器. (2) 实现了热键呼出。可以自己设定热键.当你点窗口的[X]关闭程序时,程序会自动隐藏运行在任务栏,通过热键可以快速呼出窗口。
由《Ext JS源码分析与开发实例宝典》作者:彭仁夔团队开发而成 90%以上代码可以生成验证、生成三层代码、生成完善的权限系统、生成数据库等功能 功能之强大用了就知道! 两年前,我负责指导Java方向实训,在最后评审准备过程,.Net组负责人要求Java和.Net的归结一起统一评审,Java指导老师们的第一反应是Java和.Net开始怎么能相提并论? 为什么不能并论?是因为Java开发阳春白雪?在我们的潜意识中,Java开发就是让程序员(学生)一行一行地编写代码,编写HTML、CSS等,而.Net开发只要把控件拖到页面上即可,Java开发的效率一定比.Net低很多很多。 那么能不能提高Java的开发效率呢?作者经过分析并总结思考,发现业务系统有一定的共性所有操作,即增删改查,既然有共性,那么能不能抽象出来? 可以思考一下,通过继承、组件化等重用设计方式是可以抽象代码的共性,但是不同表(实体)增删改查的内容是不同的,通过泛型也很难抽象出来的。如对于A表的查询和对于B表的查询都需要使用到SQL语句,怎么去剥离出来? 此时,我们就需要采用另外一种方式,把它们抽象出来更高层级的模板,然后把不同数据传入该模板的占位符,这样就变成不同的代码,这种方式就是代码生成技术。 在软件的设计过程中,代码生成及重用设计仿若陌路人,互相排斥。重用设计中很多的共性是不能抽象出来的,而一味追求生成,造成大量的雷同代码,是重用设计人员或真正开发人员最不能容忍的事件。 如果把它们两个结合起来,那就是完全不同的效果,首先通过重用设计抽象其能抽象的代码,其不能抽象的共性通过生成技术生成,开发效率就会成倍增加。以前我们都是在X或y轴上分别进行,其最大的点也不过是线,如果两者结合起来,其变成一个平面,把我们的重用从点提高到面。如下图所示: 面。如下图所示, Y重用 现在的软件开发不再仅仅是编写代码,重用等,而是需求调研、架构设计、数据库、编码开发、测试部署等过程的有机组合,组合的好与坏,其结果相差万里,这就是著名的米格-25效应。 在开发过程怎么去把这些最大效应化呢?回想一下我们的开发流程: 需求开发,形成文档 采用powerDesigner等进行实体及实体关系的设计 通过Pdm创建数据库 在开发工具中创建搭建项目 通过相关的工具(hibernate tools,myeclipse)生成实体 设计及编写Dao 设计及编写Service 设计及编写Action及相关页面 这样的线性流程有着极大的问题,首先架构师或数据库专家不是圣人,设计数据库,Dao,Service接口之后,就不需要修改,在编码过程中,会进行大量的修改,特别是那种那只懂数据库的专家在设计之后,开发人员怨声载道。另外设计的dao,service接口及实现很多都用不着,用得着的根本就没有设计。因为需要的dao,service很多都是由页面根据取数操作的不同而进行不同的编写。 开发过程的修改,就会带来原前置流程步骤的修改,所以软件开发完成之后,不会有很多公司其PDM与数据库、实体是一一对应的。而有一些是必须要修改,如在实体中修改属性,一定要到数据库中修改,到dao,service,action,page一一进行修改,如果修改的是外键属性,修改的代码更为复杂。开发人员最痛苦的事情就无穷无尽的修改,领导简单的一句话:不就修改一个属性吗?你可能就要改一个下午。 能不能有这样的方法呢?修改一处其它处跟着改,这时就需要把原来的线性流程乾变换,改成为无前置的试,即卫星城的方式,中心城就是模型,可以称为Domain、域、实体,在实体的基础是加上一些设计,如下图所示: 现在只要中间模型发生变化,其变化会通过其背后的关系推向卫星城,让其发生相对应的变化,就像蝴蝶效应一样。 此时,我们可以站在一个更高的层面去思考开发,开发不仅仅是代码,开发不仅仅是处理代码之间关系,还需要处理与数据存储的关系,与测试部署关系等。 这些关系我们需不需要去体现出来,肯定需要。我们可以把这些关系看作是软件中区别于业务逻辑属性的特殊属性,这种属性主要包括: 与数据存储之间的关系 代码结构组织的方面(如采用三层) 与设计及设计文档的关系 与开发模型(如瀑布)的关系 与需求及需求变更的关系 与测试部署之间的关系 除了这些特殊关系,代码中还有实体之间的关系,业务关系等。 我们可以发现软件不单纯是一个对象,而且是一组关系。它们相互关联,相互牵制。 续而推之,我们编写的类也是关系,是处理一类事物的抽象关系。泛型是处理类的抽象关系。所有东西都是关系体。 那么能不能在现有的面向对象的理论上推进一步呢?世界不是一个个单独的对象,而是不同的对象相互发生关系的有机结构体(可以称为关系体),只有这样,世界才多姿多彩。就算是一个个对象,它也不是静止的,它的内部也是由不同分子原子发生作用的结果,可以讲对象也是一个关系体。 软件是用来对世界进行描述的一种方式,最初我们采用过程的编程,后来与世界的描述不相符,所以就出现了面向对象,而现在面向对象并不能很好地解析如抽象类,Service类等。要解释这些东西,最好的方式是通过关系来表达。也就是面向对象的编程方式可以更进一步地改进为面向关系编程方式。 面向关系编程需要首先需要找到软件模型与需求、架构,数据,测试,部署之间的变化关系。这些关系有业务层面的,也有开发层面的。这种关系可以抽离出来,形成模板。 接下来把业务模型+关系模板通过工具生产出来,就成为一个有血有肉的软件。Mgicode(码奇)生成器就从这里出发,帮我们抽象软件背后的关系,提高开发效率。 所以通过Mgicode生成器,你可以获得如下好处: 根据设计(pdm,数据库等)快速生成可运行的项目。 修改实体之后,会帮助你找到所有需要修改的东西,并且给出最佳的修改方案。 统一代码编程风格(如同一项目中选择几种不同日历控制) 把自己的项目模板化(关系化),方便之后使用 把模板化的项目放到Mgicode市场获得一些外快。
.Net代码生成器是一款为C#数据库程序员设计的自动代码生成器,生成的代码基于面向对象的思想和三层架构设计,结合了Petshop中经典的思想和设计模式,融入了工厂模式,反射机制等等一些思想。采用Model+ DAL +BLL+Web 的设计,主要实现在对应数据库中表的基类代码的自动生成,包括生成属性、添加、修改、删除、查询、存在性、Model 类构造等基础代码片断,支持不同3种架构代码生成,使程序员可以节省大量机械录入的时间和重复劳动,而将精力集中于核心业务逻辑的开发。<br><br>  同时提供方便的多类型数据库管理,查询分析器,SQL脚本生成,存储过程生成,数据库文档生成,Web项目发布,代码批量自动输出等多项开发工作中常用到的功能,您可以很方便轻松地进行项目开发。<br><br>  须安装Microsoft .NET Framework 2.0 才能正常运行<br><br>  详细功能说明<br><br>  1.自动生成代码<br><br>  可以生成3种不同架构的代码。可以自定义生成的字段,项目架构,代码类型,方法。<br><br>  它可以生成:实体Model,DAL(数据访问层),IDAL(接口层),DALFactory(类工厂),BLL(业务逻辑层),WEB层等多层的代码,可以节省大量的时间来做业务逻辑的代码,那些重复的代码就交给它去做吧,1分钟生成一个架构所有的基本代码。我感觉有了它开发项目的效率简直轻松多了。<br><br>  2. 多类型数据库集中管理器<br><br>  类似SQLServer2005的管理界面,支持SQL Server,Oracle,OleDb三种类型的数据库,方便平常在代码编辑的时候想查看数据库的信息,并且可以很直观的查看字段类型,长度,主键,默认值等详细信息,省去了在代码和数据库管理器之间的来回切换,方便快捷。<br><br>  3. 查询分析器 。 实现类似于SQLServer的查询分析器的功能,方便编写代码时想进行数查询。<br><br>  4. 自动生成存储过程和SQL脚本 。可以生成存储过程,查询语句,数据插入脚本,对象定义脚本等。<br><br>  5. 自动生成数据库结构的文档。<br><br>  6. Web项目文件发布。<br><br>  7. 代码批量生成自动导出功能。<br><br>  8. 其他 : C#ToVB.NET代码换器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值