mybatis基本配置之别名2(TypeAlias)
2016-11-23 22:57
351 查看
mybatis在SqlSessionFactory进行build的时候会加载配置文件,调用一下代码进行配置文件的解析:
其中就包括对typeAliases节点的解析。因为该节点下又包含两个子节点,在配置文件中使用如下:
这两个节点就是和
所以解析的源代码如下:
解析完节点中的内容就会进行注册。
还是调用org.apache.ibatis.type.TypeAliasRegistry中的方法。
该类中的registerAlias方法重载了很多,参数包含传入包名/类名/类名+别名/类名+注解等。具体详情可参考源码org.apache.ibatis.type.TypeAliasRegistry.class
另外,在org.apache.ibatis.session.Configuration.class中,默认构造函数的调用中同时注册了一些类的别名:
XMLConfigBuilder.parse();
public Configuration parse() { if (parsed) { throw new BuilderException("Each XMLConfigBuilder can only be used once."); } parsed = true; parseConfiguration(parser.evalNode("/configuration")); return configuration; } private void parseConfiguration(XNode root) { try { Properties settings = settingsAsPropertiess(root.evalNode("settings")); //issue #117 read properties first propertiesElement(root.evalNode("properties")); loadCustomVfs(settings); typeAliasesElement(root.evalNode("typeAliases")); pluginElement(root.evalNode("plugins")); objectFactoryElement(root.evalNode("objectFactory")); objectWrapperFactoryElement(root.evalNode("objectWrapperFactory")); reflectionFactoryElement(root.evalNode("reflectionFactory")); settingsElement(settings); // read it after objectFactory and objectWrapperFactory issue #631 environmentsElement(root.evalNode("environments")); databaseIdProviderElement(root.evalNode("databaseIdProvider")); typeHandlerElement(root.evalNode("typeHandlers")); mapperElement(root.evalNode("mappers")); } catch (Exception e) { throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: " + e, e); } }
其中就包括对typeAliases节点的解析。因为该节点下又包含两个子节点,在配置文件中使用如下:
<typeAliases> <typeAlias type="com.xingguo.logistics.po.OrderRecordPO" alias="OrderRecordPO"/> <package name="com.xingguo.logistics.pojo"/> </typeAliases>
这两个节点就是和
所以解析的源代码如下:
private void typeAliasesElement(XNode parent) { if (parent != null) { for (XNode child : parent.getChildren()) { if ("package".equals(child.getName())) { String typeAliasPackage = child.getStringAttribute("name"); configuration.getTypeAliasRegistry().registerAliases(typeAliasPackage); } else { String alias = child.getStringAttribute("alias"); String type = child.getStringAttribute("type"); try { Class<?> clazz = Resources.classForName(type); if (alias == null) { typeAliasRegistry.registerAlias(clazz); } else { typeAliasRegistry.registerAlias(alias, clazz); } } catch (ClassNotFoundException e) { throw new BuilderException("Error registering typeAlias for '" + alias + "'. Cause: " + e, e); } } } } }
解析完节点中的内容就会进行注册。
还是调用org.apache.ibatis.type.TypeAliasRegistry中的方法。
该类中的registerAlias方法重载了很多,参数包含传入包名/类名/类名+别名/类名+注解等。具体详情可参考源码org.apache.ibatis.type.TypeAliasRegistry.class
另外,在org.apache.ibatis.session.Configuration.class中,默认构造函数的调用中同时注册了一些类的别名:
public Configuration() { 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); }
相关文章推荐
- mybatis基本配置之别名(TypeAlias)
- mybatis的配置文件-typeAlias(别名)
- 03_MyBatis基本查询,mapper文件的定义,测试代码的编写,resultMap配置返回值,sql片段配置,select标签标签中的内容介绍,配置使用二级缓存,使用别名的数据类型,条件查询ma
- Mybatis 全局配置文件中typeAliases(别名)
- 03_MyBatis基本查询,mapper文件的定义,测试代码的编写,resultMap配置返回值,sql片段配置,select标签标签中的内容介绍,配置使用二级缓存,使用别名的数据类型,条件查询ma
- mybatis-TypeAliasRegistry--类型别名注册
- 深入浅出Mybatis系列(四)---配置详解之typeAliases别名(mybatis源码篇)
- 笔记:MyBatis XML配置-typeAliases 内建别名表
- mybits的mapper配置文件的resulttype需要和mybatis配置文件中alias对应
- 深入浅出Mybatis系列(四)---配置详解之typeAliases别名(mybatis源码篇)
- 深入浅出Mybatis系列(四)---配置详解之typeAliases别名(mybatis源码篇)
- MyBatis源码解析(八)——Type类型模块之TypeAliasRegistry(类型别名注册器)
- Mybatis之typeAlias配置的3种方法
- Mybatis配置之<typeAliases>别名配置元素详述
- 深入浅出Mybatis系列(四)---配置详解之typeAliases别名(mybatis源码篇)
- mybatis配置文件resultType和resultMap的区别以及mybatis自带的别名
- MyBatis3入门程序(02_注册别名typeAlias)
- 深入浅出Mybatis系列(四)---配置详解之typeAliases别名(mybatis源码篇)
- Mybatis源码之(TypeAliasRegistry)TypeAlias别名实现机制
- JavaWeb学习笔记-mybatis-11-mybatis配置-别名typeAliases