SpringBoot整合MongoDB实现增删改查、复合查询
1、向pom.xml中添加依赖包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
2、编辑application.yml
spring:
data:
mongodb:
host: 192.168.58.129 //IP地址
database: studentdb //数据库名
3、编写实体类
解释一下以下用到的的几个注解:@Id
:文档的唯一标识,在mongodb中为ObjectId,它是唯一的,通过时间戳+机器标识+进程ID+自增计数器(确保同一秒内产生的Id不会冲突)构成。@Document
:把一个java类声明为mongodb的文档,可以通过collection参数指定这个类对应的文档。@Document(collection=”mongodb”) mongodb对应表
/** * 学生类 */
@Document(collection = "student") //指定对应的表名
public class Student implements Serializable {
@Id
private Integer id;
private String name;
private Integer age;
private Integer gradeId;
private Grade grade;
public Grade getGrade() {
return grade;
}
public void setGrade(Grade grade) {
this.grade = grade;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Integer getGradeId() {
return gradeId;
}
public void setGradeId(Integer gradeId) {
this.gradeId = gradeId;
}
@Override
public String toString() {
return getId()+getName()+getAge()+getGradeId();
}
}
/** * 年级类 */
public class Grade implements Serializable {
private Integer id;
private String gradeName;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getGradeName() {
return gradeName;
}
public void setGradeName(String gradeName) {
this.gradeName = gradeName;
}
}
4、StudentDao接口
提供增删改查 MongoDB 接口
public interface StudentDao {
//查询所有
List<Student> findAll();
//增加
void add(Student student);
//删除
void delete(Integer id);
//修改
void update(Student student);
//符合查询——两表联查
List<Map> fuhefind();
}
5、StudentDaoImpl实现类
@Component
public class StudentDaoImpl implements StudentDao {
@Autowired
private MongoTemplate mongoTemplate;
@Override
public List<Student> findAll() {
return mongoTemplate.findAll(Student.class);
}
@Override
public void add(Student student) {
mongoTemplate.save(student);
}
@Override
public void delete(Integer id) {
Student student=mongoTemplate.findById(1,Student.class);
mongoTemplate.remove(student);
}
@Override
public void update(Student student) {
//修改的条件
Query query = new Query(Criteria.where("id").is(student.getId()));
//修改的内容
Update update = new Update();
update.set("name",student.getName());
mongoTemplate.updateFirst(query,update,Student.class);
}
@Override
public List<Map> fuhefind() {
LookupOperation lookupOperation=LookupOperation.newLookup().from("grade").localField("_id").foreignField("_id").as("grade");
Aggregation aggregation=Aggregation.newAggregation(lookupOperation);
List<Map> result=mongoTemplate.aggregate(aggregation,"student",Map.class).getMappedResults();
return result;
}
}
6、单元测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootMongdbApplicationTests {
@Autowired
private StudentDao studentDao;
@Test
public void findAll() {
List<Student> students=studentDao.findAll();
System.out.println("查询到的数据的条数:"+students.size());
for (Student st:students
) {
System.out.println(st.toString());
}
}
@Test
public void add(){
Student student=new Student();
student.setId(4);
student.setName("李名明");
student.setAge(19);
student.setGradeId(3);
studentDao.add(student);
findAll();
}
@Test
public void delete(){
studentDao.delete(4);
findAll();
}
@Test
public void update(){
Student student=new Student();
student.setId(2);
student.setName("王麻子");
student.setAge(15);
student.setGradeId(1);
studentDao.update(student);
findAll();
}
@Test
public void fehefind(){
List<Map> maps = studentDao.fuhefind();
for (Map map:maps
) {
System.out.println(map);
}
}
}
然后就自己去琢磨吧!
还没有评论,来说两句吧...