Heim > php教程 > PHP开发 > TypeHandler der Mybatis-Quellcode-Analyse

TypeHandler der Mybatis-Quellcode-Analyse

高洛峰
Freigeben: 2016-11-22 12:50:34
Original
1499 Leute haben es durchsucht

Der Prozess von der Erstellung bis zur Ausführung von MapperMethod umfasst die Ausführung von SQL und die Rückgabe von Ergebnissen.

Der Prozess der Ausführung von SQL und der Rückgabe von Ergebnissen umfasst die Parametertypkonvertierung Es gibt ein relativ detailliertes Dokument auf der offiziellen Website von TypeHandler: http://www.mybatis.org/mybatis-3/zh/configuration.html#typeHandlers. Das Dokument erklärt hauptsächlich, wie TypeHandler verwendet wird Analysieren Sie den Quellcode im Zusammenhang mit TypeHandler.

1. Konfiguration

MyBatis verfügt über einen Standardtyphandler. Wenn Sie die Konfiguration anpassen müssen, ist dies ganz einfach. Fügen Sie die folgende Konfiguration zu mybatis-config.xml hinzu:

<typeHandlers>
  <typeHandler handler="org.mybatis.example.ExampleTypeHandler"/>
</typeHandlers>
Nach dem Login kopieren

Lassen Sie uns den Prozess der Konfiguration von Leseeinstellungen analysieren. In XMLConfigBuilder gibt es eine Zeile für

   /**
     * 读取配置文件组装configuration
     * @param root 配置文件的configuration节点
     */
  private void parseConfiguration(XNode root) {    try {      //issue #117 read properties first
      propertiesElement(root.evalNode("properties"));
      Properties settings = settingsAsProperties(root.evalNode("settings"));
      loadCustomVfs(settings);
      typeAliasesElement(root.evalNode("typeAliases"));
      pluginElement(root.evalNode("plugins"));
      objectFactoryElement(root.evalNode("objectFactory"));
      objectWrapperFactoryElement(root.evalNode("objectWrapperFactory"));
      reflectorFactoryElement(root.evalNode("reflectorFactory"));
      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);
    }
  }
Nach dem Login kopieren

im obigen Quellcode.

typeHandlerElement(root.evalNode("typeHandlers"));
Nach dem Login kopieren

Schauen wir uns die typeHandlerElement-Methode an

/**
   * 读取typeHandlers配置并注册
   * @param parent 配置文件typeHandlers节点
   * @throws Exception
   */
  private void typeHandlerElement(XNode parent) throws Exception {    if (parent != null) {      for (XNode child : parent.getChildren()) {        if ("package".equals(child.getName())) {
          String typeHandlerPackage = child.getStringAttribute("name");          typeHandlerRegistry.register(typeHandlerPackage);
        } else {
          String javaTypeName = child.getStringAttribute("javaType");
          String jdbcTypeName = child.getStringAttribute("jdbcType");
          String handlerTypeName = child.getStringAttribute("handler");
          Class<?> javaTypeClass = resolveClass(javaTypeName);
          JdbcType jdbcType = resolveJdbcType(jdbcTypeName);
          Class<?> typeHandlerClass = resolveClass(handlerTypeName);          if (javaTypeClass != null) {            if (jdbcType == null) {              typeHandlerRegistry.register(javaTypeClass, typeHandlerClass);
            } else {              typeHandlerRegistry.register(javaTypeClass, jdbcType, typeHandlerClass);
            }
          } else {            typeHandlerRegistry.register(typeHandlerClass);
          }
        }
      }
    }
  }
Nach dem Login kopieren

Die Codelogik in if und else entspricht den beiden Konfigurationsmethoden von typeHandler >

typeHandlerRegistry.register()
Nach dem Login kopieren

TypeHandler der Mybatis-Quellcode-Analyse wird am Ende aufgerufen. Das Obige ist die Beziehung zwischen TypeHandlerRegistry, Configuration und BaseTypeHandler.

Parameter festlegen

Wenn Sie Parameter festlegen, rufen Sie zuerst ParameterHandler.setParameters() auf, rufen Sie dann den entsprechenden typeHandler in setParameters() ab und rufen Sie schließlich typeHandler.setParameter() auf

TypeHandler der Mybatis-Quellcode-AnalyseLass uns Schauen Sie sich die setParameter-Methode von BaseTypeHandler an

Wenn der Parameter nicht null ist, wird setNonNullParameter aufgerufen, was bedeutet, dass die Unterklasse den Quellcode zum Implementieren von setNonNullParameter

BigIntegerTypeHandler:

Zu diesem Zeitpunkt wurde die Rolle von TypeHandler grob analysiert.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage