一、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]})