`
leon1509
  • 浏览: 533241 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

(转) 使用Grails进行数据库逆向工程

阅读更多
原贴地址:http://groovyq.net/content/%E4%BD%BF%E7%94%A8grails%E8%BF%9B%E8%A1%8C%E6%95%B0%E6%8D%AE%E5%BA%93%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B

Grials 1.4/2.0将支持数据库的迁移和逆向工程(reverse engineering)。对于数据库的迁移,将基于Liquibase,并且已有LiquiBase插件可以使用。而对于逆向工程,Burt Beckwith新近发布的Grails逆向工程插件可以很容易的就实现这个功能,该插件不依赖Grails 1.4的任何新特性。

该插件可以根据数据库表结构生成对应的Domain Class。听起来还不错!

如下是这个插件示例用法:

安装这个插件:grails install-plugin reverse-engineer。(该插件最新的名字已经改为“db-reverse-engineer”)
在数据库中创建表:
create table role (
    ids bigint not null auto_increment,
    authority varchar(255) not null unique,
    primary key (ids)
);

create table user (
    id bigint not null auto_increment,
    version bigint not null,
    password varchar(255) not null,
    username varchar(255) not null unique,
    primary key (id)
);

create table user_roles (
    role_id bigint not null,
    user_id bigint not null,
    date_updated timestamp not null default CURRENT_TIMESTAMP,
    primary key (role_id, user_id)
);

alter table user_roles add index FK143BF46A52388A1A (role_id),
    add constraint FK143BF46A52388A1A foreign key (role_id) references role (ids);
alter table user_roles add index FK143BF46AF7634DFA (user_id),
    add constraint FK143BF46AF7634DFA foreign key (user_id) references user (id);


在grails-app/conf/Config.groovy文件中加入相关配置:
//设置生成的Domain Class的包名,缺省值为应用的名字,可以自己指定
grails.plugin.reveng.packageName="packagename" 

//设置多对多关系的中间表名
grails.plugin.reveng.manyToManyTables = ['user_roles'] 

//多对多关系的belongto设置,下述设置表示Role对应的Domain Class中指定了belognsTo,即static belongsTo = [User];
grails.plugin.reveng.manyToManyBelongsTos = ['user_roles': 'role'] 


执行:grails reverse-engineer,就可以在grails-app/domain/packagename目录下看到生成的Domain Class了。
这里需要注意,表Role的主键名字为ids,也没有version这个字段,那么在生成的Domain Class中,会出现如下内容:
static mapping = {
    id column: "ids"
    version false
}

如果对已经生成的Domain Class进行修改,比如添加属性,依旧会更改数据库的表结构。这种行为仍然还是由DataSource的dbCreate属性控制的,逆向工程插件并没有更改它。

就是这么简单!对于遗留数据库来讲,使用逆向工程比起自己去写Domain Class要方便得多!

感兴趣的读者可以下源https://github.com/grails-plugins/grails-reverse-engineer源代码和阅读相关文档http://grails-plugins.github.com/grails-reverse-engineer/
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics