使用spring连接及操作mongodb3.0

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: 前边有一篇记录过不使用spring,直接在java代码中连接和操作mongodb数据库,这里就紧随其后记录一下使用spring的情况下,在java中简单操作mongodb。 maven导包配置: 因为涉及了sping以及springmvc,因此也需要导入它们相关的包: <project xmlns="http://maven.apache.org/POM/4.0.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());
            }
        }
    }

}


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
3月前
|
存储 NoSQL 网络安全
修改mongodb的连接参数
在MongoDB中,你可以通过连接字符串(connection string)来配置连接参数。连接字符串是一个包含连接信息的字符串,可以包括主机地址、端口、认证信息、数据库名等。 下面是一些常见的连接参数,你可以根据需要进行修改: 1. **主机地址(host):** MongoDB服务器的地址。可以是IP地址或主机名。 ```mongodb mongodb://localhost:27017 ``` 2. **端口号(port):** MongoDB服务器的端口号。默认端口号是27017。 ```mongodb mongodb://localhost:
123 1
|
4月前
|
NoSQL JavaScript 前端开发
如何使用 Node.js 连接和操作 MongoDB 数据库?
如何使用 Node.js 连接和操作 MongoDB 数据库?
209 2
|
5月前
|
NoSQL MongoDB Python
python mongodb pymongo 连接 身份认证
python mongodb pymongo 连接 身份认证
64 0
|
5月前
|
NoSQL MongoDB 数据库
mongoDB入门教程一:下载安装和环境配置、连接运行
mongoDB入门教程一:下载安装和环境配置、连接运行
200 0
|
4月前
|
NoSQL Java MongoDB
Spring Boot中MongoDB的使用和实战
Spring Boot中MongoDB的使用和实战
60 0
|
2月前
|
NoSQL Java MongoDB
java 连接mongodb的样例代码
java 连接mongodb的样例代码
|
3月前
|
存储 NoSQL MongoDB
学习如何使用 Python 连接 MongoDB: PyMongo 安装和基础操作教程
Python 需要一个 MongoDB 驱动程序来访问 MongoDB 数据库。我将使用 MongoDB 驱动程序 PyMongo 建议您使用 PIP 来安装 PyMongo。PIP 很可能已经安装在您的 Python 环境中。将命令行导航到 PIP 的位置,然后键入以下内容:
92 1
|
3月前
|
存储 NoSQL 安全
go 连接mongodb执行查询的代码
在Go语言中,你可以使用官方的MongoDB驱动程序 `"go.mongodb.org/mongo-driver/mongo"` 来连接MongoDB并执行查询。以下是一个简单的示例代码,演示如何连接MongoDB并执行查询: 首先,确保你已经安装了MongoDB驱动程序: ```bash go get go.mongodb.org/mongo-driver/mongo ``` 然后,可以使用以下示例代码: ```go package main import ( "context" "fmt" "log" "time" "go.mongodb.org/mongo-driv
|
7月前
|
存储 NoSQL Java
MongoDB 入门教程系列之二:使用 Spring Boot 操作 MongoDB
MongoDB 入门教程系列之二:使用 Spring Boot 操作 MongoDB
98 0
|
7月前
|
NoSQL 前端开发 JavaScript
node连接mongodb,ejs,cookie基础使用
node连接mongodb,ejs,cookie基础使用