写了一个代码生成器 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jadetang
V2EX    Java

写了一个代码生成器

  •  
  •   jadetang 2015 年 10 月 15 日 5876 次点击
    这是一个创建于 3845 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目中很多基本代码都是对一个表进行增删改查的,写了个代码生成器,根据建表语句,和写好的模板生产基本的代码,和 maven 的 archetype 差不多,当然比那个功能多一点。

    https://github.com/jadetang/maliang

    我是来求 star 的。 ~(@^_^@)~

    32 条回复    2015-10-19 15:05:59 +08:00
    adexbn
        1
    adexbn  
       2015 年 10 月 15 日 via iPhone
    以前也这么搞过,后来觉得很多 IDE 和框架都可以做这个,就没再继续
    JiaFeiX
        2
    JiaFeiX  
       2015 年 10 月 15 日
    赞同,希望未来编程可以更加自动化!
    FrankFang128
        3
    FrankFang128  
       2015 年 10 月 15 日
    Rails
    jadetang
        4
    jadetang  
    OP
       2015 年 10 月 15 日
    @adexbn 有个 rapid-framework ,我之前的老大弄的,不过估计他不维护了
    jadetang
        5
    jadetang  
    OP
       2015 年 10 月 16 日
    @FrankFang128 ror 确实很叼,可惜没有机会用。但是 java 好像就没有这种东西。
    a358003542
        6
    a358003542  
       2015 年 10 月 16 日
    不要考虑生成代码,考虑生成数据。
    north521
        7
    north521  
       2015 年 10 月 16 日
    mark
    sefemp
        8
    sefemp  
       2015 年 10 月 16 日
    Maliang(马良), the name of this project comes from a character of folk tail in China who has a magical brush by which he can draw any thing and turn it to real thing.

    这是英语是楼主自己写的吗?
    是的话,你的英语功底比代码功底强
    ijse
        9
    ijse  
       2015 年 10 月 16 日
    感觉思路不对,应该修改框架以不需要这样重复生成代码才对啊。。。

    代码越多,维护成本可能越大
    langzizx39
        10
    langzizx39  
       2015 年 10 月 16 日
    @jadetang spring-roo ?听说能简单实现像 ror 那样,不过没实际用过。
    jadetang
        11
    jadetang  
    OP
       2015 年 10 月 16 日
    @ijse 这个项目的目的是刚刚开始项目的时候,根据你的表结构生成一些基本的代码,例如 model , dao , service , controller 。并且根据公司常用的项目框架生成代码结构和目录。你不同的表,对应的 model 肯定不一样吧,这不存在重复代码的问题啊。在 example 里面有个 demo ,你可以试一下就知道是干什么的了。
    jadetang
        12
    jadetang  
    OP
       2015 年 10 月 16 日
    @a358003542 如果你拿到表结构,肯定是可以生成 insert 语句造数据的,但是数据一般都是和业务逻辑相关的,这样的话,没有办法生成有用的数据。
    ijse
        13
    ijse  
       2015 年 10 月 16 日
    @jadetang 我之前做 java 的时候也用过这种生成器,自动生成一些 model 等代码。 我只是觉得这种重复的劳动应该由框架去解决。
    jadetang
        14
    jadetang  
    OP
       2015 年 10 月 16 日
    @sefemp 你这是夸我还是贬我。
    jadetang
        15
    jadetang  
    OP
       2015 年 10 月 16 日
    @langzizx39 看了一些,那个比我写的强多了,数据实体可以指定 one-to-many ,如果早知道那个我就不写自己的拉。不过不知道能不能指定自己的模板,因为其实每个公司都不一样的,比如我们公司一直用 spirng3.0.5 。但是 spring-roo 自带的模板,肯定是 4.0 以上的版本。
    jadetang
        16
    jadetang  
    OP
       2015 年 10 月 16 日
    @ijse 不知道你说的框架是什么?
    ooTwToo
        17
    ooTwToo  
       2015 年 10 月 16 日
    要是能根据数据库存在的表生成就更好了,就像 Mybatis 的 generator 插件一样.
    jadetang
        18
    jadetang  
    OP
       2015 年 10 月 16 日
    @ooTwToo 其实是可以做到的,你填个数据库连接,然从数据库把表的表结构给读出来,我其实在公司搭了一个网页,让他们自己输入表结构。
    ooTwToo
        19
    ooTwToo  
       2015 年 10 月 16 日
    @jadetang 0.0 great!
    cyberdak
        20
    cyberdak  
       2015 年 10 月 16 日
    代码生成器就是每个码农都会经历的一个轮子
    CRUD 工作太多的话,基本都会想着写一个代码生成器
    jc4myself
        21
    jc4myself  
       2015 年 10 月 16 日 via iPhone
    eclipse 有反向工具,可选择生成哪些 schema ,支持 schema 重命名; mybatis 的 mybatis-generator ,可配置生成 schema ,文件生成路径,数据类型映射,再在这基础上开发下就更好用了;这种工具去扫系统自带的表获取表名列名更好,不用 ddl ;既然是 java 希望提供可运行 java 就完美了
    jadetang
        22
    jadetang  
    OP
       2015 年 10 月 16 日
    @jc4myself mybatis-generator 没用过,但是我之前公司的数据库访问层都是 jdbc 的,所以用不上。
    slixurd
        23
    slixurd  
       2015 年 10 月 16 日
    然而我选择了不用写简单 CRUD 的 Spring-data 。
    复杂 SQL 再用注解形式写上去就好了。
    不过还是需要自己写 Bean 。
    jadetang
        24
    jadetang  
    OP
       2015 年 10 月 16 日
    @slixurd 关键是我们公司都不用新的东西,%>_<%
    a358003542
        25
    a358003542  
       2015 年 10 月 16 日
    我还是那句话,不要考虑生成代码,生成数据。 字符串的组合和 parse 等你真正学会了,再来谈论代码生成和自造编程语言的事啊。不要好高骛远、
    Iteye
        26
    Iteye  
       2015 年 10 月 18 日
    已经 pull 下来了 请楼主把 todo 里的任务写的清楚点 我没事的时候玩玩
    jadetang
        27
    jadetang  
    OP
       2015 年 10 月 19 日
    update 了。不过我其实想不到有什么能改进的了,不是因为这个东西好。是因为
    1. 很简单。
    2. 现在没什么人用,自然没有需求。

    我写的这个东西,其实是标准 MVC 的结构,其中的 V 就是指的模板, M 指的是从建表语句拿到数据信息, C 很简单,就是做一些复制目录,和调用 velocity api 生成文件的操作。

    这么说来,其实最繁琐,但是价值最大的也就是 V ,即更加符合平时开发需要的模板,不过这样的模板每个公司都不一样,并没有什么太多能做的事情。
    jadetang
        28
    jadetang  
    OP
       2015 年 10 月 19 日
    @Iteye update 了,看看我上一条回复。
    kzzhr
        29
    kzzhr  
       2015 年 10 月 19 日 via iPhone
    画出 uml ,然后自动生成模型,基本方法集,建好数据库。。等楼主试试
    jadetang
        30
    jadetang  
    OP
       2015 年 10 月 19 日
    @kzzhr 我从来没有碰到过用 uml 的公司。
    jc4myself
        31
    jc4myself  
       2015 年 10 月 19 日
    @jadetang mybatis-generator 只是一个工具而已嘛,也可以用来生成 bean 的,还可以配置包路径。挺好用的
    jadetang
        32
    jadetang  
    OP
       2015 年 10 月 19 日
    @jc4myself 我这个也可以,还不用连数据库。关键是,你有不同的模板,可以生成任意的文本文件的。试用一下吧。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2838 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 59ms UTC 09:14 PVG 17:14 LAX 02:14 JFK 05:14
    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