ホームページ  >  記事  >  データベース  >  MongoDB Java ORM 的设想

MongoDB Java ORM 的设想

WBOY
WBOYオリジナル
2016-06-07 16:26:07940ブラウズ

搞技术的手艺人都有个习惯,没事喜欢瞎折腾。我也不例外,懂点Java、ORM 之类的技术,最近又有点迷上了MongoDB,目前对MongoDB了解的还不算太多,但兴趣到挺大。有句俗语:瘾大水平低。通常是指某人某项技艺不高,但偏偏喜欢耍弄这项自己不精的技艺。这句话

搞技术的手艺人都有个习惯,没事喜欢瞎折腾。我也不例外,懂点Java、ORM 之类的技术,最近又有点迷上了MongoDB,目前对MongoDB了解的还不算太多,但兴趣到挺大。有句俗语:瘾大水平低。通常是指某人某项技艺不高,但偏偏喜欢耍弄这项自己不精的技艺。这句话对我现在挺适合。

why
ORM给众多的Javaer留下了很多美好的印象,原因只有一个“方便”,口水:虽然Hibernate也是ORM,但使用起来并不方便。

打算自己写个类里面封装一套CRUD的方法,用这个类去调用 BasicDBObject ,DBCursor 等一些MongoDB Java API 里面的类。 现在的想法暂且不是很完美,但是可以简化一些web应用的开发,说一个场景:用户输入表单信息,将输入的表单信息,通过action层转换成表单对象,对象传入Service层操作具体的业务逻辑,再传入底层通过API操作MongoDB,这是一个常见的场景。

但是如果一个表单上有很多字段,那么对象到了操作MongoDB的时候将需要手工取出来,在一个个的put进去,一个页面上有20、30个字段需要存入,这么一来一旦这样的场景多了,我会崩溃的。如果还要来输入的数据从MongoDB中在get出来,还要一个个的取,我会更加崩溃。。。。。。。这样的假象让我不得不去折腾一下了。

场景如图所示:
http://1aqpcg.bay.livefilestore.com/y1pnkPGdc-f_cm0xY9qX96lvUQh0dpDHopOYf1zhoZ0hSBWCuyqxBFyi5ddDGQEKTIGj3MaAH3iGxf91JkWBdMeYwN8Y5UTjXhf/mongodb_orm.png

注释:用户通过HTML/JSP前端页面提交参数,Action层将参数转换成对象传到 Service层,Service层再 传 对象 到DAO层,DAO层 把对象转换成参数 调用API ,到了调用底层API的时候需要一个个get/put参数,如果一多就是个悲剧啊。

how
就因为这样让我想到折腾可以进行的办法,通过通过java反射加上SDK中注释的功能,这样可以灵活的操作,废话少说,进行介绍具体怎么反射和采用注释的折腾过程,主要思路如下:

1.主要实现程序  MyMongoDBORMImpl
class MyMongoDBORMImpl {
     // 添加数据
    public  void addObject(Object clazz) {     //传入 new 对象,获得表名和对象实例化参数
        Map, ?>  map= MappingTools.copyABeanToMap(clazz );  //调用自己写的 映射工具
        System.out.println(map  );
        Iterator> val=map.values().iterator();  // 通过反射得到 new 对象中的值
        Iterator> key=map.keySet().iterator(); // 通过反射得到 new 对象中的属性
        BasicDBObject doc = new BasicDBObject();
        while (key.hasNext()){
            doc.put(key.next().toString()  , val.next()   );  // 对 MongoDB BasicDBObject 对象 进行赋值
        }
         coll.insert(doc);
    }
}

2.测试程序  TestMongoDBORMCase
public class TestMongoDBORMCase {
   
    public static void main(String[] args) throws Exception {
         MyMongoDBORMImpl   impl= new MyMongoDBORMImpl();
            // 实例化Users  对象,并且插入
        Users  user= new Users();
        user.setUsername("javabloger");
        user.setId(12);
        user.setPassword("www.javabloger.com ");
        user.setDept("dept");
                impl.addObject(user  );

       // 实例化TestPojo  对象,并且插入
        TestPojo  pojo1= new TestPojo();
        pojo1.setIds(2);
        pojo1.setUsernames("username–javabloger");
                  impl.addObject(pojo1  );
    }
}

主要代码介绍:
1.Users.java、TestPojo.java 是pojo对象,里面set/get一些参数值;
2.ORMappingTools.java 是pojo 对象和 MongoDB对象映射的工具类;
3.ColumnMapping.java 是 注释程序,可以让对象属性和表属性更加灵活;
4.MyMongoDBORMImpl.java 是一个封装 MongoDB API 的程序;
5.TestMongoDBORMCase.java  测试程序。

详细内容如图所示:
http://1aqpcg.bay.livefilestore.com/y1podfjBkRIXcs9fMoPanrQC5R1As8ed2qte5LhXailB-aOt0QCEhiw1pCLh9bVFkRTyZm8bSiR9CM5JX5tEHKaYXxUq6ZDBoBC/MongoDB_ORM_class_uml.png

从这里下载代码 MongoDBJavaORM.zip 

还可以从这里下载代码 MongoDBJavaORM.zip 

因为只是草稿,代码有些粗糙里面只写了一个添加的方法,主要想把精力还是在构思上,这也许只是个开始,有必要的话下面将写一个小工具完善这个想法,给大家进行分享。

相关文章:
mongodb 入门 介绍
MongoDB 集群
Java操作 MongoDB NoSQL数据库

–end–

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:SSH Tunnel Memcached次の記事:mongodb 入门 介绍