springboot整合MongoDB实现简单的增、删、改、查、分页
第一步、引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
第二步、配置yml
spring:
profiles:
active: 8080
data:
mongodb:
#选择数据库
database: test
#端口号
port: 27017
#主机ip
host: 127.0.0.1
第三步、实体类和接口的编写
实体类
@Data
public class Student {
private Integer _id;
private String name;
private String sex;
private Integer age;
private Integer gradeId;
private String gradeName;
}
接口
public interface StudentService {
/**
* 新增
* @param student
*/
void saveStu(Student student);
/**
* 删除
* @param id
*/
void removeStu(Integer id);
/**
* 修改
* @param student
*/
void updateStu(Student student);
/**
* 根据id查询
* @param id
* @return
*/
Student findStuById(Long id);
/**
* 分页查询
*
* @param page
* @param pageSize
* @return
*/
List<Student> findAll(Integer page,Integer pageSize);
}
第四步、编写实现类代码
@Service
public class StudentServiceImpl implements StudentService {
@Autowired
private MongoTemplate mongoTemplate;
/**
* 新增
*
* @param student
*/
@Override
public void saveStu(Student student) {
mongoTemplate.save(student);
}
/**
* 删除
*
* @param id
*/
@Override
public void removeStu(Integer id) {
Query query = new Query(Criteria.where("_id").is(id));
mongoTemplate.remove(query, Student.class);
}
/**
* 修改
*
* @param student
*/
@Override
public void updateStu(Student student) {
Query query = new Query(Criteria.where("_id").is(student.get_id()));
Update update = new Update();
update.set("name", student.getName());
update.set("sex", student.getSex());
update.set("age", student.getAge());
update.set("gradeId", student.getGradeId());
this.mongoTemplate.updateFirst(query, update, Student.class);
}
/**
* 根据id查询
*
* @param id
* @return
*/
@Override
public Student findStuById(Long id) {
Query query = new Query(Criteria.where("_id").is(id));
Student one = this.mongoTemplate.findOne(query, Student.class);
return one;
}
/**
* 分页查询
*
* @param page
* @param pageSize
* @return
*/
@Override
public List<Student> findAll(Integer page, Integer pageSize) {
if (page < 0) {
page = 0;
}
//多表进行关联
LookupOperation lookupOperation = LookupOperation.newLookup().
from("grade").//关联表名
localField("gradeId").//关联字段
foreignField("_id").//主表关联字段对应的次表字段
as("grade");//查询结果集合名
// 将条件封装到Aggregate管道
Aggregation aggregation = Aggregation.newAggregation(
lookupOperation,
Aggregation.project("_id", "name", "sex", "age", "gradeId", "grade.gradeName"),//指定输出文档中的字段
Aggregation.sort(Sort.Direction.ASC, "_id"),//排序
Aggregation.skip((page - 1) * pageSize),//过滤条数,跳过一定数量的数据
Aggregation.limit(pageSize));//限制传递给下一步的文档数量
//查询
List<Student> students = mongoTemplate.aggregate(aggregation, "student", Student.class).getMappedResults();
return students;
}
}
第五步、测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootMongodbApplicationTests {
@Autowired
StudentService studentService;
@Test
public void contextLoads() {
}
@Test
public void findAll() {
List<Student> all = studentService.findAll(2, 2);
for (Student s : all) {
System.out.println(s.get_id() + "####" + s.getName() + "###" + s.getAge() + "###" + s.getGradeId() + "###" + s.getGradeName());
}
}
@Test
public void findStuById() {
Student stuById = studentService.findStuById((long) 4);
if (stuById != null) {
System.out.println(stuById.get_id() + "####" + stuById.getName() + "###" + stuById.getAge() + "###" + stuById.getGradeId());
}
}
@Test
public void saveStu() {
Student student = new Student();
student.set_id(4);
student.setGradeId(1);
student.setName("丽丽");
student.setSex("女");
student.setAge(20);
studentService.saveStu(student);
}
@Test
public void removeStu() {
studentService.removeStu(4);
}
@Test
public void updateStu() {
Student student = new Student();
student.set_id(4);
student.setGradeId(1);
student.setName("三三");
student.setSex("女");
student.setAge(20);
studentService.updateStu(student);
}
}
这样一个简单的springboot整合MongoDB的增、删、改、查、分页小demo就完成了。