MongoDB从入门到实战(九):SpringBoot集成MongoDB(MongoRepository)

x33g5p2x  于2021-12-25 转载在 Go  
字(2.4k)|赞(0)|评价(0)|浏览(484)

一:启动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. 支持属性的级联查询,但若当前类有符合条件的属性则优先使用,而不使用级联属性,若需要使用级联属性,则属性之间使用_强制进行连接

相关文章