# SpringBoot整合MongoDB(1)

## SpringBoot整合MongoDB(1)

## springboot整合mongodb

### gradle配置

```groovy
buildscript {
    ext {
        springBootVersion = '2.0.0.RC2'
    }
    repositories {
        mavenCentral()
        maven { url "https://repo.spring.io/snapshot" }
        maven { url "https://repo.spring.io/milestone" }
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'com.mongo'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenCentral()
    maven { url "https://repo.spring.io/snapshot" }
    maven { url "https://repo.spring.io/milestone" }
}


dependencies {
    compile('org.springframework.boot:spring-boot-starter-data-mongodb')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}
```

### mongodb自动配置

```
#没有开启安全认证
#spring.data.mongodb.uri=mongodb://localhost:27017/springboot-db
#设置了账户和密码
spring.data.mongodb.uri=mongodb://name:pass@localhost:27017/dbname
```

### 启动类

```java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {


        SpringApplication.run(Application.class, args);

    }

}
```

### 测试类

```java
import java.util.List;
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.Query;
import org.springframework.test.context.junit4.SpringRunner;
import com.mongo.Application;
import com.mongo.entity.User;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = { Application.class })
public class MongoDemo {

    @Autowired
    private MongoTemplate mongoTemplate;

    @Test
    public void demoOne() throws Exception {

        mongoTemplate.insert(new User("woms", 12, "山西省",new String[] {"hello","mongo"},  new Integer[]{12,11} )) ;

        List<User> list = mongoTemplate.find(new Query(), User.class);
        for (User user : list) {
            System.out.println(user);
        }

    }

}
```

先来感受一下

```java
//删除所有
        //customerRepository.deleteAll();

            // 添加数据
        //customerRepository.save(new Customer("Alice", "Smith"));
        //customerRepository.save(new Customer("Bob", "Smith"));

            // fetch all customers
//            System.out.println("Customers found with findAll():");
//            System.out.println("-------------------------------");
//            for (Customer customer : customerRepository.findAll()) {
//                System.out.println(customer);
//            }
//            System.out.println();

            // fetch an individual customer
//            System.out.println("Customer found with findByFirstName('Alice'):");
//            System.out.println("--------------------------------");
//            System.out.println(customerRepository.findByFirstName("Alice"));
//
//            System.out.println("Customers found with findByLastName('Smith'):");
//            System.out.println("--------------------------------");
//            for (Customer customer : customerRepository.findByLastName("Smith")) {
//                System.out.println(customer);
//            }

        //分页排序查询--repository
//        PageRequest pageRequest = new PageRequest(0,20,new Sort(Direction.ASC, "lastName"));
//        Page<Customer> page = customerRepository.findAll(pageRequest);
//        List<Customer> content = page.getContent();
//        for (Customer customer : content) {
//            System.out.println(customer);
//        }

        //customerRepository.findAll(example, pageRequest);

        //分页排序--mongoTemplate
        BasicDBObject basicDBObject = new BasicDBObject();
        //模糊查询
        basicDBObject.put("lastName", new BasicDBObject("$regex", Pattern.compile("mit")).append("$options", "i"));
        Query query =     new BasicQuery(basicDBObject);
        query.with(new PageRequest(0, 20));
        query.with(new Sort(Direction.ASC, "lastName"));
        List<Customer> list = mongoTemplate.find(query, Customer.class);
        for (Customer customer : list) {
            System.out.println(customer);
        }
        //保存数据--mongoTemplate
        //    mongoTemplate.remove(new Query(), Customer.class);
        //删除数据
        //    mongoTemplate.insert(new Customer("Alice", "Smith"));

        //修改数据--mongoTemplate
        mongoTemplate.updateMulti(query, new Update().set("lastName", "wwwmmmsss"), Customer.class);
```

### 总结

有多种方式：

1. 使用原生的驱动api，也就是使用内嵌mongodb
2. 使用springboot-data-jpa

   2-1. 使用extends MongoRepository

   2-2. 使用mongoTemplate

   2-3. 使用@query注解


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://sb-woms.gitbook.io/sb/mongo/springboot-mongo-1.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
