09、MongoDB实战:SpringBoot集成MongoDB(MongoRepository)

一:启动MongoDB服务

# 启动服务,需要指定db路径
> ./bin/mongod --dbpath ./data/db/

二:集成

2.1 pom.xml

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

2.2 application.yml

注意:如果密码单独配需要加单引号

spring:
  data:
    mongodb:
      #uri: mongodb://mongo:123456@localhost:27017/test
      host: localhost
      port: 27017
      database: test
      username: mongo
      password: '123456'

2.3 entity

@Data
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class Address implements Serializable {
   
     
    private String province;
    private String city;
}

@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserInfo {
   
     
    private Integer gender;
}

@Data
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Document(collection = "user")
@CompoundIndex( def = "{'id': 1, 'nickname': -1}")
public class User implements Serializable {
   
     

    @Id
    private String id;

    @Indexed
    @Field("username")
    private String username;
    private String nickname;
    private Integer age;
    private Date createTime;
    private UserInfo userInfo;
    private List<String> tags;
    private List<Address> addresses;
}

  • @Document(collection = “user”) : 配置集合名字
  • @CompoundIndex( def = “{‘id’: 1, ‘username’: -1}”) : 复合索引
  • @Id : 主键标识,该属性的值会自动对应mongodb的主键字段"_id",如果该属性名就叫“id”,则该注解可以省略,否则必须写
  • @Field(“字段名”): 该属性对应mongodb的字段的名字,如果一致,则无需该注解
  • @Indexed: 添加了一个单字段的索引

2.4 MongoRepository

public interface UserRepository extends MongoRepository<User, String> {
   
     

}

2.5 Test

@SpringBootTest
@RunWith(SpringRunner.class)
class SpringbootMongodbApplicationTests {
   
     

    @Autowired
    private UserRepository userRepository;
    @Test
    void testMongoDB() {
   
     
        User user = new User();
        user.setId("1");
        user.setUsername("monday");
        user.setNickname("mengday");
        user.setAge(30);
        user.setCreateTime(new Date());
        user.setUserInfo(new UserInfo(1));
        user.setTags(Arrays.asList("xiaojiejie", "dog"));
        user.setAddresses(Arrays.asList(
                new Address("shanghai", "pudong"),
                new Address("beijing", "chaoyang")
        ));

        userRepository.save(user);
        List<User> userList = userRepository.findAll();
        System.out.println("userList=" + userList);

        User result = userRepository.findById("1").get();
        System.out.println(result);
        userRepository.deleteById("1");
    }
}

*

Spring Data : Spring 的一个子项目。用于简化数据库访问,支持NoSQL 和 关系数据存储。其主要目标是使数据库的访问变得方便快捷。

1、 不是随便声明的,而需要符合一定的规范;
2、 查询方法以find|read|get开头;
3、 涉及条件查询时,条件的属性用条件关键字连接;
4、 要注意的是:条件属性首字母需要大写;
5、 支持属性的级联查询,但若当前类有符合条件的属性则优先使用,而不使用级联属性,若需要使用级联属性,则属性之间使用_强制进行连接;

版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: