# Spring-boot 对 Mongo 的操作

  • 新建一个基本的 Spring-boot 项目

  • 导入依赖

    <dependency>
    	<groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
    
    1
    2
    3
    4
  • 配置数据源

    在 Resource 文件中的 application.properties 添加数据源信息(ip:端口号/数据库名称)

    spring.data.mongodb.uri=mongodb://localhost:27017/test
    
    1

    如果数据库有密码

    spring.data.mongodb.uri=mongodb://user:password@localhost:27017/test
    
    1
  • 新建 MongoDB 实体类(与数据库信息相对应)

    package com.yufh.springbootmongodb.entity;
    
    import lombok.Data;
    import org.springframework.data.annotation.Id;
    
    /**
     * @author yufh
     * @describe 数据库实体类
     * @date 2019/8/12
     */
    @Data   //注解提供get/set方法
    public class User {
        @Id   //主键字段
        private String id;
        private String name;
        private String age;
    
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18

# 使用 MongoTemplate 进行操作

package com.yufh.springbootmongodb.service;

import com.yufh.springbootmongodb.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
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.stereotype.Service;

/**
 * @author yufh
 * @describe MongoTemplate操作数据库
 * @date 2019/8/12
 */
@Service
public class mongoTemplateDemo {

    @Autowired
    MongoTemplate mongotemplate;

    public String insert() {
        //自己定义数据信息
        User user = new User();
        user.setId("4");
        user.setName("sss");
        user.setAge("1211");
        mongotemplate.save(user);

        return "保存数据";
    }

    public String query() {
        Query query = new Query();
        query.addCriteria(Criteria.where("id").is("2"));
        String name = mongotemplate.findOne(query, User.class).getName();
        return name;
    }

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

# 新建 repository 接口进行操作

  • 新建定义 repository 接口继承 mongoRepository 接口

    package com.yufh.springbootmongodb.service;
    
    import com.yufh.springbootmongodb.entity.User;
    import org.springframework.data.mongodb.repository.MongoRepository;
    import org.springframework.stereotype.Service;
    
    public interface UserRepository extends MongoRepository<User, String> {
         User findByName(String name);
    
         void deleteById(String id);
    }
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
  • 使用新建接口

    package com.yufh.springbootmongodb.service;
    
    import com.yufh.springbootmongodb.entity.User;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    /**
     * @author yufh
     * @describe
     * @date 2019/8/12
     */
    @Service
    public class mongoRepositoryDemo {
    
        @Autowired
        UserRepository userRepository;
    
        public User queryUserByname() {
            return userRepository.findByName("yyy");
        }
    
        public User insertUser(){
            User user = new User();
            user.setId("3");
            user.setName("qqq");
            user.setAge("2322");
    
            userRepository.save(user);
            return user;
        }
    
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32

# 测试

package com.yufh.springbootmongodb;

import com.yufh.springbootmongodb.service.mongoRepositoryDemo;
import com.yufh.springbootmongodb.service.mongoTemplateDemo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootMongodbApplicationTests {
	@Resource
	mongoTemplateDemo mongoTemplateDemo;

	@Resource
	mongoRepositoryDemo mongoRepository;

	@Test
	public void insertTest1() {
		mongoTemplateDemo.insert();
	}

	@Test
	public void  queryTest1(){
		System.out.println(mongoTemplateDemo.query());
	}

	@Test
	public void queryTest2() {
		System.out.println(mongoRepository.queryUserByname());
	}

	@Test
	public void insertTest2() {
		System.out.println(mongoRepository.insertUser());
	}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

注意:

SpringBoot 项目的 Bean 装配默认规则是根据 Application 类所在的包位置从上往下扫描! “Application 类”是指 SpringBoot 项目入口类。这个类的位置很关键:

将接口与对应的实现类放在与 application 启动类的同一个目录或者他的子目录下,这样注解可以被扫描到。

也可以指定扫描包的路径