Activeobjectsって面白いな
RailsのActiveRecordを意識して作られたと言われているjavaで作られた"Activeobjects"。
まだ触ったことなかったので、今日さっそく遊んでみた。
Activeobjectsはinterfaceからtableの生成からO/Rのマッピングをしているらしいので、まず
intefaceを書く。
UserInterface
package jp.my.test; import net.java.ao.Entity; public interface WebUser extends Entity{ public String getUserId(); public void setUserId(String s); public String getPassword(); public void setPassword(String s); }
NewsInterface
package jp.my.test; import net.java.ao.Entity; import net.java.ao.schema.*; public interface News extends Entity { public void setTitle(String s); public String getTitle(); public void setContents(String s); public String getContents(); @SQLType(Types.DATE) public void setDate(java.util.Date date); public java.util.Date getDate(); public WebUser getWriter(); public void setWriter(WebUser wu); }
testコード実行Main
package jp.my.test; import java.sql.SQLException; import net.java.ao.*; import net.java.ao.schema.*; public class Main { public static void main(String[] args) throws SQLException { EntityManager manager = new EntityManager("jdbc:postgresql:aotest","userid","password"); //create table manager.migrate(WebUser.class); manager.migrate(News.class); //WebUserの登録 WebUser wu = manager.create(WebUser.class); wu.setUserId("userId"); wu.setPassword("password"); wu.save(); //find System.out.println("----- webUsers --------- "); WebUser[] wus = manager.find(WebUser.class); for (WebUser u : wus) { System.out.println("PrimaryKey:"+u.getID()+ "\nuserId:"+u.getUserId()); } System.out.println("---"); //記事の登録 News news = manager.create(News.class); news.setTitle("Activeobjectsって面白いな"); news.setContents("RailsのActiveRecordを意識...."); news.setDate(new java.util.Date()); news.setWriter(wu); news.save(); //find System.out.println("----- 記事 --------- "); News[] nns = manager.find(News.class); for (News ns : nns) { System.out.println("PrimaryKey:"+ns.getID()+ "\nTitle:"+ns.getTitle()+ "\nContents:"+ns.getContents()+ "\nDate :"+ns.getDate() + "\nWriterId:"+ns.getWriter().getUserId()); } System.out.println("---"); } }
実行結果
----- webUsers --------- PrimaryKey:1 userId:userId --- ----- 記事 --------- PrimaryKey:1 Title:Activeobjectsって面白いな Contents:RailsのActiveRecordを意識.... Date :2008-08-28 00:00:00.0 WriterId:userId ---
自動的に生成されたTable
TABLE webuser ( id serial NOT NULL, userid character varying(255), "password" character varying(255), CONSTRAINT webuser_pkey PRIMARY KEY (id) ) TABLE news ( id serial NOT NULL, writerid integer, date date, title character varying(255), contents character varying(255), CONSTRAINT news_pkey PRIMARY KEY (id), CONSTRAINT fk_news_writerid FOREIGN KEY (writerid) REFERENCES webuser (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION )
となります。
XMLレス。interfaceのみでここまでとは。恐ろしし、面白いです。。。。しかも、まだ開発中(v0.8.2)なので、ActiveObject自体のソースの量が半端なく少ない。。。
うーん、これから実験的にこれ使ってみようかな。