Morphia-注釈によって管理されるMongoDB用の軽量ORM

コレクションから毎日投稿の一部を読んでいるときに、Googleリーダーは「Morphia」という魅力的な名前のMongoDBのORM投稿を見つけました。 以下に、「非常に簡単な概要」のタイトルを主張して、その資料から資料のレイアウトを見つけます。



  1. Morphiaは非常に使いやすいです。 簡単で高速なフレームワークです。
  2. 注釈付きPOJOオブジェクトとDAOアプローチの両方をサポート
  3. 構成全体は注釈によって定義され、XMLファイルは使用されません
  4. 拡張インターフェイスがサポートされています(現在、検証はフレームワーク(jsr330)に組み込まれています)。
  5. Google Guice、Spring、およびその他のDIフレームワークで最適に動作します。
  6. 多数の拡張ポイントが含まれています
  7. GWTをサポート






Morphiaのエンティティは次のように説明されます。



@Entity("employees") class Employee { @Id ObjectId id; //  ,     String firstName, lastName; // ,      Long salary = null; //   -null  Address address; //       @Embedded (   ,    ) Key<Employee> manager; //      ... @Reference List<Employee> underlings = new ArrayList<Employee>(); //...     @Serialized EncryptedReviews; //       @Property("started") Date startDate; //  ... @Property("left") Date endDate; @Indexed boolean active = false; //...   @NotSaved String readButNotStored; //  ,   ... @Transient int notStored; //...     transient boolean stored = true; //   transient   // ,        @PostLoad void postLoad(DBObject dbObj) { ... } }
      
      







次のようにデータベースを操作できます。



 Morphia morphia = new Morphia(); db = new Mongo(); Datastore ds = morphia.createDatastore(db, appname, user, pass.toCharArray()); morphia.map(Employee.class); ds.save(new Employee("Mister", "GOD", null, 0)); //  ,     Employee boss = ds.find(Employee.class).field("manager").equal(null).get(); //   Key<Employee> scottsKey = ds.save(new Employee("Scott", "Hernandez", ds.getKey(boss), 150*1000)); //      ds.update(boss, ds.createUpdateOperations(Employee.class).add("underlings", scottsKey)); //    Employee scottsBoss = ds.find(Employee.class).filter("underlings", scottsKey).get(); for (Employee e : ds.find(Employee.class, "manager", boss)) print(e);
      
      







Fluent APIを使用して作成されたクエリの例:



 Query q = ds.createQuery(MyEntity.class).filter("foo >", 12).filter("foo <", 30).order("dateAdded").offset(1000).retrievedFields(true, "foo"); //    MyEntity e = ds.find(MyEntity.class).field("name").equal("someName").get(); //     name = "someName"; List<Hotel> hotels = ds.find(Hotel.class, "stars >", 3).sort("-stars").asList();
      
      







DAOスタイルの作業例:



 public class HotelDAO extends BasicDAO<Hotel, String> { public HotelDAO(Morphia morphia, Mongo mongo ) { super(mongo, morphia, "myDB"); } public List<Hotel> findByTitle( String title ) { Pattern regExp = Pattern.compile(name + ".*", Pattern.CASE_INSENSITIVE); return ds.find(Hotel.class).filter("title", regExp).sort("title").asList(); } } HotelDAO hDAO = new HotelDAO(...); List<Hotel> hotels = hDAO.findByTitle("Luxury"); hDAO.save(new Hotel(...));
      
      







参照:




All Articles