Simple ActiveRecord

阅读更多
研究了几天Guice和NetMind,于是针对前段时间javaeye中关于ActiveRecord的讨论实现了一个简单的ActiveRecord模型。

Guice: http://code.google.com/p/google-guice/
NetMind: http://netmind.hu/persistence/

java 代码
 
  1. public class ActiveRecord {  
  2.    // Guice 注入  
  3.     @Inject  
  4.     protected static transient Store store;  
  5.      
  6.     public void save() {  
  7.        store.save(this);  
  8.     }  
  9.   
  10.     public void delete() {  
  11.         store.remove(this);  
  12.     }  
  13.      
  14.    /** 
  15.      * NetMind 自动生成的ID 
  16.      */  
  17.     public Long getPersistenceId() {  
  18.         return this.persistenceId;  
  19.     }  
  20. }  
  21.   
  22. public class User extends ActiveRecord {  
  23.     private String name;  
  24.   
  25.     public User() {}  
  26.     public User(String name) {  
  27.        this.name = name;  
  28.     }  
  29.   
  30.     public String getName() {  
  31.        return this.name;  
  32.     }  
  33.      
  34.     public void setName(String name) {  
  35.        this.name = name;  
  36.     }  
  37.   
  38.     @SuppressWarning("unchecked")  
  39.     public static List findAll() {  
  40.        return (List)store.find("find user");  
  41.     }  
  42.   
  43.     public static User findByName(String name) {  
  44.        return (User)store.findSingle("find user where name=?"new Object[] {name});  
  45.     }  
  46. }  
  47.   
  48. /** 
  49.   * Guice Module,使用struts2的时候可以在struts.xml中设置该module。 
  50.   *  
  51.   *  
  52.   * 
  53.   * 目前下载的guice-struts-plugin有一个bug,无法加载用户自定义的module,需要修改一下源代码。 
  54.   * 找到com.google.guice.inject.struts2.GuiceObjectFactory中下面这段代码,并添加一行加载用户自定义 
  55.   * module的代码即可。 
  56.   * 
  57.   *   this.injector = Guice.createInjector(new AbstractModule() { 
  58.   *         protected void configure() { 
  59.   *            install(new ServletModule()); 
  60.   *            // 需要添加的代码 
  61.   *            if(module != null) install(module); 
  62.   *            // Tell the injector about all the action classes, etc., so it 
  63.   *            // can validate them at startup. 
  64.   *            for (Class boundClass : boundClasses) { 
  65.   *              bind(boundClass); 
  66.   *            } 
  67.   *          } 
  68.   *        }); 
  69.   */  
  70. public class ExampleModule extends AbstractModule {  
  71.     protected void configure() {  
  72.         bind(Store.class).toInstance(new Store("org.hsqldb.jdbcDriver""jdbc:hsqldb:file:temp"));  
  73.         binder().requestStaticInjection(ActiveRecord.class);  
  74.     }  
  75. }  

你可能感兴趣的:(ActiveRecord,HSQLDB,Struts,Google,Grails)