springboot2 连接mongodb4

本文详细介绍如何在SpringBoot项目中整合MongoDB,包括pom.xml依赖配置、application.yml连接配置、实体类定义、MongoRepository接口实现CRUD操作,以及基于MongoTemplate的原生操作示例。

Win10 安装 MongoDB4

创建项目时引入mongodb

项目结构

pom.xml

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

application.yml

spring:
  data:
    mongodb:
      database: spring
      uri: mongodb://127.0.0.1:27017

Programmer.java (Bean)

package com.heibaiying.springboot.bean;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;

import java.util.Date;

/**
 * @author : heibaiying
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Programmer {

    @Id
    private String name;

    private Integer age;

    private Float salary;

    private Date birthday;

    private Boolean flag;
}

ProgrammerRepository.java (Dao)

package com.heibaiying.springboot.repository;

import com.heibaiying.springboot.bean.Programmer;
import org.springframework.data.mongodb.repository.MongoRepository;

/**
 * @author : heibaiying
 * @description : jpa 方式查询 对于mongo而言 更推荐这种查询方式 比起原生的语法更加简洁
 */
public interface ProgrammerRepository extends MongoRepository<Programmer, String> {

    void deleteAllByName(String name);

    Programmer findAllByName(String names);

    Programmer findByNameAndAge(String name, Integer age);

}

MongoJPATests.java (基于MongoRepository的方式)

package com.heibaiying.springboot;

import com.heibaiying.springboot.bean.Programmer;
import com.heibaiying.springboot.repository.ProgrammerRepository;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Optional;

@RunWith(SpringRunner.class)
@SpringBootTest
public class MongoJPATests {

    @Autowired
    private ProgrammerRepository repository;

    @Test
    public void insert() {
        // 单条插入
        repository.save(new Programmer("python", 23, 21832.34f, new Date(), true));
        // 批量插入
        List<Programmer> programmers = new ArrayList<Programmer>();
        programmers.add(new Programmer("java", 21, 52200.21f, new Date(), false));
        programmers.add(new Programmer("Go", 34, 500.21f, new Date(),false));
        repository.saveAll(programmers);
    }

    // 条件查询
    @Test
    public void select() {
        Programmer java = repository.findByNameAndAge("java", 21);
        Assert.assertEquals(java.getSalary(), 52200.21f, 0.01);
    }


    // 更新数据
    @Test
    public void MUpdate() {
        repository.save(new Programmer("Go", 8, 500.21f, new Date(), false));
        Programmer go = repository.findAllByName("Go");
        Assert.assertEquals(go.getAge(), new Integer(8));
    }

    // 删除指定数据
    @Test
    public void delete() {
        repository.deleteAllByName("python");
        Optional<Programmer> python = repository.findById("python");
        Assert.assertFalse(python.isPresent());
    }

}

MongoOriginalTests.java (基于MongoTemplate的方式)

package com.heibaiying.springboot;

import com.heibaiying.springboot.bean.Programmer;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
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.test.context.junit4.SpringRunner;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import static org.springframework.data.mongodb.core.query.Criteria.where;
import static org.springframework.data.mongodb.core.query.Query.query;
import static org.springframework.data.mongodb.core.query.Update.update;

@RunWith(SpringRunner.class)
@SpringBootTest
public class MongoOriginalTests {

    @Autowired
    private MongoTemplate mongoTemplate;

    @Test
    public void insert() {
        // 单条插入
        mongoTemplate.insert(new Programmer("xiaoming", 12, 5000.21f, new Date(),true));
        List<Programmer> programmers = new ArrayList<Programmer>();
        // 批量插入
        programmers.add(new Programmer("xiaohong", 21, 52200.21f, new Date(),false));
        programmers.add(new Programmer("xiaolan", 34, 500.21f, new Date(),false));
        mongoTemplate.insert(programmers, Programmer.class);
    }

    // 条件查询
    @Test
    public void select() {
        Criteria criteria = new Criteria();
        criteria.andOperator(where("name").is("xiaohong"), where("age").is(21));
        Query query = new Query(criteria);
        Programmer one = mongoTemplate.findOne(query, Programmer.class);
        System.out.println(one);
    }


    // 更新数据
    @Test
    public void MUpdate() {
        UpdateResult updateResult = mongoTemplate.updateMulti(query(where("name").is("xiaoming")), update("age", 35), Programmer.class);
        System.out.println("更新记录数:" + updateResult.getModifiedCount());
    }

