SpringBoot 集成MongoDB的简单使用

说明

最近工作接触到的项目用到了 MongoDB;之前没有学习过;这次一边用一边学习;将配置流程以及一些基础的用法总结下来。若以后深入学习再进行更新。

1. MongoDB的配置

1.1 引入依赖

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

1.2 配置

spring.data.mongodb.database = 
spring.data.mongodb.host = 
spring.data.mongodb.password = 
spring.data.mongodb.port = 
spring.data.mongodb.username = 

2. 基本使用

2.1 Bean层

@Document:表示该类交给MongoDB 维护该表
@Id:用在列明上;表示由MongoDB自动生成主键;效率会比自己设置的更高;不过考虑到业务需求使用;自己要另外设置一个业务Id。
@Field:代表一个字段,可以不加,不加的话默认以参数名为列名。例如类名中字段命名为 “Name”,在数据库中映射成“name”。
@Indexed:声明该字段需要加索引,加索引后以该字段为条件检索速度会提高。

@Document(collection = "xxx")
public class xxx {

    @Id
    private String id;
	@Field("name")
    private String Name; 
1.2.2 Dao层

在持久层;写一些数据库操作相关的方法。在这里我们使用原生的MongoTemplate。

 @Autowired
    protected MongoTemplate mongoTemplate;

该模板类中提供了很多方法(如下图):
可以根据自己的实际需求封装或直接注入使用。
在这里插入图片描述

BaseDao 模板

/**
 * 封装公共数据库操作方法
 *
 * @author 
 * @since 
 */
@Slf4j
public class BaseDao<T> {

    protected Class<T> entityClass;

    protected String idKey;

    public BaseDao() {
        //获取Class
        Type type = getClass().getGenericSuperclass();
        Type trueType = ((ParameterizedType) type).getActualTypeArguments()[0];
        this.entityClass = (Class<T>) trueType;
        //获取ID字段
        Field[] fields = entityClass.getDeclaredFields();
        for (Field field : fields) {
            Annotation annotation = field.getAnnotation(Id.class);
            if (annotation != null) {
                idKey = field.getName();
                break;
            }
        }
        if (StringUtils.isEmpty(idKey)) {
            idKey = "_id";
        }
    }

    @Autowired
    protected MongoTemplate mongoTemplate;

    public void save(T obj) {
        mongoTemplate.save(obj);
    }


//    public void save(Collection<T> objs) {
//        mongoTemplate.insert(objs);
//    }

    public T getById(Object id) {
        return mongoTemplate.findById(id, entityClass);
    }

    public List<T> getByIds(Collection<?> ids) {
        Query query = new Query();
        query.addCriteria(Criteria.where(idKey).in(ids));
        return mongoTemplate.find(query, entityClass);
    }

    public List<T> findByField(String field, Object value) {
        if (StringUtils.isEmpty(field) || value == null) {
            return Collections.emptyList();
        }
        Query query = new Query();
        query.addCriteria(Criteria.where(field).is(value));
        return mongoTemplate.find(query, entityClass);
    }

    public T findOneByField(String field, Object value) {
        if (StringUtils.isEmpty(field) || value == null) {
            return null;
        }
        Query query = new Query();
        query.addCriteria(Criteria.where(field).is(value));
        return mongoTemplate.findOne(query, entityClass);
    }

    public void updateById(String id, String field, Object value) {
        Query query = new Query();
        query.addCriteria(Criteria.where(idKey).is(id));
        Update update = new Update();
        update.set(field, value);
        log.info(query.toString());
        mongoTemplate.updateFirst(query, update, entityClass);
    }

    public void updateMultiFieldById(String id, Map<String, Object> fieldValues) {
        Query query = new Query();
        query.addCriteria(Criteria.where(idKey).is(id));
        Update update = new Update();
        for (Map.Entry<String, Object> entry : fieldValues.entrySet()) {
            update.set(entry.getKey(), entry.getValue());
        }
        log.info(query.toString());
        mongoTemplate.updateFirst(query, update, entityClass);
    }

    public void deleteById(String id) {
        if (StringUtils.isEmpty(id)) {
            return;
        }
        Query query = new Query();
        query.addCriteria(Criteria.where(idKey).is(id));
        mongoTemplate.remove(query, entityClass);
    }

    public PageResultInfo<T> getPageResult(Integer pageNum, Integer pageSize) {
        return getPageResult(new Query(), pageNum, pageSize);

    }

    public PageResultInfo<T> getPageResult(Query query, Integer pageNum, Integer pageSize) {
        if (query == null) {
            query = new Query();
        }
        Long count = mongoTemplate.count(query, entityClass);
        query.skip(pageNum * pageSize);
        query.limit(pageSize);
        List<T> items = mongoTemplate.find(query, entityClass);
        return new PageResultInfo<T>(count, pageNum, pageSize, items);
    }
    public List<T> findAll() {
        return mongoTemplate.findAll(entityClass);
    }


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值