V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
jadetang
V2EX  ›  Java

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

  •  
  •   jadetang · Sep 8, 2015 · 5553 views
    This topic created in 3889 days ago, the information mentioned may be changed or developed.

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

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

    class user{
    private String name ;
    private int age
    }

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

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

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


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

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

    有兴趣可以讨论讨论。
    jadetang
        25
    jadetang  
    OP
       Sep 9, 2015 via Android
    @zonghua 你说的是 rapid frame work 吗?我之前的老大确实不喜欢写文档,所以我准备重新搞一个
    phx13ye
        26
    phx13ye  
       Sep 9, 2015
    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  
       Sep 9, 2015
    你们的代码比英语还难
    thinkmore
        28
    thinkmore  
       Oct 21, 2015
    mybatis/ibatis generator
    jadetang
        29
    jadetang  
    OP
       Oct 21, 2015
    @thinkmore 话说找不到合适的,我自己造了一个轮子 http://v2ex.com/t/228379
    coolcooldee
        30
    coolcooldee  
       Sep 10, 2017
    @jadetang 似乎可以满足你的需要: https://github.com/coolcooldee/sloth
    zdcin
        31
    zdcin  
       May 24, 2018
    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
    所见即所得的在线运行系统
    可以在线运行您的系统,直接预览生成效果,避免重复搭建环境、本地启动等繁琐流程,快速调整设计与参数设置,节约宝贵时间。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1508 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 72ms · UTC 16:22 · PVG 00:22 · LAX 09:22 · JFK 12:22
    ♥ Do have faith in what you're doing.