Spring Data MongoDB 一:入门篇(环境搭建、简单的CRUD操作)

时间:2022-03-24 01:26:01

一.简介

Spring Data  MongoDB 项目提供与MongoDB文档数据库的集成。Spring Data MongoDB POJO的关键功能区域为中心的模型与MongoDB的DBCollection轻松地编写一个存储库交互数据访问。

二.Spring Data MongoDB的配置以及下载对应的Jar

1.安装MongoDb数据库,我们在上一篇就已经介绍过了,这边就不在介绍了,MongoDB 入门(安装与配置)

2.下载spring的spring-data的子项目两个jar,分别是spring-data-commons和spring-data-mongodb

http://projects.spring.io/spring-data-mongodb/

我这边下载是两个jar分别是:

spring-data-commons-1.7.2.RELEASE.jar

spring-data-mongodb-1.4.2.RELEASE.jar

或者maven获取:

<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.0.3</version>
</dependency> <dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.7.0.RELEASE</version>
</dependency>

  

   3.下载mongoDb的java驱动jar包

http://central.maven.org/maven2/org/mongodb/mongo-java-driver/

这边有很多版本,下载自己对应得版本,我下载是:

mongo-java-driver-2.9.3.jar

Spring Data MongoDB 一:入门篇(环境搭建、简单的CRUD操作)

 4.用Java测试一下MongoDB是否能正常连接

运行能获取test数据库下的集合,说明能正常连接数据库

Spring Data MongoDB 一:入门篇(环境搭建、简单的CRUD操作)

5.Spring的配置文件

1)applicationContext-mongo.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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context" 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/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.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/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package="com.mongo" />
<!-- 获取配置资源 -->
<context:property-placeholder location="classpath:jdbc.properties" /> <bean class="cn.mongo.util.SpringContextUtil"></bean> <mongo:mongo id="mongo" replica-set="${mongo.replicaSet}">
<!--
connections-per-host: 每个主机答应的连接数(每个主机的连接池大小),当连接池被用光时,会被阻塞住
max-wait-time: 被阻塞线程从连接池获取连接的最长等待时间(ms)
connect-timeout:在建立(打开)套接字连接时的超时时间(ms)
socket-timeout:套接字超时时间;该值会被传递给Socket.setSoTimeout(int)
slave-ok:指明是否答应驱动从次要节点或者奴隶节点读取数据
-->
<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="${mongo.writeNumber}"
write-timeout="${mongo.riteTimeout}"
write-fsync="${mongo.writeFsync}"/>
</mongo:mongo>
<!-- 设置使用的数据库 名-->
<mongo:db-factory dbname="test" mongo-ref="mongo"/>
<!-- mongodb的模板 -->
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
</bean>
</beans>  

2)jdbc.properties

mongo.replicaSet=127.0.0.1:27017
mongo.connectionsPerHost=8
mongo.threadsAllowedToBlockForConnectionMultiplier=4
mongo.connectTimeout=1000
mongo.maxWaitTime=1500
mongo.autoConnectRetry=true
mongo.socketKeepAlive=true
mongo.socketTimeout=1500
mongo.slaveOk=true
mongo.writeNumber=1
mongo.riteTimeout=0
mongo.writeFsync=true

说明:

我们可以上官方网查看文档http://docs.spring.io/spring-data/data-mongo/docs/1.7.0.RC1/reference/html/#mongodb-connectors,这里面有说明怎么配置

Spring Data MongoDB 一:入门篇(环境搭建、简单的CRUD操作)

三.Spring 实现MongoDB的CRUD操作

   1.实现一个基础接口,是比较通用的 MongoBase.java类

public interface MongoBase<T> {
//添加
public void insert(T object,String collectionName);
//根据条件查找
public T findOne(Map<String,Object> params,String collectionName);
//查找所有
public List<T> findAll(Map<String,Object> params,String collectionName);
//修改
public void update(Map<String,Object> params,String collectionName);
//创建集合
public void createCollection(String collectionName);
//根据条件删除
public void remove(Map<String,Object> params,String collectionName); }

  

   2.实现一个实体类,我这边实现了User类

@Document注解,表示这个POJO最终要持久化为MongoDB中的document

@Document
public class User implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private String id;
private String name;
private int age;
private String password; public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
} }

  

 3.实现UserDao类,就是实现User自己操作数据库的接口,这个UserDao也继承了MongoBase接口,我们这边UserDao没实现其他额外的接口

