All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.org.atool.fluent.mybatis.spring.IMapperFactory Maven / Gradle / Ivy

There is a newer version: 1.9.9
Show newest version
package cn.org.atool.fluent.mybatis.spring;

import cn.org.atool.fluent.mybatis.base.entity.AMapping;
import cn.org.atool.fluent.mybatis.base.intf.IRelation;
import cn.org.atool.fluent.mybatis.base.mapper.IEntityMapper;
import cn.org.atool.fluent.mybatis.functions.IExecutor;
import cn.org.atool.fluent.mybatis.utility.RefKit;
import org.apache.ibatis.session.ConfigurationKit;
import org.apache.ibatis.session.SqlSessionFactory;

import java.util.Collection;
import java.util.List;

/**
 * IMapperFactory
 *
 * @author darui.wu
 */
@SuppressWarnings({"unused", "rawtypes"})
public interface IMapperFactory {
    /**
     * 返回Mapper实例列表
     *
     * @return IEntityMapper实例列表
     */
    Collection getMappers();

    /**
     * 返回实体关系定义
     *
     * @return IEntityRelation关系列表
     */
    Collection getRelations();

    /**
     * 返回所有SqlSessionFactory列表
     */
    Collection getSessionFactories();

    /**
     * 初始化环境定义脚本列表
     */
    List getInitializers();

    /**
     * 初始化FluentMybatis启动前置步骤
     * 
     * o Entity关联关系实现设置
     * o MapperRef中所有Mapper实例设置
     * o insert, insertBatch, listEntity中主键映射和ResultMap设置
     * o Banner打印
     * 
*/ default void init() { // 设置Mapper和IMapping关联关系 Collection mappers = this.getMappers(); for (IEntityMapper mapper : mappers) { AMapping mapping = (AMapping) mapper.mapping(); RefKit.ENTITY_MAPPING.put(mapping.entityClass(), mapping); RefKit.TABLE_MAPPING.put(mapping.getTableName(), mapping); RefKit.ENTITY_MAPPER.put(mapping.entityClass(), mapper); RefKit.MAPPER_MAPPING.put(mapping.mapperClass(), mapping); } RefKit.ENTITY_MAPPING.unmodified(); RefKit.TABLE_MAPPING.unmodified(); RefKit.ENTITY_MAPPER.unmodified(); RefKit.MAPPER_MAPPING.unmodified(); // 执行初始化环境方法 this.getInitializers().forEach(IExecutor::execute); // 设置实体关联关系方法 Collection relations = this.getRelations(); for (IRelation relation : relations) { relation.initialize(); } RefKit.relations.unmodified(); // 初始化SqlProvider方法定义 Collection factories = this.getSessionFactories(); for (SqlSessionFactory factory : factories) { new ConfigurationKit(factory.getConfiguration(), RefKit.MAPPER_MAPPING) .insert() .batchInsert() .listEntity(); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy