SpringBoot集成MongoDB

本文详细介绍了如何在SpringBoot应用中集成MongoDB,包括添加依赖、配置数据库连接、创建配置类、定义实体类、实现Repository接口、定义Service接口及其实现类,并提供了测试用例。通过这个教程,你可以学习到如何使用SpringBoot操作MongoDB数据库。
摘要由CSDN通过智能技术生成

SpringBoot集成MongoDB

1、导入依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>    
    
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    <!--spring boot data mongodb-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
</dependencies>

2、添加配置类以及配置 mongo 的数据库连接

# application.properties
# 配置数据库连接
#格式: mongodb://账号:密码@ip:端口/数据库?认证数据库
#spring.data.mongodb.uri=mongodb://root:admin@localhost/mongodemo?authSource=admin
#spring.data.mongodb.uri=mongodb://localhost/mongodemo
spring:
  data:
    mongodb:
      uri: mongodb://localhost/mongo_test
  # 配置MongoTemplate的执行日志
#logging.level.org.springframework.data.mongodb.core=debug
logging:
  level:
    org.springframework.data.mongodb.core: debug

创建一个MongoConfig配置类, 去掉 _class 属性

@Configuration
public class MongoConfig {

    //mongodb 去除_class属性
    @Bean
    public MappingMongoConverter mappingMongoConverter(MongoDatabaseFactory factory, MongoMappingContext context, BeanFactory beanFactory) {
        DbRefResolver dbRefResolver = new DefaultDbRefResolver(factory);
        MappingMongoConverter mappingConverter = new MappingMongoConverter(dbRefResolver, context);
        try { mappingConverter.setCustomConversions(beanFactory.getBean(CustomConversions.class));
        } catch (NoSuchBeanDefinitionException ignore) {
        }
        // Don't save _class to mongo
        mappingConverter.setTypeMapper(new DefaultMongoTypeMapper(null));
        return mappingConverter;
    }
}

3、Entity 实体类

@AllArgsConstructor
@NoArgsConstructor
@Setter
@Getter
@ToString
@Document("users") //设置文档所在的集合
public class User {
    //文档的id使用ObjectId类型来封装,并且贴上@Id注解,
    // 自动映射为_id 自动封装ObjectId
    @Id
    private String id;
    private String name;
    private Integer age;
    private List<String> hobby = new ArrayList<>();
}

4、创建一个 UserRepository 接口实现 mongo 提供的 MongoRepository(注意这里的 repository 就相当于是 mapper)

public interface UserRepository extends MongoRepository<User, String> {

    User findByName(String name);
}

5、IUserService 接口

public interface IUserService {

    void save(User user);

    void update(User user);

    void deleteById(String id);

    User findById(String id);

    List<User> findAll();

    Page<User> page(Pageable pageable);
}

6、UserServiceImpl 实现类

@Service
public class UserServiceImpl implements IUserService {

    @Autowired
    private UserRepository userRepository;
    @Autowired
    private MongoTemplate mongoTemplate;

    @Override
    public void save(User user) {
        userRepository.save(user);
    }

    @Override
    public void update(User user) {
        userRepository.save(user);
    }

    @Override
    public void deleteById(String id) {
        userRepository.deleteById(id);
    }

    @Override
    public User findById(String id) {
        return userRepository.findById(id).orElseGet(null);
    }

    @Override
    public List<User> findAll() {
        return userRepository.findAll();
    }

    @Override
    public Page<User> page(Pageable pageable) {
        Query query = new Query();

        long total = mongoTemplate.count(query, User.class);
        query.skip((pageable.getPageNumber() - 1) * pageable.getPageSize())
                .limit(pageable.getPageSize());

        List<User> userList = mongoTemplate.find(query, User.class);
        return new PageImpl<User>(userList, pageable, total);
    }
}

7、创建测试类

@SpringBootTest
public class MongoDBTest {

    @Autowired
    private IUserService userService;
    @Autowired
    private UserRepository userRepository;
    @Autowired
    private MongoTemplate mongoTemplate;

    @Test
    public void testSave(){
        User user = new User();
        user.setName("张三");
        user.setAge(18);
        userService.save(user);
    }
    @Test
    public void testUpdate(){
        User user = new User();
        user.setId("63ad47162a17000069003f31");
        user.setId("21L");
        user.setName("李四");
        user.setAge(18);
        userService.update(user);
    }
    @Test
    public void testDelete(){
        userService.deleteById("5de507fca0852c6c7ebc1eac");
    }
    @Test
    public void testGet(){
        System.out.println(userService.findById("21L"));
    }
    @Test
    public void testList(){
        userService.findAll().forEach(System.err::println);
    }

    @Test
    public void findByNameTest() {
        System.out.println(userRepository.findByName("张三"));
    }

    @Test
    public void pageTest() {
        PageRequest pageable = PageRequest.of(3, 5);
        Page<User> page = userService.page(pageable);
        page.getContent().forEach(System.err::println);
    }

8、最后别忘了启动类

@SpringBootApplication
public class MongoDBApplication {
    public static void main(String[] args) {
        SpringApplication.run(MongoDBApplication.class, args);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值