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 .<resultMap>
-Tags, die nicht geparst werden konnten Verarbeiten von
<cache-ref>
-Tags, die nicht geparst werden konnten Konzentrieren Sie sich auf die Methode „configurationElement()“ der Klasse XMLMapperBuilder
public void parse() { if (!configuration.isResourceLoaded(resource)) { configurationElement(parser.evalNode("/mapper")); configuration.addLoadedResource(resource); bindMapperForNamespace(); } parsePendingResultMaps(); parsePendingCacheRefs(); parsePendingStatements(); }
<resultMap>
标签处理解析失败的<cache-ref>
标签
处理解析失败的SQL语句
重点看一下XMLMapperBuilder类的configurationElement()方法
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属性
解析<cache-ref>
标签,这个标签是用来引用别的Cache缓存
解析<cache>
标签,这个标签是用来启用Mybatis的二级缓存的,一级缓存是默认开启的,在这个方法里解析到MapperBuilderAssistant类完成Cache的创建,保存在Configuration.caches的集合中,集合的key是namespace,值是Cache对象
解析<parameterMap>
标签,这个标签已经废弃了,一般使用parameterType
来定义参数的类名
解析<resultMap>
标签,这个标签是结果映射,它标签下的所有子标签解析后保存在ResultMap对象中,具体会解析先获取resultMap中的type,type是结果集映射成的java对象,然后解析resultMap标签的子标签,包括<constructor>、<id>、<result>、<collection>
等标签,这些标签生成ResultMapping对象,然后获取id extends等属性,构建ResultMapResolver对象,创建ResultMap对象保存到Configuration.resultMaps集合中
解析sql标签,这个标签是用来定义重复的sql片段的,解析出保存在Configuration.sqlFragments中
解析<select>、<insert>、<update>、<delete>
等SQL节点,这些标签大家肯定就熟悉了,就是我们的增删改查的sql语句,通过XMLStatementBuilder来进行解析,它会先解析<include>
标签,然后解析<selectKey>
<cache -ref>
-Tag, dieses Tag wird verwendet, um auf andere Cache-Caches zu verweisen. 🎜🎜🎜🎜Parsing <cache>
-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 < parameterMap>
Tag, dieses Tag wurde aufgegeben, im Allgemeinen wird parameterType
verwendet, um den Klassennamen zu definieren des Parameters 🎜🎜🎜🎜Beim Parsen des <resultMap>
-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 <constructor>, <id>, <result>, <collection>
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 <selectKey>
-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!