Mongdb和Spring的整合
我自己的实现:
代码:https://github.com/littlecarzz/spring-data-mongodb
我使用的是spring-data-mongodb包,因为springboot注解和自动化配置,可以让我们少写很多配置文件,方便。
1.首先引入依赖
pom.xml
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>2.0.14.RELEASE</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.12</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.6</version>
</dependency>
2.配置mongodb.properties
这里主要是配置mongodb数据库的一些参数config
#ip
mongo.host=127.0.0.1
#端口
mongo.port=27017
#数据库
mongo.dbname=user
#用户名
mongo.username=cjj
#密码
mongo.password=123456
#一个线程变为可用的最大阻塞数
mongo.connectionsPerHost=8
#线程队列数,它以上面connectionsPerHost值相乘的结果就是线程队列最大值
mongo.threadsAllowedToBlockForConnectionMultiplier=4
#连接超时时间(毫秒)
mongo.connectTimeout=1000
#最大等待时间
mongo.maxWaitTime=1500
#自动重连
mongo.autoConnectRetry=true
#scoket保持活动
mongo.socketKeepAlive=true
#scoket超时时间
mongo.socketTimeout=1500
#读写分离
mongo.slaveOk=true
3.配置mongodb.xml
<?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:context="http://www.springframework.org/schema/context"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xsi:schemaLocation="http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/data/mongo
http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
<!-- 加载mongodb的属性配置文件 -->
<context:property-placeholder location="classpath:mongodb.properties" ignore-unresolvable="true"/> <!-- 定义mongo对象,对应的是mongodb官方jar包中的Mongo,设置ip地址和端口 -->
<mongo:mongo id="mongo" host="${mongo.host}" port="${mongo.port}">
<mongo:options
connections-per-host="${mongo.connectionsPerHost}"
threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}"
connect-timeout="${mongo.connectTimeout}"
max-wait-time="${mongo.maxWaitTime}"
auto-connect-retry="${mongo.autoConnectRetry}"
socket-keep-alive="${mongo.socketKeepAlive}"
socket-timeout="${mongo.socketTimeout}"
slave-ok="${mongo.slaveOk}"
write-number="1"
write-timeout="0"
write-fsync="true"/>
</mongo:mongo>
<mongo:db-factory id="mgFactory"
dbname="${mongo.dbname}"
username="${mongo.username}"
password="${mongo.password}"
mongo-ref="mongo"/> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mgFactory"/>
</bean>
</beans>
4.配置spring-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:task="http://www.springframework.org/schema/task"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.1.xsd"> <aop:aspectj-autoproxy proxy-target-class="true"/> <!--使用注解管理bean -->
<context:annotation-config/> <!-- 扫描com.example下的所有类 -->
<context:component-scan base-package="com.example">
<context:exclude-filter type = "annotation" expression = "org.springframework.stereotype.Controller"/>
</context:component-scan> <import resource="mongoDB.xml"/>
</beans>
5.测试
先创建实体类User
import lombok.Data;
import org.springframework.data.mongodb.core.mapping.Document; @Data
@Document(collection="user")
public class User {
private String id;
private String name;
private String sex;
private Integer age;
}
在创建MongoDBService获取MongoTemplate
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service; import javax.annotation.Resource; @Service("mongoDBService")
public class MongoDBService {
@Resource(name = "mongoTemplate")
private MongoTemplate mongoTemplate;
public <T> T findOne(Query query, Class<T> entityClass){
ApplicationContext context=new ClassPathXmlApplicationContext("mongoDB.xml");
// MongoTemplate mongoTemplate= (MongoTemplate) context.getBean("mongoTemplate");
// 可以直接调用
return mongoTemplate.findOne(query, entityClass);
}
}
然后创建UserService继承MongoDBService
import com.example.entity.User;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service; @Service
public class UserService extends MongoDBService { public User findUserByName(String name){
Criteria criteria = new Criteria();
criteria.andOperator(Criteria.where("name").is("cjj"));
Query query = new Query(criteria);
return findOne(query, User.class);
}
}
最后测试
import com.example.entity.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import javax.annotation.Resource;
@ContextConfiguration({ "classpath:spring-context.xml",
"classpath:mongoDB.xml"})
@RunWith(SpringJUnit4ClassRunner.class)
public class UserServiceTest {
@Resource(name = "userService")
private UserService userService;
@Test
public void test(){
User user = userService.findUserByName("cjj");
System.out.println(user);
}
}
其他实现:
参考:https://blog.csdn.net/feinifi/article/details/83752862
Mongdb和Spring的整合的更多相关文章
- struts2 spring mybatis  整合(test)
		这几天搭了个spring+struts2+mybatis的架子,练练手,顺便熟悉熟悉struts2. 环境:myEclipse10+tomcat7+jdk1.6(1.8的jre报错,所以换成了1.6) ... 
