> Java > java지도 시간 > Java Mybatis 초기화를 위해 Mapper.xml 매핑 파일을 구성하는 방법

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

王林
풀어 주다: 2023-05-03 23:10:09
앞으로
1478명이 탐색했습니다.
머리말:

전역 구성 파일을 구문 분석한 후 다음 단계는 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 인터페이스를 가져와서 처리합니다. . 구문 분석에 실패한 <resultMap> 태그

  • 파싱에 실패한 <cache-ref> 태그 처리

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

  • XMLMapperBuilder 클래스의 구성 요소() 메서드에 중점을 둡니다.<resultMap>标签

  • 处理解析失败的<cache-ref>标签

  • 处理解析失败的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&#39;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 &#39;" + resource + "&#39;. 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>

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

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

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