使用spring连接及操作mongodb3.0实例

前边有一篇记录过不使用spring,直接在java代码中连接和操作mongodb数据库,这里就紧随其后记录一下使用spring的情况下,在java中简单操作mongodb。

maven导包配置:

因为涉及了sping以及springmvc,因此也需要导入它们相关的包:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>spring_mongo</groupId>
 <artifactId>spring_mongo</artifactId>
 <packaging>war</packaging>
 <version>0.0.1-SNAPSHOT</version>
 <name>spring_mongo Maven Webapp</name>
 <url>http://maven.apache.org</url>
 <dependencies>
  <dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-mongodb</artifactId>
    <version>1.8.0.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>3.0.3</version>
  </dependency>
  <dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>4.1.6.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.1.7.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>4.0.9.RELEASE</version>
  </dependency>
 </dependencies>
 <build>
 <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
          <encoding>UTF-8</encoding>
          <compilerArguments>
           <verbose />
           <bootclasspath>${java.home}/lib/rt.jar;${java.home}/lib/jce.jar</bootclasspath>
          </compilerArguments>
        </configuration>
      </plugin>
    </plugins>
  <finalName>spring_mongo</finalName>
 </build>
</project>

spring基础配置:

主要是开启注解扫描等:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:task="http://www.springframework.org/schema/task"
  xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:context="http://www.springframework.org/schema/context"
  xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.1.xsd"> 

  <!-- 自动扫描(自动注入) -->
  <context:component-scan base-package="spring_mogo.dao.daoImp" /> 

  <!-- 导入mongodb的配置文件 -->
  <import resource="spring-mongodb305.xml" /> 

  <!-- 开启注解 -->
  <context:annotation-config /> 

</beans>

spring连接mongodb以及建立相关工厂的配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
  xmlns:mongo="http://www.springframework.org/schema/data/mongo"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/data/mongo
      http://www.springframework.org/schema/data/mongo/spring-mongo.xsd"> 

  <!-- spring连接mongodb数据库的配置 -->
  <mongo:mongo-client host="192.168.0.201" port="27017" credentials="tuzongxun:123456@mongoTest" id="mongo">
    <mongo:client-options write-concern="SAFE"/>
  </mongo:mongo-client>  

  <mongo:db-factory id="mongoDbFactory" dbname="mongoTest" mongo-ref="mongo" />  

  <!-- 只要使用这个调用相应的方法操作 -->
  <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
  </bean>   

</beans>

与数据库对应的实体类:

需要注意的是这里需要实现序列化的接口并设置uid的属性,否则不能在操作中直接把数据库返回结果转换成对象属性:

package spring_mongo.models; 

import java.io.Serializable; 

public class UserModel implements Serializable { 

  private static final long serialVersionUID = 1L;
  private String userName;
  private String password; 

  public UserModel(String userName, String password) {
    super();
    this.userName = userName;
    this.password = password;
  } 

  public String getUserName() {
    return userName;
  } 

  public void setUserName(String userName) {
    this.userName = userName;
  } 

  public String getPassword() {
    return password;
  } 

  public void setPassword(String password) {
    this.password = password;
  } 

}

根据spring配置获取操作mongodb的MongoTemplete,需要实现ApplicationContextAware接口:

package spring_mogo.dao.daoImp; 

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.data.mongodb.core.MongoTemplate; 

public abstract class AbstractBaseMongoTemplete implements
    ApplicationContextAware { 

  protected MongoTemplate mongoTemplate; 

  /**
   * @Description 根据配置文件设置mongoTemplate
   * @param mongoTemplate
   */
  public void setMongoTemplate(MongoTemplate mongoTemplate) {
    this.mongoTemplate = mongoTemplate;
  } 

  @Override
  public void setApplicationContext(ApplicationContext applicationContext)
      throws BeansException {
    MongoTemplate mongoTemplate = applicationContext.getBean(
        "mongoTemplate", MongoTemplate.class);
    setMongoTemplate(mongoTemplate);
  }
}

