最近有时间看了一下mongodb,因为mongodb更容易扩展所以考虑使用mongodb来保存数据。

首先下载安装mongodb,这是很简单的,装好后使用mongod命令就可以启动数据库。正式部署的话可以考虑使用百度云bae,bae是支持mongodb的,版本2.x。

安装好之后,就要看怎么使用了,看官方的文档使用起来还是比较简单的。

文档分为shell版、python版、java版、javascript版等等。本人要再java里使用所以选择java版。

但是我发现java版非常"啰嗦",没有python版简洁。

java版:
https://docs.mongodb.org/getting-started/node/insert/

python版:
https://docs.mongodb.org/getting-started/python/insert/

可以看到例子中java版new了很多的Document,这些语句都是重复的。虽然python比较简洁但是本人也并不打算改用python来实现服务器端。因此就想看看java中有没有其他的写法。

实际上mongodb可以使用json格式的来保存数据的。

代码如下:
String json = "{'database' : 'mkyongDB','table' : 'hosting'," + "'detail' : {'records' : 99, 'index' : 'vps_index1', 'active' : 'true'}}}";
Document dbObject = Document.parse(json);
db.getCollection("restaurants").insertOne(dbObject)

可以看到这样就更简单了,不过这并不是我们想要的方式,我们希望的方式是通过一个实体类(javabean)来定义需要保存的内容,然后通过一个sava方法来保存这个实体类。

mongodb本身是支持保存实体类的,不过我找到的是2.x的版本,只要让实体类集成ReflectionDBObject就可以了,不过本人在测试的时候发现这样的方式会出错,可能和版本有关。

另外又看了一下spring-data-mongodb,spring-data可以实现上面的目的,通过insert方法来直接保存实体类。

MongoOperations mongoOps = new MongoTemplate(new Mongo(), "database");
mongoOps.dropCollection("person");

Date date = new Date();
log.info(date);
Person person = new Person("Joe", 34 );
person.setCreateTime(date);
mongoOps.insert(person);

Person p = mongoOps.findOne(new Query(where("name").is("Joe")),Person.class);
log.info(p.getCreateTime());

但是使用spring-data的时候,本人发现实体类中不能添加list,定义了list在保存的时候会报错,但实际上mongodb是支持嵌套的。

当然,mongodb的orm还是有很多的,本人并没有一一测试。

除了使用orm之外,还有另外一种方式来实现数据库与实体类之间的映射,那就是通过json,使用fastjson可以直接讲实体类转成json(fastjson在转换时是可以处理list的),然后使用mongodb中的方法来保存json这样也是可以的。

如果你觉得本文对你有所帮助请关注我的微信公众号:zhaojieTec,更多内容敬请期待.....

java中使用mongodb的几种方式的更多相关文章

  1. Java中HashMap遍历的两种方式

    Java中HashMap遍历的两种方式 转]Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml 第一种: ...

  2. JAVA中集合输出的四种方式

    在JAVA中Collection输出有四种方式,分别如下: 一) Iterator输出. 该方式适用于Collection的所有子类. public class Hello { public stat ...

  3. java中数组复制的两种方式

    在java中数组复制有两种方式: 一:System.arraycopy(原数组,开始copy的下标,存放copy内容的数组,开始存放的下标,需要copy的长度); 这个方法需要先创建一个空的存放cop ...

  4. java中设置代理的两种方式

    1 前言 有时候我们的程序中要提供可以使用代理访问网络,代理的方式包括http.https.ftp.socks代理.比如在IE浏览器设置代理. 那我们在我们的java程序中使用代理呢,有如下两种方式. ...

  5. java中实现同步的两种方式:syschronized和lock的区别和联系

    Lock是java.util.concurrent.locks包下的接口,Lock 实现提供了比使用synchronized 方法和语句可获得的更广泛的锁定操作,它能以更优雅的方式处理线程同步问题,我 ...

  6. java中遍历集合的三种方式

    第一种遍历集合的方式:将集合变为数组 package com.lw.List; import java.util.ArrayList; import java.util.List; import ja ...

  7. Java中实现多线程的四种方式

    Java多线程实现方式主要有四种:继承Thread类.实现Runnable接口.实现Callable接口通过FutureTask包装器来创建Thread线程.使用ExecutorService.Cal ...

  8. Java中创建线程的三种方式以及区别

    在java中如果要创建线程的话,一般有3种方法: 继承Thread类: 实现Runnable接口: 使用Callable和Future创建线程. 1. 继承Thread类 继承Thread类的话,必须 ...

  9. Java中实现多线程的两种方式之间的区别

    Java提供了线程类Thread来创建多线程的程序.其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象.每个Thread对象描述了一个单独的线程.要产生一个线 ...

随机推荐

  1. Python初学者之网络爬虫

    声明:本文内容和涉及到的代码仅限于个人学习,任何人不得作为商业用途. 本文将介绍我最近在学习Python过程中写的一个爬虫程序,将力争做到不需要有任何Python基础的程序员都能读懂.读者也可以先跳到 ...

  2. Python 小白的新手教程(一)

    本文是 python 入门级别的基础知识,包括数据类型和变量.输入输出.字符串和编码.list tuple dict set .条件判断.循环.函数.切片 迭代 列表生成器 生成器 迭代器等. 参考课 ...

  3. SQL Server 远程连接出错~~~无法访问服务器

    异常处理汇总 ~ 修正果带着你的Net飞奔吧!http://www.cnblogs.com/dunitian/p/4599258.html 代理开一下 tcp/ip协议开一下 收工

  4. 【翻译】MongoDB指南/引言

    [原文地址]https://docs.mongodb.com/manual/ 引言 MongoDB是一种开源文档型数据库,它具有高性能,高可用性,自动扩展性 1.文档数据库 MongoDB用一个文档来 ...

  5. Angular学习-指令入门

    1.指令的定义 从用户的角度来看,指令就是在应用的模板中使用的自定义HTML标签.指令可以很简单,也可以很复杂.AngularJS的HTML编译器会解析指令,增强模板的功能.也是组件化未来的发展趋势, ...

  6. webService学习之路(三):springMVC集成CXF后调用已知的wsdl接口

    webService学习之路一:讲解了通过传统方式怎么发布及调用webservice webService学习之路二:讲解了SpringMVC和CXF的集成及快速发布webservice 本篇文章将讲 ...

  7. IDDD 实现领域驱动设计-上下文映射图及其相关概念

    上一篇:<IDDD 实现领域驱动设计-理解限界上下文> 距离上一篇有几天时间了,<实现领域驱动设计>第三章的内容都是围绕一个词-上下文映射图,我大概断断续续看了几天,总共看了两 ...

  8. Oracle迁移:Linux->Windows

    源环境:RHEL6.4 + Oracle 11.2.0.4 目的环境:Windows 2003 需求:研发测试环境的Oracle数据库从Linux迁移到Windows,可以停机. 1.Windows安 ...

  9. DotNet生成随机数的一些方法

    在项目开发中,一般都会使用到“随机数”,但是在DotNet中的随机数并非真正的随机数,可在一些情况下生成重复的数字,现在总结一下在项目中生成随机数的方法. 1.随机布尔值: /// <summa ...

  10. 网页或微信小程序中使元素占满整个屏幕高度

    在项目中经常要用到一个容器元素占满屏幕高度和宽度,然后再在这个容器元素里放置其他元素. 宽度很简单就是width:100% 但是高度呢,我们知道的是height:100%必须是在父元素的高度给定了的情 ...