springboot mongodb

pom.xml 导入 

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-mongodb</artifactId>
		</dependency>

application.properties

spring.data.mongodb.uri=mongodb://127.0.0.1:27017/test
DemoEntity.java

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

import java.io.Serializable;

@Document(collection = "demo_collection")
public class DemoEntity implements Serializable {

    @Id
    private Long _id;

    private String title;

    private String description;

    private String by;

    private String url;

    public DemoEntity(long id,String title,String description,String by,String url){
            this._id = id;
            this.title = title;
            this.description = description;
            this.by = by;
            this.url = url;
    }
    public DemoEntity( ){

    }


    public Long getId() {
        return _id;
    }

    public void setId(Long id) {
        this._id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getBy() {
        return by;
    }

    public void setBy(String by) {
        this.by = by;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

}
DemoDao.java

import org.springframework.dao.InvalidDataAccessApiUsageException;
import org.springframework.data.mongodb.core.mapping.Document;

import java.util.List;

public interface DemoDao {
    void saveDemo(DemoEntity demoEntity);
    void updateDemo(DemoEntity demoEntity);
    DemoEntity findDemoById(Long id);
    void updateDemo(Class<?> entityClass, List<DemoEntity> list );
    void updateDemo(String name, List<DemoEntity> list );
    default public String determineCollectionName(Class<?> entityClass) {
        if (entityClass == null) {
            throw new InvalidDataAccessApiUsageException(
                    "No class parameter provided, entity collection can't be determined!");
        }
        String collName = entityClass.getSimpleName();
        if(entityClass.isAnnotationPresent(Document.class)) {
            Document document = entityClass.getAnnotation(Document.class);
            collName = document.collection();
        } else {
            collName = collName.replaceFirst(collName.substring(0, 1)
                    ,collName.substring(0, 1).toLowerCase()) ;
        }
        return collName;
    }
}
DemoDaoImpl.java

import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import com.mongodb.bulk.BulkWriteResult;
import org.springframework.dao.InvalidDataAccessApiUsageException;
import org.springframework.data.mongodb.core.BulkOperations;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.mapping.Document;
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.data.util.Pair;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;


@Component
public class DemoDaoImpl implements DemoDao {

    @Resource
    private MongoTemplate mongoTemplate;

    @Override
    public void saveDemo(DemoEntity demoEntity) {
        mongoTemplate.save(demoEntity);
    }

    @Override
    public void updateDemo(DemoEntity demoEntity) {
        Query query = new Query(Criteria.where("_id").is(demoEntity.getId()));

        Update update = new Update();
        update.set("title", demoEntity.getTitle());
        update.set("description", demoEntity.getDescription());
        update.set("by", demoEntity.getBy());
        update.set("url", demoEntity.getUrl());

        mongoTemplate.updateFirst(query, update, DemoEntity.class);
    }

    @Override
    public DemoEntity findDemoById(Long id) {
        Query query = new Query(Criteria.where("_id").is(id));
        DemoEntity demoEntity = mongoTemplate.findOne(query, DemoEntity.class);
        return demoEntity;
    }

    @Override
    public void updateDemo(Class<?> entityClass,List<DemoEntity> list ) {
        String collectionName = determineCollectionName(entityClass);
        updateDemo(collectionName,list);
    }

    public void updateDemo( String collectionName,List<DemoEntity> list ) {
        BulkOperations operations = mongoTemplate.bulkOps(BulkOperations.BulkMode.ORDERED,collectionName);
        list.forEach(demo->{
            Query query = new Query(Criteria.where("_id").is(demo.getId()));
            Update update = new Update();
            update.set("title", demo.getTitle());
            update.set("description", demo.getDescription());
            update.set("by", demo.getBy());
            update.set("url", demo.getUrl());
            operations.updateOne(query,update);
        });
        operations.execute();
    }


}
MongotestApplication.java

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import java.util.ArrayList;
import java.util.Set;

@SpringBootApplication
public class MongotestApplication implements CommandLineRunner {
	Logger logger = LoggerFactory.getLogger(MongotestApplication.class);
	@Autowired
	DemoDao dao;
	public static void main(String[] args) {
		SpringApplication.run(MongotestApplication.class, args);
	}

	@Override
	public void run(String... args) throws Exception {
		long start = System.currentTimeMillis();
		var tmp = new ArrayList<DemoEntity>();
		String collectionName = dao.determineCollectionName( DemoEntity.class);
		for(long i = 0;i<1000000;i++){
//			dao.saveDemo(new DemoEntity(i,"title " + i,"description "+i," by "+i,"url "+i));
//			dao.findDemoById(i);
//			dao.updateDemo(new DemoEntity(i,"title 2 " + i,"description 2 "+i," by 2 "+i,"url 2 "+i));
			tmp.add(new DemoEntity(i,"title b " + i,"description b "+i," by b "+i,"url b "+i));
			if(tmp.size()>=10){
				dao.updateDemo(collectionName,tmp);
				tmp.clear();
			}
		}
		long end = System.currentTimeMillis();
		logger.info("time = "+(end - start));
	}
}

我的电脑 是 

windos10 / mongodb  默认 配置

1,000,000 数据 测试 时间 为毫秒。
function                  count               time                                    _id 为自定义id
DemoDao.saveDemo        1,000,000           154,411/163,817/155,518
DemoDao.findDemoById    1,000,000           129,393/148,912                              133,718/138,909
DemoDao.updateDemo      1,000,000           185,295/142,472                              168,553/158,445

批量
function                 count              onece               time
DemoDao.updateDemo     1,000,000              1               156,580
DemoDao.updateDemo     1,000,000             10                55,123
DemoDao.updateDemo     1,000,000             50                55,123
DemoDao.updateDemo     1,000,000             100               51,987
DemoDao.updateDemo     1,000,000             500               35,560/34,213/50,586/50,608
DemoDao.updateDemo     1,000,000            1,000              49,833
DemoDao.updateDemo     1,000,000           10,000              51,361

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值