protected final Map<String, Cache> caches = new StrictMap<Cache>(“Caches collection”);
protected final Map<String, ResultMap> resultMaps = new StrictMap<ResultMap>(“Result Maps collection”);
protected final Map<String, ParameterMap> parameterMaps = new StrictMap<ParameterMap>(“Parameter Maps collection”);
protected final Map<String, KeyGenerator> keyGenerators = new StrictMap<KeyGenerator>(“Key Generators collection”);
这几个都是用来放mapper解析后的MappedStatement就是sql(insert,delete,update,select)的节点,ResultMap配置的ResultMap
ParameterMap配置的ParameterMap包括keyGenerators在save时所用的主键生成器.原因是他们用的StrictMap都是不可变的,即内部在put的时候会判断原先能否存在存在就抛出异常,这个StrictMap可以用ConcurrentHashMap,原因是要重新解析放入Configuration用并发的HashMap防止你在重新解析放入Configuration时,其它地方要调用就需等待了就是读写锁了,原因是mybatis要执行全部的statementId所用的sql时都要调用Configuration.getMappedStatement(String statementId)都是从这个mappedStatements里面get出来的.改造了这个后,热部署就简单了,可以用quartz也可以用apache提供的commons-io包中对文件的监听,只要发现发生变化就可以用XMLMapperBuilder.parse()就可以了