public interface UserDao extends MongoBase<User>{  

}

 4.实现UserDaoImpl具体类,这边是实际操作数据库

@Repository("userDaoImpl")
public class UserDaoImpl implements UserDao { @Resource
private MongoTemplate mongoTemplate; @Override
public void insert(User object,String collectionName) {
mongoTemplate.insert(object, collectionName);
} @Override
public User findOne(Map<String,Object> params,String collectionName) {
return mongoTemplate.findOne(new Query(Criteria.where("id").is(params.get("id"))), User.class,collectionName);
} @Override
public List<User> findAll(Map<String,Object> params,String collectionName) {
List<User> result = mongoTemplate.find(new Query(Criteria.where("age").lt(params.get("maxAge"))), User.class,collectionName);
return result;
} @Override
public void update(Map<String,Object> params,String collectionName) {
mongoTemplate.upsert(new Query(Criteria.where("id").is(params.get("id"))), new Update().set("name", params.get("name")), User.class,collectionName);
} @Override
public void createCollection(String name) {
mongoTemplate.createCollection(name);
} @Override
public void remove(Map<String, Object> params,String collectionName) {
mongoTemplate.remove(new Query(Criteria.where("id").is(params.get("id"))),User.class,collectionName);
}

说明:

我们可以上官方网查看文档http://docs.spring.io/spring-data/data-mongo/docs/1.7.0.RC1/reference/html/#mongodb-connectors

mongoTemplate.upsert

Spring Data MongoDB 一:入门篇(环境搭建、简单的CRUD操作)

这边update里面提供了很多功能,可以根据条件进行修改,Criteria这个类也提供了where 、and、lt等,我们在查询年龄大于30的查出来,mongoTemplate.find(new Query(Criteria.where("age").lt(params.get("maxAge"))), User.class,collectionName);Criteria还很多

如图所示:

Spring Data MongoDB 一:入门篇(环境搭建、简单的CRUD操作)

 4.实现测试类

我们这边为了节省时间,就没写服务类,我们直接调用dao就可以了,实现了TestUser.java类

  1)添加并根据条件查找列表

public class TestUser {  

    private static UserDao userDaoImpl;
private static ClassPathXmlApplicationContext app;
private static String collectionName;
@BeforeClass
public static void initSpring() {
try {
app = new ClassPathXmlApplicationContext(new String[] { "classpath:applicationContext-mongo.xml",
"classpath:spring-dispatcher.xml" });
userDaoImpl = (UserDao) app.getBean("userDaoImpl");
collectionName ="users";
} catch (Exception e) {
e.printStackTrace();
}
} @Test
public void testAdd()
{ //添加一百个user
for(int i=0;i<100;i++){
User user =new User();
user.setId(""+i);
user.setAge(i);
user.setName("zcy"+i);
user.setPassword("zcy"+i);
userDaoImpl.insert(user,collectionName);
}
Map<String,Object> params=new HashMap<String,Object>();
params.put("maxAge", 50);
List<User> list=userDaoImpl.findAll(params,collectionName);
System.out.println("user.count()=="+list.size());
}

  

运行一下,我们能正常查找年龄大于50的

Spring Data MongoDB 一:入门篇(环境搭建、简单的CRUD操作)

 2)根据ID进行修改

    @Test
ublic void testUdate(){
Map<String,Object> params=new HashMap<String,Object>();
params.put("id", "1");
User user=userDaoImpl.findOne(params, collectionName);
System.out.println("user.name==="+user.getName());
System.out.println("=============update==================");
params.put("name", "hello");
userDaoImpl.update(params, collectionName);
user=userDaoImpl.findOne(params, collectionName);
System.out.println("user.name==="+user.getName());

  

Spring Data MongoDB 一:入门篇(环境搭建、简单的CRUD操作)

  3)根据ID删除对应的数据

