日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

  • MyBatis 框架配置文件有兩種:
  1. 1是主配置文件 mybatis-config.xml
  2. 2是配置執行 sql 的 MApper文件(接口或者 xml)
  • mybatis 定義了一系列屬性來控制 mybatis 運行時的行為,這些屬性可以在主配置通過 <setting>標簽指定
  • mybatis 所有屬性的含義可以在官方文檔查看 https://mybatis.org/mybatis-3/zh/configuration.html#settings

Configuaration 類字段注釋

public class Configration {
  protected Environment environment;
  // 允許 JDBC 支持自動生成主鍵,需要驅動兼容。
  // 這就是insert時獲取MySQL自增主鍵/oracle sequence的開關。
  // 注:一般來說,這是希望的結果,應該默認值為true比較合適。
  protected boolean useGeneratedKeys;
  // 是否啟用緩存
  protected boolean cacheEnabled = true;
// 指定 MyBatis 增加到日志名稱的前綴。
protected String logPrefix;

// 指定 MyBatis 所用日志的具體實現,未指定時將自動查找。一般建議指定為slf4j或log4j
protected Class<? extends Log> logImpl;
// 當沒有為參數提供特定的 JDBC 類型時,為空值指定 JDBC 類型。 某些驅動需要指定列的 JDBC 類型,多數情況直接用一般類型即可,比如 NULL、VARCHAR 或 OTHER。
protected JdbcType jdbcTypeForNull = JdbcType.OTHER;
// settings下的properties屬性
protected Properties variables = new Properties();


// 默認的反射器工廠,用于操作屬性、構造器方便
protected ReflectorFactory reflectorFactory = new DefaultReflectorFactory();

// 對象工廠, 所有的類resultMap類都需要依賴于對象工廠來實例化
protected ObjectFactory objectFactory = new DefaultObjectFactory();

// 對象包裝器工廠,主要用來在創建非原生對象,比如增加了某些監控或者特殊屬性的代理類
protected ObjectWrapperFactory objectWrapperFactory = new DefaultObjectWrapperFactory();

// 延遲加載的全局開關。當開啟時,所有關聯對象都會延遲加載。特定關聯關系中可通過設置fetchType屬性來覆蓋該項的開關狀態。
protected boolean lazyLoadingEnabled = false;

// 指定 Mybatis 創建具有延遲加載能力的對象所用到的代理工具。MyBatis 3.3+使用JAVASSIST
protected ProxyFactory proxyFactory = new JavassistProxyFactory(); // #224 Using internal Javassist instead of OGNL
// MyBatis 可以根據不同的數據庫廠商執行不同的語句,這種多廠商的支持是基于映射語句中的 databaseId 屬性。
protected String databaseId;


/**
 * configuration 存儲屬性之外的數據: 類型處理 TypeHandler,類型別名typeAlias,Mapper接口
 * 以下字段信息會在啟動的時候注冊到 configuration 對象
 */
// 存儲namespace與MapperProxyFactory<mapper接口> 對應關系    Map<Class<?>, MapperProxyFactory<?>> knownMappers = new HashMap<>();
protected final MIniMapperRegistry mapperRegistry = new MIniMapperRegistry(this);

// mybatis插件列表  List<Interceptor> interceptors = new ArrayList<>();
protected final InterceptorChain interceptorChain = new InterceptorChain();
// 類型注冊器,TypeAliasRegistry 構造器會添加默認值
// 用于在執行sql語句的出入參映射以及mybatis-config文件里的各種配置
// 比如<transactionManager type="JDBC"/><dataSource type="POOLED">時使用簡寫
// Map<String, Class<?>> typeAliases  存儲key別名,value 類型
protected final TypeAliasRegistry typeAliasRegistry = new TypeAliasRegistry();
//Java和jdbc類型互相轉換
protected final TypeHandlerRegistry typeHandlerRegistry = new TypeHandlerRegistry();
protected final LanguageDriverRegistry languageRegistry = new LanguageDriverRegistry();
protected ResultSetType defaultResultSetType;

//mapper.xml 中每條select|insert|update|delete 語句的映射
protected final Map<String, MappedStatement> mappedStatements = new StrictMap<MappedStatement>("Mapped Statements collection")
  .conflictMessageProducer((savedValue, targetValue) ->
                           ". please check " + savedValue.getResource() + " and " + targetValue.getResource());
protected final Map<String, Cache> caches = new StrictMap<>("Caches collection");
//Mapper.xml 通過 <ResultMap> 配置的結果集映射關系信息
protected final Map<String, ResultMap> resultMaps = new StrictMap<>("Result Maps collection");
//Mapper.xml 通過 <ParameterMap> 配置的入參映射關系信息
protected final Map<String, ParameterMap> parameterMaps = new StrictMap<>("Parameter Maps collection");
//KeyGenerator 是mybatis主鍵生成器 : mybatis提供了 3 中主鍵生成器 1:jdbc3KeyGenerator(數據庫自增主鍵) 2:SelectKeyGenerator (通過 select 語句查詢,如 oracle sequence) 3:noKeyGenerator(無自增主鍵)
protected final Map<String, KeyGenerator> keyGenerators = new StrictMap<>("Key Generators collection");

// 注冊所有 Mapper.xml 的存放路徑
protected final Set<String> loadedResources = new HashSet<>();
protected final Map<String, XNode> sqlFragments = new StrictMap<>("XML fragments parsed from previous mappers");

/**
 * 以下用于注冊出現解析異常的相關對象
 */
protected final Collection<XMLStatementBuilder> incompleteStatements = new LinkedList<>();
protected final Collection<CacheRefResolver> incompleteCacheRefs = new LinkedList<>();
protected final Collection<ResultMapResolver> incompleteResultMaps = new LinkedList<>();
protected final Collection<MethodResolver> incompleteMethods = new LinkedList<>();

 

構造器注冊別名預覽

public MiniConfigration() {
  // 內置別名注冊
  typeAliasRegistry.registerAlias("JDBC", JdbcTransactionFactory.class);
  typeAliasRegistry.registerAlias("MANAGED", ManagedTransactionFactory.class);

  typeAliasRegistry.registerAlias("JNDI", JndiDataSourceFactory.class);
  typeAliasRegistry.registerAlias("POOLED", PooledDataSourceFactory.class);
  typeAliasRegistry.registerAlias("UNPOOLED", UnpooledDataSourceFactory.class);

  typeAliasRegistry.registerAlias("PERPETUAL", PerpetualCache.class);
  typeAliasRegistry.registerAlias("FIFO", FifoCache.class);
  typeAliasRegistry.registerAlias("LRU", LruCache.class);
  typeAliasRegistry.registerAlias("SOFT", SoftCache.class);
  typeAliasRegistry.registerAlias("WEAK", WeakCache.class);

  typeAliasRegistry.registerAlias("DB_VENDOR", VendorDatabaseIdProvider.class);

  typeAliasRegistry.registerAlias("XML", XMLLanguageDriver.class);
  typeAliasRegistry.registerAlias("RAW", RawLanguageDriver.class);

  typeAliasRegistry.registerAlias("SLF4J", Slf4jImpl.class);
  typeAliasRegistry.registerAlias("COMMONS_LOGGING", JakartaCommonsLoggingImpl.class);
  typeAliasRegistry.registerAlias("LOG4J", Log4jImpl.class);
  typeAliasRegistry.registerAlias("LOG4J2", Log4j2Impl.class);
  typeAliasRegistry.registerAlias("JDK_LOGGING", Jdk14LoggingImpl.class);
  typeAliasRegistry.registerAlias("STDOUT_LOGGING", StdOutImpl.class);
  typeAliasRegistry.registerAlias("NO_LOGGING", NoLoggingImpl.class);

  typeAliasRegistry.registerAlias("CGLIB", CglibProxyFactory.class);
  typeAliasRegistry.registerAlias("JAVASSIST", JavassistProxyFactory.class);

  languageRegistry.setDefaultDriverClass(XMLLanguageDriver.class);
  languageRegistry.register(RawLanguageDriver.class);
}

 

Configuration 作為其他組件的工廠類型,提供相關工廠方法

