zoukankan      html  css  js  c++  java
  • SpringBoot集成MongoDB

    前言

    之前写了各种nosql数据库的比较,以及相关理论,现在我在本地以springboot+MongoDB框架,探究了具体的运行流程,下面总结一下,分享给大家。

    运行前准备

    安装并启动MongoDB应用程序

    参考网址:

    windows

    http://www.runoob.com/mongodb/mongodb-window-install.html

    linux

    http://www.runoob.com/mongodb/mongodb-linux-install.html

    在MongoDB应用工具中查询数据增删改效果(rebo3t)

    下载地址:https://robomongo.org/download

    lombok安装

    参考网址:https://www.cnblogs.com/fqszywz/p/7733703.html

    代码运行

    代码下载:https://github.com/a123demi/spring-boot-integration

    代码主要讲解

    主要依赖

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

    数据库连接

    spring.application.name=spirngboot-int-mongodbeg
    
    spring.data.mongodb.database=admin
    spring.data.mongodb.host=127.0.0.1
    spring.data.mongodb.password=root
    spring.data.mongodb.port=27017
    spring.data.mongodb.username=root

    通过MongoTemplate来调用各种增删改查的语句,比如

            Query query=new Query(Criteria.where("userName").is(userName));
            UserEntity user =  mongoTemplate.findOne(query , UserEntity.class);

    涉及的主要关键函数有

    
    mongoTemplate.save(user);
    
    mongoTemplate.remove(query,UserEntity.class);
    
    Update update= new Update().set("userName", user.getUserName()).set("passWord", user.getPassWord());
    //更新查询返回结果集的第一条
    WriteResult result =mongoTemplate.updateFirst(query,update,UserEntity.class);
    
    Query query=new Query(Criteria.where("userName").is(userName));
    UserEntity user =  mongoTemplate.findOne(query , UserEntity.class);

     高级查询

    分页查询

     //利用工具类拼装分页信息 
     SpringbootMongoDBPageable pageable = new SpringbootMongoDBPageable(); 
     MongoDBPageModel pm=new MongoDBPageModel(); 
     pm.setPagesize(3);
     pm.setPagenumber(1); 
     List<Order> orders = new ArrayList<>();
     //排序信息
     orders.add(new Order(Direction.DESC, "age"));
     Sort sort = new Sort(orders);
     pm.setSort(sort);
     pageable.setPage(pm);
     //拼装查询信息
     Query query = new Query();
     Criteria criteria = new Criteria();
     query.addCriteria(criteria.where("age").gte(6).lte(18));
     //检索6-18岁的
     query.addCriteria(criteria.where("name").regex("文"));
     //模糊查询名字
     Long count = mongoTemplate.count(query, OrdersData.class);
     //查询总记录数
     List<Entry> list = mongoTemplate.find(query.with(pageable), Entry.class);
    //分页聚合查询(多表多条件关联分页查询)
     //mongodb中有两个表,一个是人物表 一个是宠物表,一个人可以有多个宠物
     //人物表字段为 String id, Integer age,String remark;
     //宠物表字段为 String id, String manId,String age,String remark;
     //拼装分页信息
     SpringbootMongoDBPageable pageable = new SpringbootMongoDBPageable();
     MongoDBPageModel pm=new MongoDBPageModel();
     pm.setPagesize(2);
     pm.setPagenumber(1);
     List<Order> orders = new ArrayList<>();
     //排序
     orders.add(new Order(Direction.DESC, "age"));
     Sort sort = new Sort(orders);
     pm.setSort(sort);
     pageable.setPage(pm);
     //拼装关联信息
     LookupOperation lookupOperation = LookupOperation.newLookup(). from("dogData"). //关联表名
     localField("_id"). //关联字段
     foreignField("manId").//主表关联字段对应的次表字段
     as("dogs");//查询结果集合名
     //拼装具体查询信息
     //次表
     Criteria ordercri = Criteria.where("dogs").not().size(0);//只查询有宠物的人
     ordercri.and("age").gte(1).lte(5);//只查询1岁到5岁的宠物
     AggregationOperation match = Aggregation.match(ordercri);
     //主表
     Criteria qqq=Criteria.where("name").regex("文");//只查询名字中带有文的人
     AggregationOperation match1= Aggregation.match(qqq);
     //分页查询
     Aggregation aggregation = Aggregation.newAggregation(match1,lookupOperation,match,Aggregation.sort(pageable.getSort()),//排序 Aggregation.skip(pageable.getPageNumber()>1?(pageable.getPageNumber()-1)*pageable.getPageSize():0),//pagenumber
     Aggregation.limit(pageable.getPageSize()));//pagesize
     //总数查询
     Aggregation counts = Aggregation.newAggregation(match1,lookupOperation,match).; int count = mongoTemplate.aggregate(counts, "manEntry", BasicDBObject.class).getMappedResults().size(); List<BasicDBObject> results = mongoTemplate.aggregate(aggregation, "manEntry", BasicDBObject.class).getMappedResults(); //查询出的结果集为BasicDBObject类型
     //解析过程
     for (BasicDBObject b :results ) { 
     //转化为jsonobject对象
     JSONObject jsonObject = new JSONObject(b);
     String id = jsonObject.get("id").toString();
     Integer age = ((int) jsonObject.get("age")); 
     String remark = jsonObject.get("remark").toString(); 
     //转化为jsonarray 
     JSONArray dogs = jsonObject.getJSONArray("dogs");
     if (dogs.size() > 0) {
     for (int i = 0; i < dogs.size(); i++) { 
     JSONObject job = dogs.getJSONObject(i);
     String dogId = job.get("id").toString(); 
     String manId = job.get("manId").toString();
     } 
     } 
     } 
     } 

     可参考网址:https://blog.csdn.net/weixin_39804646/article/details/82155898#commentBox

  • 相关阅读:
    php 生成唯一订单号
    易语言的软件乱码
    Python正则
    python3.6 安装
    python发送邮件
    python 字典生成sql语句
    python xpath
    Python pip安装Scrapy,报错Twisted
    简单验证码识别
    python mysqldb 返回字典
  • 原文地址:https://www.cnblogs.com/yanduanduan/p/10578254.html
Copyright © 2011-2022 走看看