spring data mongodb 入门使用手册

xml 复制代码
<!--pom.xml引入依赖-->
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-mongodb</artifactId>
 </dependency>

文档映射类Student.java

java 复制代码
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.ToString;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;

@Data
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Document(collection = "student")
public class Student {
    @Id
    private String id;

    @Field(name = "name")
    private String name;

    @Field(name = "age")
    private Integer age;

    @Field(name = "sex")
    private String sex;

    @Transient
    private String address;
}

数据访问层 StudentRepository.java

需要实现接口public interface org.springframework.data.mongodb.repository.MongoRepository<T, ID> ,MongoRepository接口实现了很多方法,感兴趣的可以读一读源码,我这里不一一列举

java 复制代码
import cn.train.mongodemo.mongoEntities.Student;
import org.springframework.data.mongodb.repository.*;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository(value = "studentRepository")
public interface  StudentRepository extends MongoRepository<Student,String> {}

虽然MongoRepository提供了很多方法,但是我们仍然可以自定义自己的方法以满足业务需求,如下所示

自定义查询方法

java 复制代码
// 按姓名查询
@Query(value = "{name:?0}")
Student findByName(String name);
// 按年龄查询
@Query(value = "{age:?0}")
List<Student> findByAge(Integer age);

自定义删除方法

java 复制代码
// 按姓名删除,返回删除数量
@DeleteQuery(value = "{name: :#{#name}}")
long deleteByName(@Param(value = "name") String name);

自定义更新方法

java 复制代码
// 根据姓名修改姓名
@Query(value = "{name: :#{#old_name}}")
@Update(value = "{'$set': {'name': :#{#new_name}}}")
void updateByName(@Param("new_name") String newName, @Param("old_name") String oldName);

@Param 参数

描述:用于绑定查询方法参数与查询语句中命名参数的注解;特别注意参数应用的方式------:#{#参数名}!!!

全类名:org.springframework.data.repository.query.Param

作用范围:PARAMETER

属性:String value():参数名

插入数据

java 复制代码
@Service
public class StudentService{
    @Autowired
	StudentRepository studentRepository;

	public void insertAll(Iterable<Student> students) {
        // 直接调用MongoRepository的insert默认方法,这个方法不但可以插入单文档,也可以插多文档
    	studentRepository.insert(students);
	}
}

以上演示就是spring data mongodb的基础使用方式