使用spring连接及操作mongodb3.0实例
发布时间 - 2026-01-10 21:50:55 点击率:次前边有一篇记录过不使用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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# spring
# mongodb
# 3.0
# java连接mongodb
# spring操作mongodb
# java Spring整合Freemarker的详细步骤
# 实例讲解Java的Spring框架中的AOP实现
# 详解Java的Spring框架中的事务管理方式
# 详解Java Spring各种依赖注入注解的区别
# spring实例化javabean的三种方式分享
# 最流行的java后台框架spring quartz定时任务
# Spring security实现登陆和权限角色控制
# Spring security实现权限管理示例
# Java中SpringSecurity密码错误5次锁定用户的实现方法
# java中自定义Spring Security权限控制管理示例(实战篇)
# 话说Spring Security权限管理(源码详解)
# Java开发之spring security实现基于MongoDB的认证功能
# 需要注意
# 配置文件
# 实体类
# 的是
# 下载地址
# 能在
# 转换成
# 查询结果
# 使用这个
# 补上
# 大家多多
# 为空
# 后期
# 主要是
# 情况下
# 文档
# 序列化
# jce
# rt
# jar
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何使用Blade模板引擎?(完整语法和示例)
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
敲碗10年!Mac系列传将迎来「触控与联网」双革新
Android 常见的图片加载框架详细介绍
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
LinuxShell函数封装方法_脚本复用设计思路【教程】
如何快速查询域名建站关键信息?
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能
手机网站制作与建设方案,手机网站如何建设?
谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程
Laravel如何使用Telescope进行调试?(安装和使用教程)
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
如何在IIS中新建站点并解决端口绑定冲突?
三星、SK海力士获美批准:可向中国出口芯片制造设备
Android okhttputils现在进度显示实例代码
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
Laravel如何生成API文档?(Swagger/OpenAPI教程)
Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】
laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法
Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
Laravel如何配置任务调度?(Cron Job示例)
,南京靠谱的征婚网站?
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
简历没回改:利用AI润色让你的文字更专业
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
原生JS实现图片轮播切换效果
如何在不使用负向后查找的情况下匹配特定条件前的换行符
绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信
免费网站制作appp,免费制作app哪个平台好?
Laravel如何实现事件和监听器?(Event & Listener实战)
香港服务器网站卡顿?如何解决网络延迟与负载问题?
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
Laravel如何创建和注册中间件_Laravel中间件编写与应用流程
怎么用AI帮你为初创公司进行市场定位分析?
Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)
Laravel定时任务怎么设置_Laravel Crontab调度器配置
详解阿里云nginx服务器多站点的配置
Laravel怎么调用外部API_Laravel Http Client客户端使用
如何快速搭建二级域名独立网站?
如何在Windows 2008云服务器安全搭建网站?
利用 Google AI 进行 YouTube 视频 SEO 描述优化
Python图片处理进阶教程_Pillow滤镜与图像增强
googleplay官方入口在哪里_Google Play官方商店快速入口指南
Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】
Laravel如何升级到最新版本?(升级指南和步骤)
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?