- 【Java EE 学习 79 下】【动态SQL】【mybatis和spring的整合】
		一.动态SQL 什么是动态SQL,就是在不同的条件下,sql语句不相同的意思,曾经在“酒店会员管理系统”中写过大量的多条件查询,那是在SSH的环境中,所以只能在代码中进行判断,以下是其中一个多条件查询 ... 
- 3.springMVC+spring+Mybatis整合Demo(单表的增删该查,这里主要是贴代码,不多解释了)
		前面给大家讲了整合的思路和整合的过程,在这里就不在提了,直接把springMVC+spring+Mybatis整合的实例代码(单表的增删改查)贴给大家: 首先是目录结构: 仔细看看这个目录结构:我不详 ... 
- 由“单独搭建Mybatis”到“Mybatis与Spring的整合/集成”
		在J2EE领域,Hibernate与Mybatis是大家常用的持久层框架,它们各有特点,在持久层框架中处于领导地位. 本文主要介绍Mybatis(对于较小型的系统,特别是报表较多的系统,个人偏向Myb ... 
- spring+websocket整合
		java-websocket的搭建非常之容易,没用框架的童鞋可以在这里下载撸主亲自调教好的java-websocket程序: Apach Tomcat 8.0.3+MyEclipse+maven+JD ... 
- Hibernate  与  Spring  的整合
		刚刚学习了hibernate和Spring的整合,现在来总结一下. 以实现一个功能为例,与大家分享一下整个过程. 需要实现的功能:建立一个Person类,该类包括name,sex,age,birtha ... 
- Spring与Struts2整合VS Spring与Spring MVC整合
		Spring与Struts2整合,struts.xml在src目录下 1.在web.xml配置监听器 web.xml <!-- 配置Spring的用于初始化ApplicationContext的 ... 
- struts2+hibernate-jpa+Spring+maven 整合(1)
		1.0.0 struts2 与 spring 的整合. 1.1.0 新建maven工程 , 编写pom.xml ,这里只需要简单的添加 一个组件就够了: 在myeclipse 生成的pom.xml 添 ... 
- ASP.NET MVC Spring.NET 整合
		请注明转载地址:http://www.cnblogs.com/arhat 在整合这三个技术之前,首先得说明一下整合的步骤,俗话说汗要一口一口吃,事要一件一件做.同理这个三个技术也是.那么在整合之前,需 ... 
随机推荐
- SQLyog连接数据库 提示错误plugin caching_sha2_password could not be loaded
			1.打开mysql cmd 2.执行语句 ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; # ... 
- P2261 bzoj1257 [CQOI2007]余数求和
			一道数论分块首先这类的求和写一下公式∑n%i=∑n-i*(n/i)= ∑n-∑i*(n/i) 前面的好求所以 ans=nk+∑k*(k/i);于是进行分块这里总结一下只要出现除法∑就进行分块由阿尔贝和 ... 
- C++系统学习之三:向量
			标准库类型vector 定义:vector表示对象的集合,其中所有对象的类型都相同. 访问方式:索引 头文件:<vector> 本质:类模板 NOTE: 模板本身不是类或函数,相反可以将模 ... 
- Leetcode  71   简化路径simplify-path(栈)
			给定一个文档 (Unix-style) 的完全路径,请进行路径简化. 例如,path = "/home/", => "/home"path = " ... 
- Controller View 模式
			参考:https://blog.andrewray.me/the-reactjs-controller-view-pattern/ Flux参考:http://www.cnblogs.com/hell ... 
- Taro:使用taro完成小程序开发
			前言:taro是一个可以很好实现一次开发,多端统一的框架,本文只介绍它小程序端开发的一些内容.小程序项目搭建gitup已经有很清楚的说明:https://github.com/NervJS/taro ... 
- perl的bareword
			perl的bareword可能被认为:label . 句柄 .函数 . 普通字符串. 上下文不同,解释器有歧义. 最好用 use strict; use warning; 
- LeetCode(90) Subsets II
			题目 Given a collection of integers that might contain duplicates, nums, return all possible subsets. ... 
- Repo command reference
			Repo command reference In this document init sync upload diff download forall prune start status Rep ... 
- WPF IP地址输入控件的实现
			一.前言 WPF没有内置IP地址输入控件,因此我们需要通过自己定义实现. 我们先看一下IP地址输入控件有什么特性: 输满三个数字焦点会往右移 键盘←→可以空光标移动 任意位置可复制整段IP地址,且支持 ... 
