---------------------------------------------------------------------------------------------
[版权申明:本文系作者原创,转载请注明出处] 
文章出处:http://blog.csdn.net/sdksdk0/article/details/64948728
作者:朱培      ID:sdksdk0     
--------------------------------------------------------------------------------------------

MongoDB是一个NoSql数据库,MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。其存储结构为BSON。
下面是通过一个Spring+SpringMVC+MongoDB的案例来说明mongodb的基本使用。mongdb的基本结构这里就不再重复说明。从入门到应用。源码地址:https://github.com/sdksdk0/mongodbDemo
一、入门
MongoDB的提供了一个面向文档存储, 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
首先从入门程序开始。
1、新建maven工程,导入mongodb的驱动包。
         <dependency>
                        <groupId>org.mongodb</groupId>
                        <artifactId>mongodb-driver</artifactId>
                        <version>3.4.2</version>
        </dependency>
2、连接数据库
                MongoClient  mongoClient=new MongoClient("127.0.0.1",27017);
                  //连接到数据库
                  MongoDatabase  mongoDatabase=mongoClient.getDatabase("tf");
                  System.out.println("连接成功");
3、创建集合并获取集合
                 mongoDatabase.createCollection("test");
                  //System.out.println("创建集合成功");
                  
                  //获取集合
                  MongoCollection<Document> collection = mongoDatabase.getCollection("test");
4、插入文档
      //插入文档
      public static void createDocument(MongoCollection<Document> collection){
            
            Document  document=new Document("title","MongoDB")
                 .append("description", "database")
                 .append("likes", 100)
                 .append("by", "Fly");
            ArrayList<Document> documents = new ArrayList<Document>();
            documents.add(document);
            collection.insertMany(documents);
            System.out.println("文档插入成功");
            
      }
5、查询文档
      //查询文档
      public  static void  findIterable(MongoCollection<Document>  collection){
            FindIterable<Document>  findIterable=collection.find();
            MongoCursor<Document> iterator = findIterable.iterator();
            while(iterator.hasNext()){
                  System.out.println(iterator.next());
            }
      }

6、更新文档
    //更新文档
      public  static void  updateMany(MongoCollection<Document>  collection){
            collection.updateMany(Filters.eq("likes",100),new Document("$set",new Document("likes",200)));
            
            //查询文档
            findIterable(collection);
      }
      
7、删除文档
     //删除
      public  static void deleteMany(MongoCollection<Document>  collection){
            //删除符合条件的第一个文档
            
            collection.deleteOne(Filters.eq("likes",200));
            
            //删除所有符合条件的文档
            collection.deleteMany(Filters.eq("likes",200));
            
            //查询文档
            findIterable(collection);         
      }