@Test
ublic void testRemove(){
Map<String,Object> params=new HashMap<String,Object>();
params.put("id", "2");
userDaoImpl.remove(params, collectionName);
User user=userDaoImpl.findOne(params, collectionName);
System.out.println("user=="+user);

 Spring Data MongoDB 一:入门篇(环境搭建、简单的CRUD操作)

Spring Data MongoDB 一:入门篇(环境搭建、简单的CRUD操作)的更多相关文章

  1. hibernate入门-基本配置及简单的crud操作

    框架来说主要是需要写大量的配置文件,hibernate相比mybatis来说更强大,移植性更好: 1.类和数据库的映射配置:配置文件命名一般--类名.hbm.xml (user.hbm.xml),与实 ...

  2. spring boot&lpar;一&rpar;:入门篇

    构建微服务:Spring boot 入门篇 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...

  3. Spring Data MongoDB 分页查询

    在上篇文章 Spring Data MongoDB 环境搭建 基础上进行分页查询 定义公用分页参数类,实现 Pageable 接口 import java.io.Serializable; impor ...

  4. 新手嘛,先学习下 Vue2&period;0 新手入门 — 从环境搭建到发布

    Vue2.0 新手入门 — 从环境搭建到发布 转自:http://www.runoob.com/w3cnote/vue2-start-coding.html 具体文章详细就不搬了,步骤可过去看,我这就 ...

  5. Spring Boot&lpar;一&rpar;:入门篇&plus;前端访问后端

    转自:Spring Boot(一):入门篇 什么是Spring Boot Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发 ...

  6. Spring Data MongoDB 三:基本文档查询(Query、BasicQuery)(一)

    一.简单介绍 Spring Data  MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一 ...

  7. Spring Data MongoDB 三:基本文档查询(Query、BasicQuery

    一.简介 spring Data  MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一篇我 ...

  8. Spring Data MongoDB 五:进阶文档查询(分页、Morphia)(二)

    Spring Data MongoDB 三:基本文档查询(Query.BasicQuery)(一) 学习MongoDB 六: MongoDB查询(游标操作.游标信息)(三) 一.简单介绍 Spring ...

  9. spring data mongodb CURD

    一.添加 Spring  Data  MongoDB 的MongoTemplate提供了两种存储文档方式,分别是save和insert方法,这两种的区别: (1)save :我们在新增文档时,如果有一 ...

随机推荐

  1. c&comma;c&plus;&plus;函数返回多个值的方法

    最近遇到一个问题,需要通过一个函数返回多个值.无奈C,C++不能返回多个值.所以就想有什么方法可以解决. 网上方法比较杂乱,一般有两种替代做法: 1. 利用函数的副作用, 返回值在函数外定义, 在函数 ...

  2. 第2章 数字之魅——寻找最大的K个数

    寻找最大的K个数 问题描述 在面试中,有下面的问答: 问:有很多个无序的数,我们姑且假定它们各不相等,怎么选出其中最大的若干个数呢? 答:可以这样写:int array[100] …… 问:好,如果有 ...

  3. zoj 2193 poj 2585 Window Pains

    拓扑排序. 深刻体会:ACM比赛的精髓之处不在于学了某个算法或数据结构,而在于知道这个知识点但不知道这个问题可以用这个知识去解决!一看题目,根本想不到是拓扑排序.T_T...... #include& ...

  4. ArcGIS三种方式打断相交线------拓扑法

    拓扑法:有多个layer图层相交线,选用拓扑法,将多个图层相交线打断. 新建拓扑结构: (1)单击新建"Nfg.gdb"数据库文件: (2)单击新建"XX"集合 ...

  5. Markdown几个简单的例子

    定义型列表 语法说明: 定义型列表由名词和解释组成.一行写上定义,紧跟一行写上解释. 解释的写法:紧跟一个缩进(Tab) Markdown : 轻量级文本标记语言,可以转换成html,pdf等格式(左 ...

  6. SSM-MyBatis-13:Mybatis中多条件查询

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 实体类 public class Book { private Integer bookID; private ...

  7. idea打开项目,没有项目文件,文件报红

    删除项目文件夹中的.idea文件,重启idea,再执行如下操作.

  8. 10、DOM(文档对象模型)

    1.认识DOM html    骨架 css     装修 javascript 物业 ==DOM 打破上述三者的通道.== [注]script标签一般情况下要写在head标签. <div id ...

  9. HBase和MongoDB的区别

    Mongodb用于存储非结构化数据,尤其擅长存储json格式的数据.存储的量大概在10亿级别,再往上性能就下降了,除非另外分库.Hbase是架构在hdfs上的列式存储,擅长rowkey的快速查询,但模 ...

  10. 【Android】开源项目UniversalImageLoader及开源框架ImageLoader

    UniversalImageLoader 简单来说就是用于加载图片的一个开源项目,在其项目介绍中是这么写的 支持多线程图片加载 提供丰富的细节配置,比如线程池大小,HTPP请求项,内存和磁盘缓存,图片 ...