有没有好的能够从建表语句生成代码的脚手架工具? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jadetang
V2EX    Java

有没有好的能够从建表语句生成代码的脚手架工具?

  •  
  •   jadetang 2015-09-08 18:15:57 +08:00 5162 次点击
    这是一个创建于 3691 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如果,本人搞 java ,请教有没有这样的工具。

    第 1 条附言    2015-09-08 23:29:30 +08:00
    之前我们技术的老大维护了一个框架叫做 rapid-framework ,就是用来干这个的。不过项目没文档,我决定重新造个轮子。
    其实这种事情很简单的,用一个 parser 解析一下建表语句例如
    create table user (
    name varchr ,
    age int
    )
    然后用 velocity 生成一个 user.java 文件

    class user{
    private String name ;
    private int age
    }

    然后再是对应的增删改查的 dao 和 service ,这些当然只能生成基本的,具体的业务逻辑还是要手写啊。
    31 条回复    2018-05-24 16:04:21 +08:00
    justlikemaki
        1
    justlikemaki  
       2015-09-08 18:30:22 +08:00
    eclipse 加 hibernate 就可以反向映射
    jadetang
        2
    jadetang  
    OP
       2015-09-08 19:04:50 +08:00
    @justlikemaki 我是想生成 service , dao 啊之类的代码
    denger
        3
    denger  
       2015-09-08 19:07:38 +08:00
    生成的代码大多数不仅没用,还增加维护成本,个人极其反对代码自动生成。
    无非就是想解决大量代码重复不想写的问题呗?但是生成代码方式是最差的解决方案。完全可以从设计角度去解决。
    ichou
        4
    ichou  
       2015-09-08 19:21:17 +08:00
    大 rails 欢迎你
    zts1993
        5
    zts1993  
       2015-09-08 19:23:30 +08:00
    @jadetang 也可以啊。。。
    neoblackcap
        6
    neoblackcap  
       2015-09-08 19:32:57 +08:00
    @denger 要维护的应该是 code generator 而不是生成的代码,难道你还要手写 bytecode?
    wdlth
        7
    wdlth  
       2015-09-08 19:37:39 +08:00
    数据库生成 Model ?
    guoqiao
        8
    guoqiao  
       2015-09-08 19:56:07 +08:00 via iPhone
    django: python manager.py inspectdb
    jadetang
        9
    jadetang  
    OP
       2015-09-08 20:52:02 +08:00
    @ichou 应该就是 ror 那种方式吧。有一个表的创建 sql ,然后自动生成增删改查的 service , dao , model 之类的 java 类。
    denger
        10
    denger  
       2015-09-08 21:31:25 +08:00
    @neoblackcap 你的意思是生成基础的 CURD 之后,如果某个 Service 业务有调整,应该去修改代码生成器然后重新生成一下,而不是去修改具体的某个业务代码???开玩笑吧?
    denger
        11
    denger  
       2015-09-08 21:38:49 +08:00
    @jadetang spring-roo 可以满足你的需求 http://projects.spring.io/spring-roo/
    neoblackcap
        12
    neoblackcap  
       2015-09-08 21:42:45 +08:00
    @denger 有点那个意思,但是又不全是。若是业务没有变得话,同样的业务需要产生同样的代码,若是变了,这些代码自然也会变。不管你手动改还是机器生成也是一样对不对?

    为什么很多人排斥自动化生成的代码?主要是那些 generator 写得太烂了,就好比你的业务变更了,你也不会直接改 bytecode ,而是改源代码一样。
    自动化生成的代码没有错,错是那些生成器太烂了,明明若是只生成基础部分代码还是很靠谱的,偏偏要求全。还有就是若是你的代码耦合度太高了,但是 Java 不是一般会用 Data Mapping 的模式吗? DAO 不是用来解耦的?
    还有就是哪怕上了代码生成器也没关系啊,那只不过是实现了一门 DSL 而已。维护的只不过变成了更高级的语言以及 DSL (这个若是写得好,自然不用维护)
    qingxp9
        13
    qingxp9  
       2015-09-08 21:57:47 +08:00
    一看这标题就想到 rails generate scaffold
    OpooPages
        14
    OpooPages  
       2015-09-08 22:13:51 +08:00 via Android
    dao 可以生成,但 service 层通常是写业务逻辑的地方,是一个系统最需要手工编码的层,似乎自动生成比较不妥吧,除非你的业务逻辑就是跟着数据表结构走的。
    denger
        15
    denger  
       2015-09-08 22:17:14 +08:00
    @neoblackcap code converter (java->bytecode, php->c++ ) 和 code generator 本身就是不是一个概念的上东西。
    neoblackcap
        16
    neoblackcap  
       2015-09-08 22:26:41 +08:00
    @denger 然而楼主不是问 SQL->Java 的工具么?这真的不是 DSL 吗?
    denger
        17
    denger  
       2015-09-08 22:33:27 +08:00
    SQL -> JAVA 怎么可能是 DSL , 一个最基础的存储,离业务逻辑距离本身非常远,即使要 DSL ,也不应该是从 SQL 的层面做,而是从具体领域或业务层面,而不用管在乎用的是什么存储。

    楼主要的只是一个脚手架的生成器,这些都扯远了....
    zonghua
        18
    zonghua  
       2015-09-08 22:34:05 +08:00 via iPhone
    hibernate tools 吖,就是生成 jpa 映射,然后在看情况修改。难道真的要手动写几十个表的映射?一个属性名拼错了就够玩的了。
    jadetang
        19
    jadetang  
    OP
       2015-09-08 23:29:46 +08:00
    @zonghua 差不多这意思。
    zonghua
        20
    zonghua  
       2015-09-08 23:39:28 +08:00
    @jadetang java 项目的配置文件看得我都要疯了,看了很多次,结果还是各种异常。
    jadetang
        21
    jadetang  
    OP
       2015-09-08 23:46:03 +08:00
    @zonghua 这个和主题没关系吧
    zonghua
        22
    zonghua  
       2015-09-09 00:17:18 +08:00
    @jadetang 框架官网的向导太简单了, api 又根本看不懂。
    incompatible
        23
    incompatible  
       2015-09-09 02:11:18 +08:00
    @denger 就是 DSL 这里的 D 指的不是楼主的代码的业务领域,这里的 D 指的是生成代码这件事


    @jadetang 下面这两篇文章我觉得对你有一些参考价值
    http://shenfeng.me/intro-api-kit.html
    http://shenfeng.me/java-jdbc-generate-boilerplate.html
    hzlez
        24
    hzlez  
       2015-09-09 09:32:21 +08:00
    有!
    用过 lombok 的话,应该知道, java 可以有一个 annotationProcessor 的东西在编译期做事情。
    你的目的,可以通过编辑期根据数据库结构来自动生成对应的 dao , entity 来实现。
    需要考虑的问题就是: 如何支持业务的自定义需求。如何集成默认生成的代码和你自己需要手动添加的代码等。

    我自己做过一个工具,没有走这么远,只是根据一些默认规则的 mapper 命名来生成对应的 sql 资源文件。

    有兴趣可以讨论讨论。
    jadetang
        25
    jadetang  
    OP
       2015-09-09 10:27:42 +08:00 via Android
    @zonghua 你说的是 rapid frame work 吗?我之前的老大确实不喜欢写文档,所以我准备重新搞一个
    phx13ye
        26
    phx13ye  
       2015-09-09 10:53:13 +08:00
    mybatis generator
    ```
    @Data
    public class User {
    /**
    * This field was generated by MyBatis Generator.
    * This field corresponds to the database column users.id
    *
    * @mbggenerated
    */
    private Integer id;

    /**
    * This field was generated by MyBatis Generator.
    * This field corresponds to the database column users.name
    *
    * @mbggenerated
    */
    private String name;
    }
    ```
    ice2015
        27
    ice2015  
       2015-09-09 15:19:17 +08:00
    你们的代码比英语还难
    thinkmore
        28
    thinkmore  
       2015-10-21 10:22:26 +08:00
    mybatis/ibatis generator
    jadetang
        29
    jadetang  
    OP
       2015-10-21 10:29:47 +08:00
    @thinkmore 话说找不到合适的,我自己造了一个轮子 http://v2ex.com/t/228379
    coolcooldee
        30
    coolcooldee  
       2017-09-10 23:23:58 +08:00
    @jadetang 似乎可以满足你的需要: https://github.com/coolcooldee/sloth
    zdcin
        31
    zdcin  
       2018-05-24 16:04:21 +08:00
    listcode 代码生成云服务,只需要提供数据库模型,前后端代码一站生成,支持 laravel,thinkphp,java,python,nodejs,vue 等框架, 完成度高,翻页,多条件查询,外键编辑,输入检查都有了


    高完成度的代码生成服务
    前后端代码、js、UI 一站生成
    翻页,多条件联合查询
    外键关联编辑、展示
    输入验证,错误提示
    常见类型个性化编辑、展示
    完整 REST API 接口
    多种开发技术支持
    支持常用语言和技术框架,支持前后端分离,也可使用原生前端技术

    Javascript:nodeJs, Vue2, Jquery
    Java Spring-mvc, Jpa, Mybatis
    Php ThinkPhp5, Laravel
    Python Flask, Tornado
    所见即所得的在线运行系统
    可以在线运行您的系统,直接预览生成效果,避免重复搭建环境、本地启动等繁琐流程,快速调整设计与参数设置,节约宝贵时间。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     901 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 21:51 PVG 05:51 LAX 14:51 JFK 17:51
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86