二、应用
这个案例的主要内容是,我们在spring中配置mongodb的数据源,如何可以添加修改删除和条件查询,因为是面向对象的,所以这里可以使用的是HQL语句来操作mongodb数据库。
这里主要用的是用户userId 、name、age来演示。
1、web.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
      id="sys" version="2.5">
      <description>mongo</description>
      <display-name>service Java Deploy V1.0.0</display-name>
      <context-param>
            <param-name>webAppRootKey</param-name>
            <param-value>mongo</param-value>
      </context-param>
      <!-- 加载log4j -->
      <context-param>
            <param-name>log4jConfigLocation</param-name>
            <param-value>/WEB-INF/classes/sysconfig/properties/log4j.properties
            </param-value>
      </context-param>
      <!-- 加载xml config -->
      <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath*:syscoreConfig/*/*.xml
            classpath:sysconfig/spring/*.xml
            classpath:sysconfig/springmvc/*.xml
            </param-value>
      </context-param>
      <!-- 编码 -->
      <filter>
            <filter-name>encodingFilter</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <init-param>
                  <param-name>encoding</param-name>
                  <param-value>UTF-8</param-value>
            </init-param>
            <init-param>
                  <param-name>forceEncoding</param-name>
                  <param-value>true</param-value>
            </init-param>
      </filter>
      <filter-mapping>
            <filter-name>encodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
      </filter-mapping>
      <!-- 定义LOG4J监听器 -->
      <listener>
            <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
      </listener>
      <!-- 监听 自动装配ApplicationContext的配置信息 -->
      <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
      <!-- spring mvc -->
      <servlet>
            <servlet-name>springMvc</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                  <param-name>ContextConfigLocation</param-name>
                  <param-value>classpath:sysconfig/spring-servlet.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
            <servlet-name>springMvc</servlet-name>
            <url-pattern>/</url-pattern>
      </servlet-mapping>
      <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
</web-app>
2、spring-mvc.xml配置
扫描注解:
<!-- com.rui.pro.dao.*.impl/**,com.rui.pro.service.*.impl/**,com.rui.pro.controller/** -->
      <context:component-scan base-package=" **.dao.***,**.service.***,**.controller.**"/>
      <bean
            class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
            <property name="order" value="0" />
      </bean>
      <bean id="messageAdapter"
            class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
            <property name="messageConverters">
                  <list>
                        <bean
                              class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
                  </list>
            </property>
      </bean>
      <bean
            class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
      <bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter" />
      <bean id="exceptionMessageAdapter"
            class="org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver">
            <property name="messageConverters">
                  <list>
                        <!-- Support JSON MappingJacksonHttpMessageConverter -->
                        <bean
                              class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
                  </list>
            </property>
      </bean>
3、db.xml配置
这里配置的是mongodb数据库的属性以及一些包
      <mongo:mongo id="mongo" host="localhost" port="27017">
            <mongo:options connections-per-host="8"
                  threads-allowed-to-block-for-connection-multiplier="4"
                  connect-timeout="1000" max-wait-time="1500" auto-connect-retry="true"
                  socket-keep-alive="true" socket-timeout="1500" slave-ok="true"
                  write-number="1" write-timeout="0" write-fsync="true" />
      </mongo:mongo>
      <mongo:db-factory id="mongoDbFactory" dbname="tf"
            mongo-ref="mongo" />
      <mongo:mapping-converter base-package="cn.tf.mongodb.demo.bean"
            id="mongoConverter" />
      <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
            <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
            <constructor-arg name="mongoConverter" ref="mongoConverter" />
      </bean>
      <mongo:repositories base-package="cn.tf.mongodb.demo.bean" />
      <bean id="userDao" class="cn.tf.mongodb.demo.dao.impl.UserDaoImpl">
            <property name="mongoTemplate" ref="mongoTemplate" />
      </bean>
      <!-- 扫描实现 -->
      <context:annotation-config />
4、bean类
      private String id;
      private Integer userId;
      private String name;
      private Integer age;
设置其setter/getter方法、构造方法、toString等。
5、Dao层
public interface UserDao {
      List<User> get();
      User getOne(Integer id);
      
      public void findAndModify(Integer id, Integer age);
      void insert(User u);
      
      void removeOne(Integer id);
      
      //修改多条
      void update(User criteriaUser, User user) ;
      
      // 按条件查询, 分页 <br>
      public List<User> find(User criteriaUser, int skip, int limit);
      
      //根据条件查询出来后 再去修改
      public User findAndModify(User criteriaUser, User updateUser);
      //查询出来后 删除
      public User findAndRemove(User criteriaUser) ;
      //统计
      public long count(User criteriaUser);
      //条件查询
      public Query getQuery(User criteriaUser);
   }
6、实现类
@Repository
public class UserDaoImpl implements UserDao {
      private MongoOperations mongoTemplate;
      // @Autowired
      // @Qualifier("mongoTemplate")
      public void setMongoTemplate(MongoOperations mongoTemplate) {
            this.mongoTemplate = mongoTemplate;
      }
      public List<User> get() {
            List<User> user = mongoTemplate.findAll(User.class);
            return user;
      }
      public User getOne(Integer id) {
            User user = mongoTemplate.findOne(new Query(Criteria.where("userId")
                        .is(id)), User.class);
            return user;
      }
      public void findAndModify(Integer id, Integer age) {
            /*mongoTemplate.updateFirst(new Query(Criteria.where("userId").is(id)),
                        new Update().inc("age", age), User.class);*/
            
            mongoTemplate.updateFirst(new Query(Criteria.where("userId").is(id)),
                        new Update().set("age", age), User.class);
      }
      public void insert(User u) {
            mongoTemplate.insert(u);
      }
      public void removeOne(Integer id) {
            Criteria criteria = Criteria.where("userId").in(id);
            if (criteria != null) {
                  Query query = new Query(criteria);
                  if (query != null
                              && mongoTemplate.findOne(query, User.class) != null)
                        mongoTemplate.remove(mongoTemplate.findOne(query, User.class));
            }
      }
      /**
       * 修改多条 <br>
       * ------------------------------<br>
       *
       * @param criteriaUser
       * @param user
       */
      public void update(User criteriaUser, User user) {
            Criteria criteria = Criteria.where("age").gt(criteriaUser.getAge());
            ;
            Query query = new Query(criteria);
            Update update = Update.update("name", user.getName()).set("age",
                        user.getAge());
            mongoTemplate.updateMulti(query, update, User.class);
      }
      /**
       * 按条件查询, 分页 <br>
       * ------------------------------<br>
       *
       * @param criteriaUser
       * @param skip
       * @param limit
       * @return
       */
      public List<User> find(User criteriaUser, int skip, int limit) {
            Query query = getQuery(criteriaUser);
            query.skip(skip);
            query.limit(limit);
            return mongoTemplate.find(query, User.class);
      }
      /**
       * 根据条件查询出来后 再去修改 <br>
       * ------------------------------<br>
       *
       * @param criteriaUser
       *            查询条件
       * @param updateUser
       *            修改的值对象
       * @return
       */
      public User findAndModify(User criteriaUser, User updateUser) {
            Query query = getQuery(criteriaUser);
            Update update = Update.update("age", updateUser.getAge()).set("name",
                        updateUser.getName());
            return mongoTemplate.findAndModify(query, update, User.class);
      }
      /**
       * 查询出来后 删除 <br>
       * ------------------------------<br>
       *
       * @param criteriaUser
       * @return
       */
      public User findAndRemove(User criteriaUser) {
            Query query = getQuery(criteriaUser);
            return mongoTemplate.findAndRemove(query, User.class);
      }
      /**
       * count <br>
       * ------------------------------<br>
       *
       * @param criteriaUser
       * @return
       */
      public long count(User criteriaUser) {
            Query query = getQuery(criteriaUser);
            return mongoTemplate.count(query, User.class);
      }
      /**
       * 条件查询
       *
       * @param criteriaUser
       * @return
       */
      public Query getQuery(User criteriaUser) {
            if (criteriaUser == null) {
                  criteriaUser = new User();
            }
            Query query = new Query();
            if (criteriaUser.getId() != null) {
                  Criteria criteria = Criteria.where("userId").is(criteriaUser.getId());
                  query.addCriteria(criteria);
            }
            if (criteriaUser.getAge() > 0) {
                  Criteria criteria = Criteria.where("age").gt(criteriaUser.getAge());
                  query.addCriteria(criteria);
            }
            if (criteriaUser.getName() != null) {
                  Criteria criteria = Criteria.where("name").regex(
                              "^" + criteriaUser.getName());
                  query.addCriteria(criteria);
            }
            return query;
      }
}
添加成功之后我们可以使用db.user.find()命令查看。
7、controller层
@Controller
@RequestMapping("user")
public class UserController {
      
