简单的CRUD
首先,定义一个实体类,例如User:
@Document
public class User {
@Id
private String id;
private String name;
private int age;
// 构造函数、getter和setter省略...
}
接下来,定义一个继承自MongoRepository的接口,例如UserRepository:
public interface UserRepository extends MongoRepository<User, String> {
// 可以定义一些自定义查询方法,例如根据用户名查找用户
Optional<User> findByName(String name);
}
现在,可以使用UserRepository进行CRUD操作了:
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
// 插入操作
public void addUser(User user) {
userRepository.save(user);
}
// 查询操作
public Optional<User> getUserById(String id) {
return userRepository.findById(id);
}
public Optional<User> getUserByName(String name) {
return userRepository.findByName(name);
}
// 更新操作
public void updateUser(User user) {
userRepository.save(user);
}
// 删除操作
public void deleteUser(String id) {
userRepository.deleteById(id);
}
}
以上示例中,addUser() 方法用于插入一个新用户,getUserById() 和 getUserByName() 方法用于根据ID和用户名查询用户,updateUser() 方法用于更新用户信息,deleteUser() 方法用于删除用户。
注意,这些方法都是基于MongoRepository提供的默认方法实现的,无需手动编写查询语句。你也可以根据需要在UserRepository中添加自定义查询方法。
分页
在Spring Data MongoDB的MongoRepository中实现分页查询,通常需要结合Pageable接口来完成。下面是一个使用Pageable进行分页查询的例子:
首先,确保你已经引入了Spring Data MongoDB相关的依赖,并且有一个符合分页条件的查询方法。
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.repository.MongoRepository;
public interface UserRepository extends MongoRepository<User, String> {
// 自定义分页查询方法
Page<User> findByAgeGreaterThan(int age, Pageable pageable);
}
这里的findByAgeGreaterThan方法是一个自定义查询方法,用于查询年龄大于给定值的所有用户,并按照Pageable参数提供的分页和排序信息返回结果。
然后,在服务层中调用这个方法并创建一个PageRequest实例:
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public Page<User> getUsersByAge(int minAge, int page, int size) {
// 创建分页对象,包含当前页数、每页大小以及可选的排序规则
Pageable pageable = PageRequest.of(page, size, Sort.by(Sort.Direction.DESC, "id"));
// 调用repository中的分页查询方法
return userRepository.findByAgeGreaterThan(minAge, pageable);
}
}
在这个示例中,getUsersByAge方法接收最小年龄、当前页码和每页大小作为参数,构造了一个PageRequest对象,然后将这个分页对象传入到自定义查询方法中,从而实现了分页查询功能。
客户端调用时可以获取到包含总页数、当前页数据等信息的Page对象。