Custom Spring autowiring starter
1. Mongodb configuration class
@Configuration
public class Wolf2wMongoAutoConfiguration {
@Bean
public MongoPageTemplate mongoPageTemplate(MongoTemplate mongoTemplate) {
return new MongoPageTemplate(mongoTemplate);
}
//mongodb 去除_class属性
@Bean
public MappingMongoConverter mappingMongoConverter(MongoDatabaseFactory 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;
}
}
2. Tool class that encapsulates Mongo paging
public class MongoPageTemplate {
private final MongoTemplate mongoTemplate;
public MongoPageTemplate(MongoTemplate mongoTemplate) {
this.mongoTemplate = mongoTemplate;
}
public <T> Page<T> page(BaseQuery baseQuery, Class<T> entityClass) {
return this.page(baseQuery, new Query(), entityClass);
}
public <T> Page<T> page(BaseQuery baseQuery, Query query, Class<T> entityClass) {
// 1. 查询总数
long total = mongoTemplate.count(query, entityClass);
// 2. 判断总数量是否有值, 如果没有值返回空分页对象
if (total == 0) {
return Page.empty();
}
// 3. 查询结果集
// 封装分页对象
query.skip(baseQuery.getStart()).limit(baseQuery.getPageSize());
// 查询结果集
List<T> list = mongoTemplate.find(query, entityClass);
// 4. 封装分页对象, 返回结果
PageRequest pageable = PageRequest.of(baseQuery.getCurrentPage() - 1, baseQuery.getPageSize());
// 4. 封装分页对象, 返回结果
return new PageImpl<T>(list, pageable, total);
}
}
3. Package paging parameters
@Getter
@Setter
public class Page<T> {
private long total;
private List<T> records;
public Page(long total, List<T> records) {
this.total = total;
this.records = records;
}
public static <T> Page<T> empty() {
return new Page<T>(0, Collections.emptyList());
}
}
4. The final step is to create a new META-INF folder under the resource file, and create a Spring.factories ordinary file in Lingfang, the main function is to associate the previous Mongo configuration class
org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.wd.mongo.config.Wolf2wMongoAutoConfiguration
5. How to use it?
<dependency>
<groupId>cn.xxx.xx</groupId>
<artifactId>trip-common-mongodb-starter</artifactId>
<version>1.0.0</version>
</dependency>