自定义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、最终的要的一步, 在 resource 文件下面新建一个 META-INF 文件夹, 在泠免创建一个 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