使用Mongodb Example条件查询代码如下:
@Repository
public interface BoilerInfoRepository extends MongoRepository<BoilerInfo, String> {
}
@Service
public class BoilerInfoServiceImpl implements BoilerInfoService {
@Autowired
private BoilerInfoRepository boilerInfoRepository;
/**
* 查询锅炉列表(带分页)
*
* @param baseVO
* @return
*/
@Override
public Page<BoilerInfo> getBoilerInfos(BaseVO baseVO) {
//分页参数
Integer pageNum = baseVO.getPageNumber();
Integer pageSize = baseVO.getPageSize();
String search = baseVO.getSearch();
if (pageNum == null || pageNum <= 0) {
pageNum = 1;
}
pageNum = pageNum - 1;
if (pageSize == null || pageSize <= 0) {
pageSize = 10;
}
BoilerInfo boilerInfo = new BoilerInfo();
boilerInfo.setCity(search);
Pageable pageable = PageRequest.of(pageNum, pageSize);
//自定义条件查询
//定义条件匹配器
ExampleMatcher exampleMatcher = ExampleMatcher.matching()
.withIgnorePaths("_id")//忽略属性
.withNullHandler(ExampleMatcher.NullHandler.IGNORE)
.withIgnoreCase(true)//忽略大小写
.withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) //改变默认字符串匹配方式:模糊查询
.withMatcher("city", ExampleMatcher.GenericPropertyMatchers.contains());//采用“包含匹配”的方式查询
Example<BoilerInfo> example = Example.of(boilerInfo, exampleMatcher);
Page<BoilerInfo> all = boilerInfoRepository.findAll(example , pageable);
// Page<Passenger> all = passengerRepository.findAll(pageable);
return all;
}
}
因为Mongodb 里面的数据是老系统里面的数据,存储的时候不是我存的,所以我查询的时候总是查不到数据。在这里我打印了Mongodb的sql发现,总是有一个_class属性会去查询,就是因为_class属性不对。也就是因为存储的时候的实体类和你现在查询的实体类全类名不一样,所以查不到数据。这里需要配置查询时禁用_class属性,代码如下:
package com.topband.smartsys.config;
import com.mongodb.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.gridfs.GridFSBucket;
import com.mongodb.client.gridfs.GridFSBuckets;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.convert.CustomConversions;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.convert.DbRefResolver;
import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver;
import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper;
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
@Configuration
public class MongoDbConfig {
//删除_class 属性的配置
@Bean
public MappingMongoConverter mappingMongoConverter(MongoDbFactory factory, MongoMappingContext context, BeanFactory beanFactory) {
DbRefResolver dbRefResolver = new DefaultDbRefResolver(factory);
MappingMongoConverter mappingConverter = new MappingMongoConverter(dbRefResolver, context);
try {
mappingConverter.setCustomConversions(beanFactory.getBean(CustomConversions.class));
} catch (NoSuchBeanDefinitionException ignore) {
}
// Don't save _class to mongo
mappingConverter.setTypeMapper(new DefaultMongoTypeMapper(null));
return mappingConverter;
}
}
此时再去查询就能查到数据。