MongoDB✧SpringDataMongoDB

SpringDataMongoDB

    使用Spring Data 框架都是按照面向对象思想操作用于的工具。使用Spring Data Mongodb 也是使用面向对象的方式进行操作MongoDB,省略了使用Mongodb的Java客户端API把Document转换为实体类的过程。



一、环境搭建
① 引入依赖

首先启动Linux下的mongodb服务器,关闭防火墙,用IDEA创建一个java项目,引入依赖

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>

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

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

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
      <exclusions>
        <exclusion>
          <groupId>org.junit.vintage</groupId>
          <artifactId>junit-vintage-engine</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
  </dependencies>

② 编写配置
spring:
  data:
    # mongodb配置
    mongodb:
      # 服务器地址
      host: 192.168.168.129
      # 端口
      port: 27017
      # 用户名
      username: uaad
      # 密码
      password: 'uaad'
      # 认证数据库
      authentication-database: admin
      # 操作的数据库
      database: test001

在这里插入图片描述


③ 编写启动类

我们在使用测试环境时,需要使用springboot环境以及配置,这里需要编写启动类,当我们测试类启动时,才会自动启动环境和配置

@SpringBootApplication
public class App {
    public static void main( String[] args ) {
        SpringApplication.run(App.class,args);
    }
}

二、MongoDB基本操作测试
① 测试添加
@SpringBootTest(classes = App.class)
@RunWith(SpringRunner.class)
public class AppTest {

    @Resource
    private MongoTemplate mongoTemplate;
    
    /*添加文档*/
    @Test
    public void insert(){
        People people=new People();
        people.setName("tangsan");
        people.setAge(10);
        People insert = mongoTemplate.insert(people);
        System.out.println("----------------------"+insert);
    }
}

在这里插入图片描述
在这里插入图片描述


② 修改文档
 /*修改文档*/
    @Test
    public void save(){
        People people=new People();
        people.setId("61ae0b73efd95433cb8ddfa9");
        people.setName("zhagnsan");
        //有id就是修改,无id就是添加
        People insert = mongoTemplate.save(people);
        System.out.println("----------------------"+insert);
    }

在这里插入图片描述


③ 更新文档
 /*更新*/
    @Test
    public void update(){
        //创建查询条件
        Criteria criteria=Criteria.where("name").is("wangwu");
        //添加至查询对象
        Query query=new Query(criteria);
        //创建修改内容
        Update update=new Update();
        //修改具体内容
        update.set("name","zhagnsan0001");
        //进行修改
        UpdateResult updateResult = mongoTemplate.updateFirst(query, update, People.class);
        System.out.println(updateResult);
        //修改条数
        System.out.println(updateResult.getMatchedCount());
        //查询条数
        System.out.println(updateResult.getModifiedCount());

    }

在这里插入图片描述


④ 删除文档
/*更具id删除一条文档*/
    @Test
    public void delete(){
        //创建要删除的对象
        People people=new People();
        people.setId("61aeb9a6f6aae50cd747b740");
        people.setName("随便写");
        //依主键为主
        DeleteResult remove = mongoTemplate.remove(people);
        //删除个数
        System.out.println(remove.getDeletedCount());
    }

    /*根据条件删除*/
    @Test
    public void del(){
        //此处的name可以是people的属性名,即便与数据库中的字段名不同,只要field注解标注即可
        Criteria criteria=Criteria.where("name").is("zhangsan");
        Query query=new Query(criteria);
        //删除
        DeleteResult remove = mongoTemplate.remove(query, People.class);
        //删除条数
        System.out.println(remove.getDeletedCount());
    }

    /*通过集合名删除*/
    @Test
    public void delColl(){
        Criteria criteria=Criteria.where("name").is("zhangsan");
        Query query=new Query(criteria);
        //删除
        DeleteResult remove = mongoTemplate.remove(query, "People");
        //删除条数
        System.out.println(remove.getDeletedCount());
    }

在这里插入图片描述
在这里插入图片描述
都差不多

⑤ 查询文档
/*文档查询*/
    @Test
    public void query(){
        List<People> all = mongoTemplate.findAll(People.class);
        all.forEach(System.out::println);
    }

    /*条件查询*/
    @Test
    public void findIf(){
        //创建查询条件
        Criteria criteria=Criteria.where("age").is(50);
        Query query=new Query(criteria);
        //查询
        List<People> all = mongoTemplate.find(query,People.class);
        all.forEach(System.out::println);
    }

    /*主键查询*/
    @Test
    public void findId(){
        People byId = mongoTemplate.findById("61aeb64bd4823564f80dacf5", People.class);
        System.out.println(byId);
    }
    /*正则查询*/
    @Test
    public void regex() {
        // java中正则不需要有//
        Query query = new Query(Criteria.where("name").regex("zhang"));
        List<People> list = mongoTemplate.find(query, People.class);
        list.forEach(System.out::println);
    }

    /*多条件查询*/
    @Test
    public void orAnd() {

        Criteria and1 = new Criteria();
        and1.andOperator(Criteria.where("name").is("zhangsan"), Criteria.where("age").is(50));
        Criteria and2 = new Criteria();
        and2.andOperator(Criteria.where("name").is("lisi"), Criteria.where("age").is(50));

        Criteria c = new Criteria();
        c.orOperator(and1, and2);

        List<People> list = mongoTemplate.find(new Query(c), People.class);
        list.forEach(System.out::println);
    }


    /*排序查询*/
    @Test
    public void order(){
        //创建查询条件
        Query query=new Query(Criteria.where("age").gte(2));
        //排序
        query.with(Sort.by(Sort.Direction.DESC,"age"));
        List<People> people = mongoTemplate.find(query, People.class);
        people.forEach(System.out::println);

    }

    /*分页查询*/
    @Test
    public void pageQuery(){
        Query query=new Query();
        query.with(PageRequest.of(0,2,Sort.Direction.DESC,"age"));
        List<People> people = mongoTemplate.find(query, People.class);
        people.forEach(System.out::println);

    }

分页查询,其余不做展示了
在这里插入图片描述


⑥ 聚合操作
 /*聚合操作*/
    @Test
    public void aggregate02() {
        /**
         * group()参数必须是在People类中存在。
         * 设置group参数,表示按照哪个属性进行分组
         */
        TypedAggregation<People> aggregation = TypedAggregation.newAggregation(People.class,
                Aggregation.group("name").count().as("count"));
        AggregationResults<Map> result = mongoTemplate.aggregate(aggregation, Map.class);
        // 当执行聚合函数返回结果为多行时使用此方法。
        List<Map> list = result.getMappedResults();
        list.forEach(System.out::println);
    }

在这里插入图片描述


  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每日小新

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值