カスタム Spring 自動配線スターター

カスタム Spring 自動配線スターター

1.Mongodb 構成クラス

@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. Mongo ページングをカプセル化するツール クラス

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. パッケージのページング パラメータ

@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. 最後のステップは、リソース ファイルの下に新しいMETA-INFフォルダーを作成し、 Lingfang にSpring.factories通常ファイルを作成することです。主な機能は、以前の Mongo 構成クラスを関連付けることです。

org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.wd.mongo.config.Wolf2wMongoAutoConfiguration

5. 使い方は?

<dependency>
    <groupId>cn.xxx.xx</groupId>
    <artifactId>trip-common-mongodb-starter</artifactId>
    <version>1.0.0</version>
</dependency>

おすすめ

転載: blog.csdn.net/weixin_49137820/article/details/128505957