配置文件application-dev.yml:

server:
port: 8888

mongo:
host: localhost
port: 27017
timeout: 60000
db: mamabike

配置类MongoDBConfiguration:

package com.tangzhe.configuration;

import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.ServerAddress;
import com.tangzhe.autoid.SaveMongoEventListener;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;
import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper;
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
import org.springframework.data.mongodb.gridfs.GridFsTemplate; /**
* Created by 唐哲
* 2018-03-13 17:20
* MongoDB配置
*/
@Configuration
@ConfigurationProperties(prefix = "mongo")
@Data
public class MongoDBConfiguration { //mongodb服务地址
private String host; //mongodb服务端口号
private Integer port; //连接超时
private Integer timeout; //mongodb数据库名
private String db; /**
* 配置MongoDB模板
*/
@Bean
public MongoTemplate mongoTemplate(SimpleMongoDbFactory mongoDbFactory,
MappingMongoConverter mappingMongoConverter) {
return new MongoTemplate(mongoDbFactory, mappingMongoConverter);
} /**
* 配置自增ID监听器
*/
@Bean
public SaveMongoEventListener saveMongoEventListener() {
return new SaveMongoEventListener();
} /**
* 配置GridFs模板,实现文件上传下载
*/
@Bean
public GridFsTemplate gridFsTemplate(SimpleMongoDbFactory mongoDbFactory,
MappingMongoConverter mappingMongoConverter) {
return new GridFsTemplate(mongoDbFactory, mappingMongoConverter);
} /**
* 配置mongoDbFactory
*/
@Bean
public SimpleMongoDbFactory mongoDbFactory() {
MongoClientOptions options = MongoClientOptions.builder().connectTimeout(timeout).build();
MongoClient client = new MongoClient(new ServerAddress(host, port), options);
return new SimpleMongoDbFactory(client, db);
} /**
* 配置mongoMappingContext
*/
@Bean
public MongoMappingContext mongoMappingContext() {
return new MongoMappingContext();
} /**
* 配置defaultMongoTypeMapper
*/
@Bean
public DefaultMongoTypeMapper defaultMongoTypeMapper() {
//去掉_class字段
return new DefaultMongoTypeMapper(null);
} /**
* 配置mappingMongoConverter
*/
@Bean
public MappingMongoConverter mappingMongoConverter(SimpleMongoDbFactory mongoDbFactory,
MongoMappingContext mongoMappingContext,
DefaultMongoTypeMapper defaultMongoTypeMapper) {
MappingMongoConverter mappingMongoConverter = new MappingMongoConverter(mongoDbFactory, mongoMappingContext);
mappingMongoConverter.setTypeMapper(defaultMongoTypeMapper);
return mappingMongoConverter;
} }

测试类:

 package com.tangzhe.mongodb;

 import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; /**
* Created by 唐哲
* 2018-03-13 17:25
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class BaseTest {
}

实体类:

 package com.tangzhe.mongodb;

 import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field; import java.util.Date;
import java.util.List; /**
* Created by 唐哲
* 2018-03-13 17:40
*/
@Document(collection = "article_info")
@Data
public class Article { @Id
private String id; @Field("title")
private String title; @Field("v_count")
private Long visitCount; @Field("tags")
private List<String> tags; @Field("add_time")
private Date addTime; }

测试mongodbTemplate:

 package com.tangzhe.mongodb.mongotemplate;

 import com.tangzhe.mongodb.Article;
import com.tangzhe.mongodb.BaseTest;
import org.bson.types.ObjectId;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
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 java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List; /**
* Created by 唐哲
* 2018-03-13 17:27
*/
public class MongoTemplateTest extends BaseTest { @Autowired
private MongoTemplate mongoTemplate; /**
* 查询某数据库中所有集合(表)
*/
//@Test
public void findAllCollections() {
mongoTemplate.getCollectionNames().forEach(System.out::println);
} /**
* 批量插入数据
*/
//@Test
public void insertBatch() {
List<Article> datas = new ArrayList<>();
for(int i=0; i<10; i++) {
Article article = new Article();
article.setTitle("猿天地实战课程" + i);
article.setVisitCount(10L);
article.setTags(Arrays.asList("java", "python", "c#"));
article.setAddTime(new Date());
datas.add(article);
} mongoTemplate.insert(datas, Article.class);
} /**
* 修改数据
*/
@Test
public void update() {
//根据title修改
// mongoTemplate.updateFirst(
// Query.query(
// new Criteria("title").is("猿天地实战课程0")
// ),
// Update.update("visitCount", 100L),
// Article.class
// ); //存在就修改不存在就插入
// mongoTemplate.upsert(
// Query.query(
// new Criteria("title").is("猿天地实战课程10")
// ),
// Update.update("visitCount", 200L),
// Article.class
// ); //修改title,并将visitCount加1
// mongoTemplate.updateFirst(
// Query.query(
// new Criteria("title").is("猿天地实战课程0")
// ),
// Update.update("title", "猿天地实战课程").inc("visitCount", 1),
// Article.class
// ); //如果传入的是集合名称,则需要写苦衷原始的key名称,如果是实体类就写类中的字段名称
// mongoTemplate.updateFirst(
// Query.query(
// new Criteria("title").is("猿天地实战课程")
// ),
// Update.update("v_count", 1L),
// "article_info"
// ); //删除key
mongoTemplate.updateFirst(
Query.query(
new Criteria("title").is("猿天地实战课程")
),
new Update().unset("visitCount"),
Article.class
);
} /**
* 删除数据
*/
@Test
public void delete() {
// mongoTemplate.remove(
// Query.query(
// Criteria.where("title").is("猿天地实战课程")
// ),
// Article.class
// ); //删除一条,并且返回这条数据
Article article = mongoTemplate.findAndRemove(
Query.query(
Criteria.where("title").is("猿天地实战课程10")
),
Article.class
);
System.out.println(article); //批量删除,并且返回数据列表
List<Article> articles = mongoTemplate.findAllAndRemove(
Query.query(
Criteria.where("title").is("猿天地实战课程10")
),
Article.class
); //删除集合(表)的两种方式
mongoTemplate.dropCollection(Article.class);
mongoTemplate.dropCollection("article_info"); //删除数据库
mongoTemplate.getDb().dropDatabase();
} /**
* 查询数据
*/
@Test
public void select() {
//数量查询
long count = mongoTemplate.count(
Query.query(
Criteria.where("visitCount").is(10)
),
Article.class
);
System.out.println(count); //查询第一条
Article article = mongoTemplate.findOne(
Query.query(
Criteria.where("visitCount").is(10)
),
Article.class
);
System.out.println(article); //查询所有
List<Article> articles = mongoTemplate.findAll(Article.class);
System.out.println(articles.size()); //带条件查询
mongoTemplate.find(
Query.query(
Criteria.where("visitCount").is(100)
),
Article.class
); //如果在大数据量的情况下,最好是排序,记住你上次最后一条数据的ID,
//然后就是大于上次的ID,然后limit页数
articles = mongoTemplate.find(
Query.query(
Criteria.where("visitCount").is(100)
).skip(0).limit(10),
Article.class
);
System.out.println(articles.size()); //根据ID查询
mongoTemplate.findById(new ObjectId("5aa79ddecdb51518c073a247"), Article.class); //in查询
articles = mongoTemplate.find(
Query.query(
Criteria.where("visitCount").in(100, 200, 300)
),
Article.class
);
System.out.println(articles.size()); //or查询
articles = mongoTemplate.find(
Query.query(
new Criteria().orOperator(
Criteria.where("visitCount").is(100),
Criteria.where("visitCount").is(200),
Criteria.where("visitCount").is(300)
)
),
Article.class
);
System.out.println(articles.size());
} }

MongoDB学习-->Spring Data Mongodb-->MongodbTemplate的更多相关文章

  1. MongoDB学习-->Spring Data Mongodb框架之Repository

    application-dev.yml server: port: 8888 mongo: host: localhost port: 27017 timeout: 60000 db: mamabik ...

  2. mongodb Decimal Spring data mongodb Decimal128 SpringMvc 序列化字符串 json converter

    Mongodb 3.4 就开始支持Decimal 类型,解决double的精度问题,但是不太好用,MapReduce的时候Array.sum 也不能计算 Decimal.比较坑,但是聚合可以用 Spr ...

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

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

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

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

  5. Spring Data MongoDB 四:基本文档改动(update)(一)

    Spring Data MongoDB 三:基本文档查询(Query.BasicQuery)(一) 学习MongoDB 二:MongoDB加入.删除.改动 一.简单介绍 Spring Data  Mo ...

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

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

  7. spring data mongodb 配置遇到的几个问题

    一. mongodb 2.2版本以上的配置 spring.data.mongodb.uri = mongodb://newlook:newlook@192.168.0.109:27017/admin ...

  8. mongodb java spring data

    关于如何集成spring-data-mongodb到项目中,已经有很多人介绍了,这里只给出几个链接. GETTING STARTED Accessing Data with MongoDB: http ...

  9. spring data mongodb中,如果对象中的属性不想加入到数据库字段中

    spring data mongodb中,如果对象中的属性不想加入到数据库字段中,可加@Transient注解,声明为透明属性 spring data mongodb 官网帮助文档 http://ww ...

随机推荐

  1. 集合(List、Set)

    第19天 集合 第1章 List接口 我们掌握了Collection接口的使用后,再来看看Collection接口中的子类,他们都具备那些特性呢? 接下来,我们一起学习Collection中的常用几个 ...

  2. Windows 8 / win8 拼音输入法/搜狗输入法 visual Studio 2010 / VS2010 不兼容

    是visual assist X 的问题,更新到VA_X_Setup 2001 解决问题 老版本处理:Tools-->Extension Manager-->Uninstall

  3. 常用css和js组件

    1 . input框中插入图标 <div class="col-sm-12 col-xs-12 setLineHeight"> <div class=" ...

  4. 系统有问题基本出在数据库上,web层无状态

    系统有问题基本出在数据库上,web层无状态.

  5. 将一个字符与对应Ascii码互转

    package nicetime.com.practies; /** * Java中将一个字符与对应Ascii码互转 1 byte = 8bit 可以表示 0-127 */public class G ...

  6. Python3中requests库学习01(常见请求示例)

    1.请求携带参数的方式1.带数据的post data=字典对象2.带header的post headers=字典对象3.带json的post json=json对象4.带参数的post params= ...

  7. window对象的几个重要方法

    <!DOCTYPE html><html><head><meta charset="UTF-8"><title>Java ...

  8. COGS 1215. [Tyvj Aug11] 冗余电网

    ★   输入文件:ugrid.in   输出文件:ugrid.out   简单对比时间限制:1 s   内存限制:128 MB TYVJ八月月赛提高组第2题 测试点数目:5 测试点分值:20 --内存 ...

  9. Ubuntu下apt-get与pip安装命令的区别

    在ubuntu服务器下安装包的时候,经常会用到sudo apt-get install 包名 或 sudo pip install 包名,那么两者有什么区别呢? 1.区别pip用来安装来自PyPI(h ...

  10. Android中一个关于ListView的奇怪问题

    今天在做项目的时候发现了一个比较奇怪的问题,是关于ListView的,即ListView的android:height属性会影响程序中ListView的getView()方法的调用次数,如果设置Lis ...