Maison >Java >javaDidacticiel >Comment configurer le fichier de mappage Mapper.xml pour l'initialisation de Java Mybatis
Après avoir analysé le fichier de configuration global, l'étape suivante consiste à analyser le fichier Mapper, qui est analysé via XMLMapperBuilder
Méthode parse() de XMLMapperBuilder :
public void parse() { if (!configuration.isResourceLoaded(resource)) { configurationElement(parser.evalNode("/mapper")); configuration.addLoadedResource(resource); bindMapperForNamespace(); } parsePendingResultMaps(); parsePendingCacheRefs(); parsePendingStatements(); }
Appelez la méthode configurationElement() pour analyser le fichier Mapper si le fichier Mapper actuel n'a pas été chargé. Ajoutez-le à la collection Configuration.loadedResources pour éviter un chargement répété. Obtenez l'interface Mapper correspondant au fichier Mapper et enregistrez-le pour le traitement. . Balises 68a9ca67c267b134c127fbeac6659d23
dont l'analyse a échoué
Gérer les balises c9f60baecdceda902422ce5608e73ae9
dont l'analyse a échoué
Gérer les instructions SQL qui ont échoué. parse
Focus sur la méthode configurationElement() de la classe XMLMapperBuilder68a9ca67c267b134c127fbeac6659d23
标签
处理解析失败的c9f60baecdceda902422ce5608e73ae9
标签
处理解析失败的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属性
解析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
7dcb86e21553f0921cace5da2772a6c9
, cette balise est utilisée pour référencer d'autres caches Cache 🎜🎜🎜🎜Parsing la balise 62aecd17e676a41d3547c3bf97bb07b0
, cette balise est utilisée pour activer le cache de deuxième niveau de Mybatis, le cache de premier niveau est activé par défaut. Dans cette méthode, la classe MapperBuilderAssistant est analysée pour terminer la création du cache, qui est enregistré dans la collection Configuration.caches. La collection est un espace de noms et la valeur est l'objet Cache. 🎜🎜🎜🎜Parse la balise < du paramètre 🎜🎜🎜🎜Parsing de la balise <code>68a9ca67c267b134c127fbeac6659d23
, cette balise Il s'agit d'un mappage de résultats. Toutes les sous-balises sous sa balise sont analysées et stockées dans l'objet ResultMap Plus précisément, le type. dans resultMap est d'abord obtenu. Le type est l'objet Java mappé à l'ensemble de résultats, puis les sous-balises de la balise resultMap sont analysées, y compris 3edd161182fff2dd0b855ad5d33f9b63, 53384f78b45ee9f1e3082cf378b9c5b4, 350c21220441cc2f18e31a24358fe33a, 8a69e10c947129bb1dfe1f677169415f
et d'autres balises, ces balises génèrent des objets ResultMapping, puis obtiennent des attributs tels que id extends, construisent des objets ResultMapResolver, créent des objets ResultMap et les enregistrent dans la configuration 🎜🎜🎜🎜analysez la balise sql dans le .resultMaps Cette balise est utilisée pour définir des fragments SQL répétés. Les informations analysées sont enregistrées dans Configuration.sqlFragments, 5cc62b85a20462d19109e58cc4ad0bf9. /code> et d'autres nœuds SQL, ces étiquettes doivent être familières à tout le monde. Ce sont nos instructions SQL d'ajout, de suppression, de modification et d'interrogation, qui sont analysées via XMLStatementBuilder. Il analysera d'abord < , puis analysez la balise <code>d81480a879ba657d83c408e5fa1b948b
, enregistrez-la dans la collection Configuration.keyGenerators et enfin créez l'objet SqlSource via la méthode LanguageDriver.createSqlSource() pour créer l'objet MappedStatement, le sqlSource de le MappedStatement enregistre l'instruction SQL, sqlCommandType enregistre le type de l'instruction SQL et l'enregistre dans la collection Configuration.mappedStatements🎜🎜🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!