>  기사  >  Java  >  Java Mybatis 초기화를 위해 Mapper.xml 매핑 파일을 구성하는 방법

Java Mybatis 초기화를 위해 Mapper.xml 매핑 파일을 구성하는 방법

王林
王林앞으로
2023-05-03 23:10:091380검색
머리말:

전역 구성 파일을 구문 분석한 후 다음 단계는 XMLMapperBuilder를 통해 구문 분석되는 Mapper 파일을 구문 분석하는 것입니다.

Mapper 파일 항목 구문 분석

XMLMapperBuilder의 구문 분석() 메서드:

public void parse() {
    if (!configuration.isResourceLoaded(resource)) {
      configurationElement(parser.evalNode("/mapper"));
      configuration.addLoadedResource(resource);
      bindMapperForNamespace();
    }

    parsePendingResultMaps();
    parsePendingCacheRefs();
    parsePendingStatements();
  }
  • 현재 Mapper 파일이 로드되지 않은 경우 ConfigurationElement() 메서드를 호출하여 Mapper 파일을 구문 분석합니다. 이를 Configuration.loadedResources 컬렉션에 추가하여 Mapper 파일에 해당하는 Mapper 인터페이스를 가져와서 처리합니다. . 구문 분석에 실패한 68a9ca67c267b134c127fbeac6659d23 태그

  • 파싱에 실패한 c9f60baecdceda902422ce5608e73ae9 태그 처리

  • 파싱에 실패한 SQL 문 처리 구문 분석

  • XMLMapperBuilder 클래스의 구성 요소() 메서드에 중점을 둡니다.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

    매퍼 파일 구문 분석
🎜MLMapperBuilder 클래스의 구성 요소() 메서드:🎜🎜rrreee🎜🎜🎜매퍼 파일의 네임스페이스 속성 구문 분석🎜 🎜🎜🎜 7dcb86e21553f0921cace5da2772a6c9 태그를 구문 분석합니다. 이 태그는 다른 캐시 캐시를 참조하는 데 사용됩니다. 🎜🎜🎜🎜 62aecd17e676a41d3547c3bf97bb07b0 태그를 구문 분석하면 이 태그가 사용됩니다. Mybatis의 두 번째 수준 캐시를 활성화하려면 기본적으로 첫 번째 수준 캐시가 활성화되어 있으며 MapperBuilderAssistant 클래스를 구문 분석하여 Configuration.caches 컬렉션에 저장되는 캐시 생성을 완료합니다. 컬렉션은 네임스페이스이고 값은 Cache 개체입니다. 🎜🎜🎜🎜Parse <parametermap></parametermap> 태그는 폐기되었습니다. 일반적으로 parameterType을 사용하여 클래스 이름을 정의합니다. 매개변수 🎜🎜🎜🎜 68a9ca67c267b134c127fbeac6659d23 태그를 구문 분석하면 이 태그는 해당 태그 아래의 모든 하위 태그가 구문 분석되어 ResultMap 개체에 저장됩니다. resultMap에서 Type은 결과 세트에 매핑된 Java 개체이고, 그런 다음 <constructor>, <id>, <result>를 포함하여 resultMap 태그의 하위 태그가 구문 분석됩니다. ;, 8a69e10c947129bb1dfe1f677169415f</result></id></constructor> 및 기타 태그에서 이러한 태그는 ResultMapping 객체를 생성한 다음 id 확장과 같은 속성을 가져오고, ResultMapResolver 객체를 구축하고, ResultMap 객체를 생성하고 이를 Configuration 🎜🎜🎜🎜에 저장합니다. .resultMaps 컬렉션입니다. 구문 분석된 정보는 Configuration.sqlFragments에 저장됩니다. 🎜🎜🎜🎜parse 221f08282418e2996498697df914ce4e, 3cdbca7b6e47052f0af62aa0d4c6123a, 48dd0c1f550330068948da43aff71ce0 , 5cc62b85a20462d19109e58cc4ad0bf9, 이러한 레이블은 모두에게 친숙할 것입니다. 이는 XMLStatementBuilder를 통해 구문 분석되는 추가, 삭제, 수정 및 쿼리용 SQL 문입니다. /code> 태그를 입력한 다음 d81480a879ba657d83c408e5fa1b948b 태그를 구문 분석하고 이를 Configuration.keyGenerators 컬렉션에 저장한 다음 마지막으로 LanguageDriver.createSqlSource() 메서드를 통해 SqlSource 개체를 생성하고 MappedStatement 개체를 빌드합니다. MappedStatement의 sqlSource sql 문을 기록하고, sqlCommandType은 SQL 문의 유형을 기록하고 이를 Configuration.mappedStatements 컬렉션에 저장합니다🎜🎜🎜

위 내용은 Java Mybatis 초기화를 위해 Mapper.xml 매핑 파일을 구성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제