当前位置:Gxlcms > mysql > MongoDBJavaORM的设想

MongoDBJavaORM的设想

时间:2021-07-01 10:21:17 帮助过:29人阅读

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

人气教程排行