热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

MongoDBJavaORM的设想

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

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

推荐阅读
  • nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 本文介绍了MongoDB中的覆盖索引查询(Covered Queries)的概念和使用方法。当查询的查询条件和查询计划中只包含索引属性时,MongoDB可以高效地执行查询操作,无需扫描documents或者将documents调入内存中。覆盖索引查询的条件是查询中的所有属性都是索引的一部分,并且查询结果中的属性值都在同一个索引中。通过使用覆盖索引查询,MongoDB可以直接从RAM中的索引中获取数据,比通过扫描文档读取数据要快得多。本文还提供了一个使用覆盖索引查询的示例。 ... [详细]
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
  • MySQL笔记_MySQL笔记1|数据库17问17答
    本文由编程笔记#小编为大家整理,主要介绍了MySQL笔记1|数据库17问17答相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • step1.为mongodb添加admin管理员root@12.154.29.163:~#mongoMongoDBshellversionv3.4.2connectingto:mo ... [详细]
  • MongoDB学习:(二)MongoDB简单使用
    MongoDB学习:(二)MongoDB简单使用MongoDB使用:执行mongodb的操作之前,我们需要运行命令,来进入操作命令界面>mongo提示 ... [详细]
  • 前面刚有AWS开战MongoDB,双方“隔空互呛”,这厢又曝出2亿+简历信息泄露——MongoDB的这场开年似乎“充实”得过分了些。长期以来,作为“最受欢迎的NoSQL数据库”,M ... [详细]
  • 数据库基本介绍
    1、数据库基本知识概念:数据库:database(DB),是一种存储数据的仓库数据库是根据数据结构组织、存储和 ... [详细]
  • 关于mysql原理与web系统开发的信息
    本文目录一览:1、在做web开发的时候,MySQL主要功能是什么? ... [详细]
  • hackingTeam是如何被黑的
    hackingTeam是如何被黑的 ... [详细]
  • 《Python3 网络爬虫开发实战》:高效实用的 MongoDB 文档存储
    NoSQL,全称NotOnlySQL,意为不仅仅是SQL,泛指非关系型数据库。NoSQL是基于键值对的,而且不需要经过SQL ... [详细]
author-avatar
kikokikolove
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有