您的位置:

使用SpringBoot和MongoDB构建应用程序

一、SpringBoot和MongoDB简介

SpringBoot是一个快速开发应用程序的框架,它基于Spring框架,旨在简化Spring应用程序的配置和部署,同时提供更多的开箱即用的功能和插件。 MongoDB是一个NoSQL数据库,其数据存储格式是文档式的,具有高可扩展性和灵活性。由于MongoDB的文档式存储,它比关系型数据库具有更好的适应性和灵活性,因此能够更好地适应快速变化的数据。

二、使用SpringBoot连接MongoDB

1、添加Spring Data MongoDB依赖项



   
  
    org.springframework.boot
    
  
    spring-boot-starter-data-mongodb
    

   

2、配置MongoDB连接


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

3、编写数据模型


@Document(collection="user")
public class User {

    @Id
    private String id;

    private String name;

    private String email;
    // 省略getter和setter
}

4、编写数据操作接口


public interface UserRepository extends MongoRepository<User, String> {

}

三、基本的数据操作

1、插入数据


@Autowired
private UserRepository userRepository;

public void insertUser() {
    User user = new User();
    user.setName("Tom");
    user.setEmail("tom@example.com");
    userRepository.save(user);
}

2、查询数据


public void findUser(String id) {
    User user = userRepository.findById(id).orElse(null);
}

3、更新数据


public void updateUser(String id, String name) {
    User user = userRepository.findById(id).orElse(null);
    if (user != null) {
        user.setName(name);
        userRepository.save(user);
    }
}

4、删除数据


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

四、高级查询

1、按条件查询


Query query = new Query(Criteria.where("name").is("Tom"));
List<User> userList = mongoTemplate.find(query, User.class);

2、按条件分页查询


int pageNum = 1;
int pageSize = 10;
Query query = new Query(Criteria.where("name").is("Tom")).skip((pageNum - 1) * pageSize).limit(pageSize);
List<User> userList = mongoTemplate.find(query, User.class);

3、按条件统计数量


Query query = new Query(Criteria.where("name").is("Tom"));
long count = mongoTemplate.count(query, User.class);

4、按条件排序


Query query = new Query(Criteria.where("name").is("Tom")).with(Sort.by(Sort.Order.desc("email")));
List<User> userList = mongoTemplate.find(query, User.class);

五、使用MongoTemplate进行复杂查询

1、基于方法名称自动实现查询


public interface UserRepository extends MongoRepository<User, String> {
    List<User> findByName(String name);
    List<User> findByEmailLike(String email);
}

2、手动编写查询语句


Query query = new Query().addCriteria(Criteria.where("name").is("Tom").orOperator(Criteria.where("email").is("tom@example.com")));
List<User> userList = mongoTemplate.find(query, User.class);

六、使用MongoDB进行分页查询

1、使用MongoTemplate和Pageable进行分页


int pageNum = 1;
int pageSize = 10;
Query query = new Query().with(PageRequest.of(pageNum - 1, pageSize));
List<User> userList = mongoTemplate.find(query, User.class);

2、使用MongoDB的skip和limit进行分页


int pageNum = 1;
int pageSize = 10;
Query query = new Query().skip((pageNum - 1) * pageSize).limit(pageSize);
List<User> userList = mongoTemplate.find(query, User.class);

七、使用MongoDB进行数据管理

1、备份数据


mongodump --db [database_name] --out [backup_folder]

2、还原数据


mongorestore --db [database_name] [backup_folder]

3、优化数据库性能


db.collection.ensureIndex({[field_name]:[index_type]})