V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jadetang
V2EX  ›  Java

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

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

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

    第 1 条附言  ·  2015-09-08 23:29:30 +08:00
    之前我们技术的老大维护了一个框架叫做 rapid-framework ,就是用来干这个的。不过项目没文档,我决定重新造个轮子。
    其实这种事情很简单的,用一个 parser 解析一下建表语句例如
    create table user (
    name varchar ,
    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   ·   实用小工具   ·   1111 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 23:43 · PVG 07:43 · LAX 15:43 · JFK 18:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.