Heim  >  Artikel  >  Datenbank  >  MongoDB Java ORM 的设想

MongoDB Java ORM 的设想

WBOY
WBOYOriginal
2016-06-07 16:26:07940Durchsuche

搞技术的手艺人都有个习惯,没事喜欢瞎折腾。我也不例外,懂点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–

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:SSH Tunnel MemcachedNächster Artikel:mongodb 入门 介绍