Heim  >  Artikel  >  Java  >  So konfigurieren Sie die Zuordnungsdatei Mapper.xml für die Initialisierung von Java Mybatis

So konfigurieren Sie die Zuordnungsdatei Mapper.xml für die Initialisierung von Java Mybatis

王林
王林nach vorne
2023-05-03 23:10:091381Durchsuche
Vorwort:

Nach dem Parsen der globalen Konfigurationsdatei besteht der nächste Schritt darin, die Mapper-Datei zu analysieren, die über XMLMapperBuilder analysiert wird

Rufen Sie die Methode „configureElement()“ auf, um die Mapper-Datei zu analysieren, wenn die aktuelle Mapper-Datei nicht geladen wurde. Fügen Sie sie der Sammlung „Configuration.loadedResources“ hinzu, um ein wiederholtes Laden zu verhindern, und registrieren Sie sie für die Verarbeitung . 68a9ca67c267b134c127fbeac6659d23-Tags, die nicht geparst werden konnten

Verarbeiten von c9f60baecdceda902422ce5608e73ae9-Tags, die nicht geparst werden konnten
  • Behandeln von SQL-Anweisungen, die nicht geparst werden konnten parse
  • Konzentrieren Sie sich auf die Methode „configurationElement()“ der Klasse XMLMapperBuilder
  • Parsen Sie die Mapper-Datei

  • Die Methode „configurationElement()“ der Klasse „MLMapperBuilder“:
  • public void parse() {
        if (!configuration.isResourceLoaded(resource)) {
          configurationElement(parser.evalNode("/mapper"));
          configuration.addLoadedResource(resource);
          bindMapperForNamespace();
        }
    
        parsePendingResultMaps();
        parsePendingCacheRefs();
        parsePendingStatements();
      }
    68a9ca67c267b134c127fbeac6659d23标签

  • 处理解析失败的c9f60baecdceda902422ce5608e73ae9标签

  • 处理解析失败的SQL语句

重点看一下XMLMapperBuilder类的configurationElement()方法

解析Mapper文件

MLMapperBuilder类的configurationElement()方法:

private void configurationElement(XNode context) {
    try {
      String namespace = context.getStringAttribute("namespace");
      if (namespace == null || namespace.isEmpty()) {
        throw new BuilderException("Mapper's namespace cannot be empty");
      }
      builderAssistant.setCurrentNamespace(namespace);
      cacheRefElement(context.evalNode("cache-ref"));
      cacheElement(context.evalNode("cache"));
      parameterMapElement(context.evalNodes("/mapper/parameterMap"));
      resultMapElements(context.evalNodes("/mapper/resultMap"));
      sqlElement(context.evalNodes("/mapper/sql"));
      buildStatementFromContext(context.evalNodes("select|insert|update|delete"));
    } catch (Exception e) {
      throw new BuilderException("Error parsing Mapper XML. The XML location is '" + resource + "'. Cause: " + e, e);
    }
  }
  • 解析Mapper文件的namespace属性

  • 解析c9f60baecdceda902422ce5608e73ae9标签,这个标签是用来引用别的Cache缓存

  • 解析62aecd17e676a41d3547c3bf97bb07b0标签,这个标签是用来启用Mybatis的二级缓存的,一级缓存是默认开启的,在这个方法里解析到MapperBuilderAssistant类完成Cache的创建,保存在Configuration.caches的集合中,集合的key是namespace,值是Cache对象

  • 解析4fb23b7f5df2ee11743b998ba01c37fd标签,这个标签已经废弃了,一般使用parameterType 来定义参数的类名

  • 解析68a9ca67c267b134c127fbeac6659d23标签,这个标签是结果映射,它标签下的所有子标签解析后保存在ResultMap对象中,具体会解析先获取resultMap中的type,type是结果集映射成的java对象,然后解析resultMap标签的子标签,包括3edd161182fff2dd0b855ad5d33f9b63、53384f78b45ee9f1e3082cf378b9c5b4、350c21220441cc2f18e31a24358fe33a、8a69e10c947129bb1dfe1f677169415f等标签,这些标签生成ResultMapping对象,然后获取id extends等属性,构建ResultMapResolver对象,创建ResultMap对象保存到Configuration.resultMaps集合中

  • 解析sql标签,这个标签是用来定义重复的sql片段的,解析出保存在Configuration.sqlFragments中

  • 解析221f08282418e2996498697df914ce4e、3cdbca7b6e47052f0af62aa0d4c6123a、48dd0c1f550330068948da43aff71ce0、5cc62b85a20462d19109e58cc4ad0bf9等SQL节点,这些标签大家肯定就熟悉了,就是我们的增删改查的sql语句,通过XMLStatementBuilder来进行解析,它会先解析dcf91641426a34cf32ecc36140f28baf标签,然后解析d81480a879ba657d83c408e5fa1b948b

  • Parsen Sie das Namespace-Attribut der Mapper-Datei
