搞技术的手艺人都有个习惯,没事喜欢瞎折腾。我也不例外,懂点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出来,还要一个个的取,我会更加崩溃。。。。。。。这样的假象让我不得不去折腾一下了。
场景如图所示:
注释:用户通过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 对象中的属性
[...]
文章来源:
http://www.javabloger.com/article/mongodb-java-orm.html?source=rss