操作数据库的接口以及对应的实现类:

演示了最基础的增删改查,需要注意的地方在于参数的声明以及接收返回数据时和实体类的转换:

(1)接口:

package spring_mogo.dao; 

import java.util.List; 

import spring_mongo.models.UserModel; 

public interface UserDao {
  /**
   * 查询数据
   *
   * @author:tuzongxun
   * @Title: findAll
   * @param @return
   * @return List<UserModel>
   * @date May 13, 2016 3:07:39 PM
   * @throws
   */
  public List<UserModel> findAll(); 

  /**
   * 新增数据
   *
   * @author:tuzongxun
   * @Title: insertUser
   * @param @param user
   * @return void
   * @date May 13, 2016 3:09:45 PM
   * @throws
   */
  public void insertUser(UserModel user); 

  /**
   * 删除数据
   *
   * @author:tuzongxun
   * @Title: removeUser
   * @param @param userName
   * @return void
   * @date May 13, 2016 3:09:55 PM
   * @throws
   */
  public void removeUser(String userName); 

  /**
   * 修改数据
   *
   * @author:tuzongxun
   * @Title: updateUser
   * @param @param user
   * @return void
   * @date May 13, 2016 3:10:06 PM
   * @throws
   */
  public void updateUser(UserModel user); 

  /**
   * 按条件查询
   *
   * @author:tuzongxun
   * @Title: findForRequery
   * @param
   * @return void
   * @date May 13, 2016 3:23:37 PM
   * @throws
   */
  public List<UserModel> findForRequery(String userName); 

}

(2)实现类,这里要继承AbstractBaseMongoTemplete类,从而获得mongoTemplete进行各种操作:

package spring_mogo.dao.daoImp; 

import java.util.List; 

import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Component; 

import spring_mogo.dao.UserDao;
import spring_mongo.models.UserModel; 

import com.mongodb.BasicDBObject;
import com.mongodb.DBObject; 

@Component("UserDaoImp")
public class UserDaoImp extends AbstractBaseMongoTemplete implements UserDao { 

  /**
   * 查询所有数据
   *
   * @author:tuzongxun
   * @Title: findAll
   * @Description: TODO
   * @param @return
   * @date May 13, 2016 3:10:29 PM
   * @throws
   */
  @Override
  public List<UserModel> findAll() {
    // 需要设置集合对应的尸体类和相应的集合名,从而查询结果直接映射
    List<UserModel> userList = mongoTemplate.findAll(UserModel.class,
        "user");
    return userList;
  } 

  /**
   * 新增数据
   *
   * @author:tuzongxun
   * @Title: insertUser
   * @Description: TODO
   * @param @param user
   * @date May 13, 2016 3:10:45 PM
   * @throws
   */
  @Override
  public void insertUser(UserModel user) {
    // 设置需要插入到数据库的文档对象
    DBObject object = new BasicDBObject();
    object.put("userName", user.getUserName());
    object.put("password", user.getPassword());
    mongoTemplate.insert(object, "user");
  } 

  /**
   * 按条件删除数据
   *
   * @author:tuzongxun
   * @Title: removeUser
   * @Description: TODO
   * @param @param userName
   * @date May 13, 2016 3:11:01 PM
   * @throws
   */
  @Override
  public void removeUser(String userName) {
    // 设置删除条件,如果条件内容为空则删除所有
    Query query = new Query();
    Criteria criteria = new Criteria("userName");
    criteria.is(userName);
    query.addCriteria(criteria);
    mongoTemplate.remove(query, "user");
  } 