    // 删除指定数据
    @Test
    public void delete() {
        DeleteResult result = mongoTemplate.remove(query(where("name").is("xiaolan")), Programmer.class);
        System.out.println("影响记录数:" + result.getDeletedCount());
        System.out.println("是否成功:" + result.wasAcknowledged());
    }

}

jpa支持很多方法命名规则来自动生成查询语句

KeywordSampleLogical result
AfterfindByBirthdateAfter(Date date){“birthdate” : {“$gt” : date}}
GreaterThanfindByAgeGreaterThan(int age){“age” : {“$gt” : age}}
GreaterThanEqualfindByAgeGreaterThanEqual(int age){“age” : {“$gte” : age}}
BeforefindByBirthdateBefore(Date date){“birthdate” : {“$lt” : date}}
LessThanfindByAgeLessThan(int age){“age” : {“$lt” : age}}
LessThanEqualfindByAgeLessThanEqual(int age){“age” : {“$lte” : age}}
BetweenfindByAgeBetween(int from, int to){“age” : {“$gt” : from, “$lt” : to}}
InfindByAgeIn(Collection ages){“age” : {“$in” : [ages…​]}}
NotInfindByAgeNotIn(Collection ages){“age” : {“$nin” : [ages…​]}}
IsNotNull, NotNullfindByFirstnameNotNull(){“firstname” : {“$ne” : null}}
IsNull, NullfindByFirstnameNull(){“firstname” : null}
Like, StartingWith, EndingWithfindByFirstnameLike(String name){“firstname” : name} (name as regex)
NotLike, IsNotLikefindByFirstnameNotLike(String name){“firstname” : { “$not” : name }} (name as regex)
Containing on StringfindByFirstnameContaining(String name){“firstname” : name} (name as regex)
NotContaining on StringfindByFirstnameNotContaining(String name){“firstname” : { “$not” : name}} (name as regex)
Containing on CollectionfindByAddressesContaining(Address address){“addresses” : { “$in” : address}}
NotContaining on CollectionfindByAddressesNotContaining(Address address){“addresses” : { “$not” : { “$in” : address}}}
RegexfindByFirstnameRegex(String firstname){“firstname” : {“$regex” : firstname }}
(No keyword)findByFirstname(String name){“firstname” : name}
NotfindByFirstnameNot(String name){“firstname” : {“$ne” : name}}
NearfindByLocationNear(Point point){“location” : {“$near” : [x,y]}}
NearfindByLocationNear(Point point, Distance max){“location” : {“$near” : [x,y], “$maxDistance” : max}}
NearfindByLocationNear(Point point, Distance min, Distance max){“location” : {“$near” : [x,y], “$minDistance” : min, “$maxDistance” : max}}
WithinfindByLocationWithin(Circle circle){“location” : {“$geoWithin” : {“$center” : [ [x, y], distance]}}}
WithinfindByLocationWithin(Box box){“location” : {“$geoWithin” : {“$box” : [ [x1, y1], x2, y2]}}}
IsTrue, TruefindByActiveIsTrue(){“active” : true}
IsFalse, FalsefindByActiveIsFalse(){“active” : false}
ExistsfindByLocationExists(boolean exists){“location” : {“$exists” : exists }}

转自源码:

https://github.com/heibaiying/spring-samples-for-all

https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-boot/spring-boot-mongodb

spring boot mongodb英文文档

https://docs.spring.io/spring-boot/docs/2.2.6.RELEASE/reference/htmlsingle/#boot-features-mongodb

spring boot mongodb中文文档

https://docshome.gitbooks.io/springboot/content/pages/spring-boot-features.html#boot-features-mongodb

MongoDB官方文档

https://docs.mongodb.com/

MongoDB 教程

https://www.runoob.com/mongodb/mongodb-tutorial.html

MongoDB中文网

https://www.mongodb.org.cn/

MongoDB教程

https://www.mongodb.org.cn/tutorial/

 

spring 5.x 系列第9篇 —— 整合mongodb (xml配置方式)

spring 5.x 系列第10篇 —— 整合mongodb (代码配置方式)

MongoDB 基本使用
MongoDB 索引详解
MongoDB 聚合管道
MongoDB 高可用基础之副本集
MongoDB 高可用集群架构

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值