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

写了一个代码生成器

  •  
  •   jadetang · 2015-10-15 21:53:06 +08:00 · 4995 次点击
    这是一个创建于 3113 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    https://github.com/jadetang/maliang

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

    32 条回复    2015-10-19 15:05:59 +08:00
    adexbn
        1
    adexbn  
       2015-10-15 22:36:31 +08:00 via iPhone
    以前也这么搞过,后来觉得很多 IDE 和框架都可以做这个,就没再继续
    JiaFeiX
        2
    JiaFeiX  
       2015-10-15 23:32:23 +08:00
    赞同,希望未来编程可以更加自动化!
    FrankFang128
        3
    FrankFang128  
       2015-10-15 23:42:59 +08:00
    Rails
    jadetang
        4
    jadetang  
    OP
       2015-10-15 23:59:09 +08:00
    @adexbn 有个 rapid-framework ,我之前的老大弄的,不过估计他不维护了
    jadetang
        5
    jadetang  
    OP
       2015-10-16 00:00:24 +08:00
    @FrankFang128 ror 确实很叼,可惜没有机会用。但是 java 好像就没有这种东西。
    a358003542
        6
    a358003542  
       2015-10-16 02:59:34 +08:00
    不要考虑生成代码,考虑生成数据。
    li24361
        7
    li24361  
       2015-10-16 08:36:03 +08:00
    mark
    sefemp
        8
    sefemp  
       2015-10-16 09:12:53 +08:00
    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 09:26:56 +08:00
    感觉思路不对,应该修改框架以不需要这样重复生成代码才对啊。。。

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

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

    这么说来,其实最繁琐,但是价值最大的也就是 V ,即更加符合平时开发需要的模板,不过这样的模板每个公司都不一样,并没有什么太多能做的事情。
    jadetang
        28
    jadetang  
    OP
       2015-10-19 00:07:13 +08:00
    @Iteye update 了,看看我上一条回复。
    kzzhr
        29
    kzzhr  
       2015-10-19 00:53:04 +08:00 via iPhone
    画出 uml ,然后自动生成模型,基本方法集,建好数据库。。等楼主试试
    jadetang
        30
    jadetang  
    OP
       2015-10-19 11:23:00 +08:00
    @kzzhr 我从来没有碰到过用 uml 的公司。
    jc4myself
        31
    jc4myself  
       2015-10-19 14:47:20 +08:00
    @jadetang mybatis-generator 只是一个工具而已嘛,也可以用来生成 bean 的,还可以配置包路径。挺好用的
    jadetang
        32
    jadetang  
    OP
       2015-10-19 15:05:59 +08:00
    @jc4myself 我这个也可以,还不用连数据库。关键是,你有不同的模板,可以生成任意的文本文件的。试用一下吧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1572 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 17:01 · PVG 01:01 · LAX 10:01 · JFK 13:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.