jadetang
V2EX  ›  Java

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

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

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

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


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

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

    有兴趣可以讨论讨论。
    jadetang
    jadetang
    OP
    Sep 9, 2015 via Android
    25
    @zonghua 你说的是 rapid frame work 吗?我之前的老大确实不喜欢写文档,所以我准备重新搞一个
    phx13ye
    phx13ye
    Sep 9, 2015
    26
    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
    ice2015
    Sep 9, 2015
    27
    你们的代码比英语还难
    thinkmore
    thinkmore
    Oct 21, 2015
    28
    mybatis/ibatis generator
    jadetang
    jadetang
    OP
    Oct 21, 2015
    29
    @thinkmore 话说找不到合适的,我自己造了一个轮子 http://v2ex.com/t/228379
    coolcooldee
    coolcooldee
    Sep 10, 2017
    30
    @jadetang 似乎可以满足你的需要: https://github.com/coolcooldee/sloth
    zdcin
    zdcin
    May 24, 2018
    31
    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   ·   Privacy   ·   Solana   ·   1358 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 47ms · UTC 19:39 · PVG 03:39 · LAX 11:39 · JFK 14:39
    ♥ Do have faith in what you're doing.