  /**
   * 修改数据
   *
   * @author:tuzongxun
   * @Title: updateUser
   * @Description: TODO
   * @param @param user
   * @date May 13, 2016 3:11:12 PM
   * @throws
   */
  @Override
  public void updateUser(UserModel user) {
    // 设置修改条件
    Query query = new Query();
    Criteria criteria = new Criteria("userName");
    criteria.is(user.getUserName());
    query.addCriteria(criteria);
    // 设置修改内容
    Update update = Update.update("password", user.getPassword());
    // 参数:查询条件,更改结果,集合名
    mongoTemplate.updateFirst(query, update, "user");
  } 

  /**
   * 根据条件查询
   *
   * @author:tuzongxun
   * @Title: findForRequery
   * @Description: TODO
   * @param @param userName
   * @date May 13, 2016 4:08:15 PM
   * @throws
   */
  @Override
  public List<UserModel> findForRequery(String userName) {
    Query query = new Query();
    Criteria criteria = new Criteria("userName");
    criteria.is(userName);
    query.addCriteria(criteria);
    // 查询条件,集合对应的实体类,集合名
    List<UserModel> userList = mongoTemplate.find(query, UserModel.class,
        "user");
    return userList;
  } 

}

测试类:

为了验证以上代码和配置的正确性,测试类代码如下:

package spring_mongo.test; 

import java.util.List; 

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 

import spring_mogo.dao.UserDao;
import spring_mongo.models.UserModel; 

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:spring.xml" })
public class mongoTest { 

  @Autowired
  private UserDao userDao; 

  /**
   * 查询测试
   *
   * @author:tuzongxun
   * @Title: monFindTest
   * @param
   * @return void
   * @date May 13, 2016 3:27:51 PM
   * @throws
   */
  @Test
  public void monFindTest() {
    List<UserModel> userModels = userDao.findAll();
    if (userModels != null && userModels.size() > 0) {
      for (UserModel user : userModels) {
        System.out.println(user.getUserName() + ":"
            + user.getPassword());
      }
    }
  } 

  /**
   * 插入数据测试
   *
   * @author:tuzongxun
   * @Title: monInsertTest
   * @param
   * @return void
   * @date May 13, 2016 3:27:38 PM
   * @throws
   */
  @Test
  public void monInsertTest() {
    UserModel user = new UserModel("test111", "123456");
    userDao.insertUser(user);
    this.monFindTest();
  } 

  /**
   * 删除测试
   *
   * @author:tuzongxun
   * @Title: monRemoveTest
   * @param
   * @return void
   * @date May 13, 2016 3:28:06 PM
   * @throws
   */
  @Test
  public void monRemoveTest() {
    String userName = "test111";
    userDao.removeUser(userName);
    this.monFindTest();
  } 

  /**
   * 测试修改
   *
   * @author:tuzongxun
   * @Title: monUpdateTest
   * @param
   * @return void
   * @date May 13, 2016 3:50:08 PM
   * @throws
   */
  @Test
  public void monUpdateTest() {
    UserModel user = new UserModel("test111", "test");
    userDao.updateUser(user);
    this.monFindTest();
  } 

  /**
   * 按条件查询
   *
   * @author:tuzongxun
   * @Title: monFindForRuq
   * @param
   * @return void
   * @date May 13, 2016 4:10:53 PM
   * @throws
   */
  @Test
  public void monFindForRuq() {
    String userName = "test111";
    List<UserModel> userModels = userDao.findForRequery(userName);
    if (userModels != null && userModels.size() > 0) {
      for (UserModel user : userModels) {
        System.out.println(user.getUserName() + ":"
            + user.getPassword());
      }
    }
  } 

}