      @Autowired
      UserDao userDao;
      
      public void setUserDao(UserDao userDao) {
            this.userDao = userDao;
      }
      @RequestMapping("test")
      @ResponseBody
      public String test(){
            return "hello";
      }
      
      @ResponseBody
      @RequestMapping("get")
      public List<User> get(HttpServletRequest request,HttpServletResponse response){
            List<User> user=userDao.get();
            System.out.println(this.getClass().getName()+":"+user);
            return user;
      }
}
8、我们可以在浏览器中访问
总之,mongodb是一个非常不错的数据库。通过与spring的整合,可以很方便的使用这个Nosql数据库。
源码地址:https://github.com/sdksdk0/mongodbDemo

Spring+SpringMVC+MongoDB案例相关推荐

  1. Spring整合Mongodb,Maven的依赖,Spring配置,MongoDB的公共操作类,使用SpringMVC的Controller进行测试并返回结果的案例

    在和Spring和MongoDB进行整合的时候需要如下三个jar,分别是: spring-data-commons spring-data-mongodb mongo-java-driver 下面讲解 ...

  2. spring+springmvc+maven+mongodb

    1.前言 最近项目开发使用到了spring+springmvc+maven+mongodb,项目中的框架是用springboot进项开发的,对于我们中级开发人员来说,有利有弊,好处呢是springbo ...

  3. Spring+SpringMVC +MyBatis整合配置文件案例66666

    Spring+SpringMVC +MyBatis整合配置文件案例 标签: springspringmvcmybatismvcjava 2017-04-13 19:12 228人阅读 评论(1) 收藏 ...

  4. 架构之路之spring+springmvc+maven+mongodb的搭建(转载:http://blog.csdn.net/tomcat_2014/article/details/55100130)

    1.前言 最近项目开发使用到了spring+springmvc+maven+MongoDB,项目中的框架是用springboot进项开发的,对于我们中级开发人员来说,有利有弊,好处呢是springbo ...

  5. javaweb各种框架组合案例(三):maven+spring+springMVC+hibernate

    1.hibernate译为"越冬",指的是给java程序员带来春天,因为java程序员无需再关心各种sql了: 2.hibernate通过java类生成数据库表,通过操作对象来映射 ...

  6. SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)

    登录 | 注册 收藏成功 确定 收藏失败,请重新收藏 确定 查看所有私信查看所有通知 暂没有新通知 想要绕过微信小程序开发中的坑吗?不妨来听这个,今晚8点,1小时帮你搞定! 14小时以前 CSDN日报 ...

  7. 关于CKEditor4.5.6的使用,自定义toolbar配置,上传图片案例(SpringMVC+MyBatis案例),自定义行高,去编辑器的中内容,将编辑器中内容设置到指定的位置等

     关于CKEditor的一个配置整理,改文件为config.js: 文件内容如下: /**  * @license Copyright (c) 2003-2016, CKSource - Fred ...

  8. spring 2.0核心技术与最佳实践 pdf_推荐 Spring Boot 实践学习案例大全 数据缓存 和中间件 安全权限...

    概况 spring boot 实践学习案例 spring boot 初学者及核心技术巩固的最佳实践 目录 『 Spring Boot 2 快速教程 』 Spring Boot 2:WebFlux集成 ...

  9. springmvc+mongodb+maven 项目搭建配置

    操作步骤我就不再细化了 项目能运行,测试过了,先上配置,另一篇文章上代码,点击下载源码 项目结构 pom.xml <project xmlns="http://maven.apache ...

  10. Spring+SpringMVC+MyBatis+easyUI整合优化篇(十三)数据层优化-表规范、索引优化

    本文提要 最近写的几篇文章都是关于数据层优化方面的,这几天也在想还有哪些地方可以优化改进,结合日志和项目代码发现,关于数据层的优化,还是有几个方面可以继续修改的,代码方面,整合了druid数据源也开启 ...

最新文章

  1. java 哈希算法_选择Java密码算法第1部分-哈希
  2. 领扣(LeetCode)对称二叉树 个人题解
  3. this.getstate_Java线程类Thread.State getState()方法(带示例)
  4. Django-分页、中间件和请求的声明周期
  5. 金蝶K3系统BOM批量导入操作指南
  6. win10 下mysql环境变量配置
  7. Opencv实战四 图像匹配
  8. 第六课:计算两数的GCF(最大公因数)(基于AndroidStudio3.2)
  9. 大型服装集团BI决策系统的分析主题模块
  10. rate-limiting
  11. 脑机接口的过去、现在与未来
  12. php百度大脑,百度大脑和图灵机器人制作一个简单的自动聊天机器人【PHP代码】...
  13. shared_ptr的引用计数原理
  14. slam十四讲-ch6-非线性优化(包含手写高斯牛顿、使用g2o库、使用ceres库三种方法的源码详细注释)
  15. 中科大ctf题型总结,来自小白的感慨
  16. SVN使用教程(详细)
  17. https://www.52pojie.cn/thread-688820-1-1.html
  18. 爱码物联SaaS|一物一码技术如何助力线下流量营销?
  19. 纯CSS3动画实现小球绕轨道旋转效果
  20. USB存储设备(如:U盘,移动硬盘)

热门文章

  1. 服务器硬盘开机吱吱响,硬盘吱吱响怎么回事?电脑硬盘响动原因和解决方法
  2. ps渐隐在哪里以及ps渐隐知识点总结
  3. Java 标识符的命名规则与规范
  4. Ubuntu 部署Django, Wagtail,Postgres, Nginx, Gunicorn,Supervisor
  5. 在知网查重复率时你入坑了吗?
  6. office 2010 word文档,插入复选框,方框打勾(打对号)的方法
  7. English语法_形容词-排序
  8. 了解速率控制模式Rate Control Mode-CBR,VBR,CRF(x264、x265、vpx)
  9. 手机php文件怎么改后辍,手机百度云盘修改文件后缀名的方法
  10. java case 字符_Java中Switch Case使用字符串