  • Configuration 作為 Executor,StatementHander,ResultSetHander,ParameterHander 的工廠類,提供了創建這些實例對象的newXxx()工廠方法.
  • mybatis 采用工廠模式創建對象的目的是實現插件攔截邏輯

這些工廠的方法簽名如下:

public MetaObject newMetaObject(Object object) {
    return MetaObject.forObject(object, objectFactory, objectWrapperFactory, reflectorFactory);
}

public ParameterHandler newParameterHandler(MappedStatement mappedStatement, Object parameterObject, BoundSql boundSql) {
  ParameterHandler parameterHandler = mappedStatement.getLang().createParameterHandler(mappedStatement, parameterObject, boundSql);
  parameterHandler = (ParameterHandler) interceptorChain.pluginAll(parameterHandler);
  return parameterHandler;
}

public ResultSetHandler newResultSetHandler(Executor executor, MappedStatement mappedStatement, RowBounds rowBounds, ParameterHandler parameterHandler,
                                            ResultHandler resultHandler, BoundSql boundSql) {
  ResultSetHandler resultSetHandler = new DefaultResultSetHandler(executor, mappedStatement, parameterHandler, resultHandler, boundSql, rowBounds);
  resultSetHandler = (ResultSetHandler) interceptorChain.pluginAll(resultSetHandler);
  return resultSetHandler;
}

public StatementHandler newStatementHandler(Executor executor, MappedStatement mappedStatement, Object parameterObject, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) {
  StatementHandler statementHandler = new RoutingStatementHandler(executor, mappedStatement, parameterObject, rowBounds, resultHandler, boundSql);
  statementHandler = (StatementHandler) interceptorChain.pluginAll(statementHandler);
  return statementHandler;
}

public Executor newExecutor(Transaction transaction) {
  //return newExecutor(transaction, defaultExecutorType);
}

分享到:
標簽:mybatis
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定