概述:可以使用MongoTemplate或继承MongoRepository接口
1. MongoRepository接口
若继承MongoRepository接口可以实现简单的增删改查操作,不用写相应的dao层代码
// MongoRepository<T, ID> T为实体类,ID为主键ID
public interface StdRepository extends MongoRepository<StdDto,Long> {
}
2. MongoTemplate
核心操作类:Query和Criteria
Query:查询类
Criteria:条件类
(1)由于mongodb可以不先建立集合直接插入数据(insert时可创建集合),当使用insert插入时集合会多出一个_class字段,用于记录java对应的实体类,可创建Bean来代替默认的mongotemplate。
@Configuration
public class MongoConfiguration {
@Autowired
private MongoDatabaseFactorySupport mongoDatabaseFactorySupport;
@Autowired
private MappingMongoConverter mappingMongoConverter;
@Bean
public MongoTemplate mongoTemplate(){
mappingMongoConverter.setTypeMapper(new DefaultMongoTypeMapper(null));
MongoTemplate mongoTemplate = new MongoTemplate(mongoDatabaseFactorySupport,mappingMongoConverter);
return mongoTemplate;
}
}
(2)数据库中的字段和实体类中的字段不一致
可在实体类使用@Filed("")完成映射,若未映射则读取不到正确的值
@Field("getValue")
private String getValue;
(3)查询
@Resource
private MongoTemplate template;
Public List<Student> findByName(String name){
Query query = new Query();
query.addCriteria(Criteria.where("name").is("张三"));
return template.find(query,Student.class);
}
public List<JSONObject> findByAge(int age){
Query query = new Query();
query.addCriteria(Criteria.where("age").gt(20).lte(25));
return template.find(query,JSONObject.class,"Student");
}
public <T> List<T> find(Query query, Class<T> entityClass) {
return this.find(query, entityClass, this.getCollectionName(entityClass));
}
public <T> List<T> find(Query query, Class<T> entityClass, String collectionName) {
Assert.notNull(query, "Query must not be null!");
Assert.notNull(collectionName, "CollectionName must not be null!");
Assert.notNull(entityClass, "EntityClass must not be null!");
return this.doFind(collectionName, query.getQueryObject(), query.getFieldsObject(),
entityClass, new MongoTemplate.QueryCursorPreparer(query, entityClass));
}