🎜🎜🎜Parse 7dcb86e21553f0921cace5da2772a6c9-Tag, dieses Tag wird verwendet, um auf andere Cache-Caches zu verweisen. 🎜🎜🎜🎜Parsing 62aecd17e676a41d3547c3bf97bb07b0-Tag, dieses Tag wird verwendet Um den Cache der zweiten Ebene von Mybatis zu aktivieren, ist der Cache der ersten Ebene standardmäßig aktiviert. In dieser Methode wird die Klasse MapperBuilderAssistant analysiert, um die Erstellung des Caches abzuschließen, der in der Sammlung von Configuration.caches gespeichert wird Die Sammlung ist ein Namespace und der Wert ist das Cache-Objekt. 🎜🎜🎜🎜Parse 5d5b7ea9af2875080bd5c2394125852a Tag, dieses Tag wurde aufgegeben, im Allgemeinen wird parameterType verwendet, um den Klassennamen zu definieren des Parameters 🎜🎜🎜🎜Beim Parsen des 68a9ca67c267b134c127fbeac6659d23-Tags handelt es sich um eine Ergebniszuordnung. Alle Untertags unter seinem Tag werden analysiert und im ResultMap-Objekt gespeichert In der resultMap wird zuerst der Typ abgerufen, der dem Ergebnissatz zugeordnet ist, und dann werden die Untertags des resultMap-Tags analysiert, einschließlich 3edd161182fff2dd0b855ad5d33f9b63, 53384f78b45ee9f1e3082cf378b9c5b4, 350c21220441cc2f18e31a24358fe33a, 8a69e10c947129bb1dfe1f677169415f und andere Tags, diese Tags generieren ResultMapping-Objekte, rufen dann Attribute wie ID-Erweiterungen ab, erstellen ResultMapResolver-Objekte, erstellen ResultMap-Objekte und speichern sie in der Konfiguration. 🎜🎜🎜🎜Parsen Sie das SQL-Tag in den .resultMaps Sammlung. Dieses Tag wird verwendet, um wiederholte SQL-Fragmente zu definieren. Die analysierten Daten werden in Configuration.sqlFragments gespeichert ;delete>, diese Bezeichnungen müssen jedem bekannt sein. Es handelt sich um unsere SQL-Anweisungen zum Hinzufügen, Löschen, Ändern und Abfragen, die über XMLStatementBuilder analysiert werden. Zuerst wird < analysiert >-Tag, analysieren Sie dann das <code>d81480a879ba657d83c408e5fa1b948b-Tag, speichern Sie es in der Configuration.keyGenerators-Sammlung und erstellen Sie schließlich das SqlSource-Objekt über die Methode LanguageDriver.createSqlSource(), um das MappedStatement-Objekt, die sqlSource, zu erstellen des MappedStatement Zeichnen Sie die SQL-Anweisung auf, sqlCommandType zeichnet den Typ der SQL-Anweisung auf und speichert ihn in der Configuration.mappedStatements-Sammlung🎜🎜🎜

Das obige ist der detaillierte Inhalt vonSo konfigurieren Sie die Zuordnungsdatei Mapper.xml für die Initialisierung von Java Mybatis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen