MongoDB学习-->Spring Data Mongodb-->MongodbTemplate
配置文件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的更多相关文章
- MongoDB学习-->Spring Data Mongodb框架之Repository
application-dev.yml server: port: 8888 mongo: host: localhost port: 27017 timeout: 60000 db: mamabik ...
- mongodb Decimal Spring data mongodb Decimal128 SpringMvc 序列化字符串 json converter
Mongodb 3.4 就开始支持Decimal 类型,解决double的精度问题,但是不太好用,MapReduce的时候Array.sum 也不能计算 Decimal.比较坑,但是聚合可以用 Spr ...
- Spring Data MongoDB 三:基本文档查询(Query、BasicQuery)(一)
一.简单介绍 Spring Data MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一 ...
- Spring Data MongoDB 三:基本文档查询(Query、BasicQuery
一.简介 spring Data MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一篇我 ...
- Spring Data MongoDB 四:基本文档改动(update)(一)
Spring Data MongoDB 三:基本文档查询(Query.BasicQuery)(一) 学习MongoDB 二:MongoDB加入.删除.改动 一.简单介绍 Spring Data Mo ...
- Spring Data MongoDB 五:进阶文档查询(分页、Morphia)(二)
Spring Data MongoDB 三:基本文档查询(Query.BasicQuery)(一) 学习MongoDB 六: MongoDB查询(游标操作.游标信息)(三) 一.简单介绍 Spring ...
- spring data mongodb 配置遇到的几个问题
一. mongodb 2.2版本以上的配置 spring.data.mongodb.uri = mongodb://newlook:newlook@192.168.0.109:27017/admin ...
- mongodb java spring data
关于如何集成spring-data-mongodb到项目中,已经有很多人介绍了,这里只给出几个链接. GETTING STARTED Accessing Data with MongoDB: http ...
- spring data mongodb中,如果对象中的属性不想加入到数据库字段中
spring data mongodb中,如果对象中的属性不想加入到数据库字段中,可加@Transient注解,声明为透明属性 spring data mongodb 官网帮助文档 http://ww ...
随机推荐
- HBase数据模型(1)
HBase数据模型(1) HBase数据模型(2) 1.0 HBase的特性 Table HBase以表(Table)的方式组织数据,数据存储在表中. Row/Column 行(Row)和列(Colu ...
- escape,encodeURI,encodeURIComponent 之间的区别和使用
escape(目前已经被淘汰)是对字符串(string)进行编码(而另外两种是对URL),不会对下列字符编码 ASCII字母 数字 @*/+ 最关键的是,当你需要对URL编码时,请忘记这个方法,这 ...
- datatables添加长按事件
长按事件 $.fn.longPress = function (fn) { var timeout = undefined; var $this = this; for (var i = 0; i & ...
- mysql主从设置windows
MySQL 主从复制是其最重要的功能之一.主从复制是一台服务器充当主服务器,另一台或多台服务器充当从服务器,主机自动复制到从机.对于多级复制,数据服务器即可充当主机,也可充当从机.MySQL 复制的基 ...
- cocos 2d-x 3.0配制环境
cocos2d-x 3.0发布有一段时间了,作为一个初学者,我一直觉得cocos2d-x很坑.每个比较大的版本变动,都会有不一样的项目创建方式,每次的跨度都挺大…… 但是凭心而论,3.0RC版本开始 ...
- python3发送邮件01(简单例子,不带附件)
# -*- coding:utf-8 -*-import smtplibfrom email.header import Headerfrom email.mime.text import MIMET ...
- WinForm 公共控件和属性
Button 按钮 布局 AutoSize 内容超出部分是否扩展到适应尺寸大小 Location 位置坐标 Size 控件大小 行为 Enabled 控件是否启用 visible 控件 ...
- 无法启动 Diagnostic Policy Service(服务错误 1079)的解决方案
问题 在services.msc中手动启动 Diagnostic Policy Service 时,弹出以下提示: ---------------------------服务------------- ...
- 如何处理SAP云平台错误消息 there is no compute unit quota for subaccount
当我试图部署一个应用到SAP云平台的neo环境时: 指定Compute Unit Size为Lite: 点击Deploy按钮,遇到如下错误消息:there is no compute unit quo ...
- Acronis.Disk.Director磁盘分区管理
Acronis.Disk.Director分为for 专业版和服务器版的,我在生产环境中调整Windows2003跳板机使用的是Acronis.Disk.Director Server 10.0.20 ...