后期补上demo下载地址:demo

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • MongoDB支持的java数据类型和测试例子

    mongodb的java数据类型有: Object Ids 自动IDRegular Expressions 正则表达式搜索记录Dates/Times 时间Database References 数据基础结构Binary Data 二进制流Timestamp Data 时间标记戳Code Data 代码数据Embedded Documents 嵌入式文档Arrays 数组类型 详细参考原来英文 http://docs.mongodb.org/ecosystem/drivers/java-types

  • Java操作MongoDB数据库示例分享

    MongoDB是一个文档型数据库,是NOSQL家族中最重要的成员之一,以下代码封装了MongoDB的基本操作. MongoDBConfig.java package com.posoftframework.mongodb; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.Enumeration; import java.util.HashMap; i

  • 【MongoDB for Java】Java操作MongoDB数据库

    本篇文章主要介绍Java操作MongoDB. 开发环境: System:Windows IDE:eclipse.MyEclipse 8 Database:mongoDB 开发依赖库: JavaEE5.mongo-2.5.3.jar.junit-4.8.2.jar 一.准备工作 1. 首先,下载mongoDB对Java支持的驱动包 驱动包下载地址:http://www.jb51.net/softs/41751.html mongoDB对Java的相关支持.技术:http://www.mongodb

  • Java操作MongoDB模糊查询和分页查询

    本文实例为大家分享了Java操作MongoDB模糊查询和分页查询,供大家参考,具体内容如下 模糊查询条件: 1.完全匹配 Pattern pattern = Pattern.compile("^name$", Pattern.CASE_INSENSITIVE); 2.右匹配 Pattern pattern = Pattern.compile("^.*name$", Pattern.CASE_INSENSITIVE); 3.左匹配 Pattern pattern =

  • java实现mongodb的数据库连接池

    MongoDB是介于关系数据库和非关系数据库之间的一种产品,文件的存储格式为BSON(一种JSON的扩展),这里就主要介绍Java通过使用mongo-2.7.3.jar包实现mongodb连接池,具体的java代码实现如下: 数据库连接池配置参数: /** *@Description: mongo连接池配置文件 */ package cn.lulei.mongo.pool; public class MongoConfig { private static String userName;//用

  • java操作mongodb基础(查询 排序 输出list)

    复制代码 代码如下: package com.infomorrow.webroot; import java.util.List; import com.mongodb.BasicDBObject;import com.mongodb.DB;import com.mongodb.DBCollection;import com.mongodb.DBCursor;import com.mongodb.DBObject;import com.mongodb.MongoClient; public cl

  • MongoDB系列教程(六):java操作mongodb实例

    java操作mysql数据库的代码我们已经了如指掌了,增删改查,java对mongodb数据库也是类似的操作,先是数据库连接,再是进行操作. 首先我们进入进入admin数据库,然后建立自己的数据库testMongoDb,进入admin数据库后,就可以直接进入testMongoDb,因为用户可以进入系统的数据库,就是超级管理员,use testMongoDb后,为该数据库设置用户名和密码,db.addUser('root','root'),这样我们在程序中连该数据库,并实现增删改查,代码如下所示.

  • java操作mongodb示例分享

    复制代码 代码如下: package mymaven; import java.net.UnknownHostException;  import java.util.Set; import com.mongodb.BasicDBObject;  import com.mongodb.DB;  import com.mongodb.DBCollection;  import com.mongodb.DBCursor;  import com.mongodb.DBObject;  import c

  • 简单学习Java+MongoDB

    MongoDB一些概念 下面以MongoDB和MySql的对比来说明 MySQL MongoDB database(数据库) db(数据库) table(表) collection(集合) row(行记录) document(文档) column(列) field(字段) primary key(指定主键) "_id" : ObjectId("******")  自动生成内置主键 Mysql的数据形式如下 同样的数据在MongoDB下类似于JSON键值对,叫BSON

  • MongoDB快速入门笔记(八)之MongoDB的java驱动操作代码讲解

    MongoDB的Java驱动是线程安全的,对于一般的应用,只要一个Mongo实例即可,Mongo有个内置的连接池(池大小默认为10个). 下面代码给大家介绍MongoDB的java驱动操作,具体代码如下所示: import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; import org.bson.Document; import com.mongodb.MongoClient; impo

随机推荐