이전 기사에서는 MyBatis의 SQLMapper 구성 파일 (1)을 확인하기 위해 XSD를 사용하는 방법을 소개했습니다. 필요한 친구는 그것을 참조 할 수 있습니다.
XSD 파일을 작성한 다음 XSD 파일을 사용하여 확인하고 SQLMAPPER 파일을 구문 분석하는 방법을 확인하고 DOPARSESQLMAPPERRESOURCEWITHSCHEMA () 메소드를 구현하십시오.
이 기능을 구현하려면 두 가지 기본 요구 사항이 있습니다.
(1) 호환성 : MyBatis의 기본 구성과 호환되어야합니다. 두 가지 수준의 호환성이 있습니다. 하나는 DTD 확인을 사용하는 것입니다. 앞에서 언급했듯이 원래 프로세스를 따를 때 호환성에 문제가 없습니다. 다른 하나는 XSD 검증을 사용하는 것이지만 MyBatis의 기본 구성과도 호환되어야합니다. 한편으로,이 호환성은 위에서 수정 된 XSD 파일에서 보장되며, 다른 한편으로는 XML 구문 분석에서도 보장해야합니다.
(2) 확장 성 : 수정의 목적은 확장 가능성이므로 확장 성도 기본 요구 사항입니다. 그러나 확장 성은 임의적이지 않으며 사용자 정의 XSD 파일 인 사양에 따라 확장해야합니다.
이 두 가지 기본 요구 사항을 충족시키기 위해 다음은 주로 Spring의 사용자 정의 네임 스페이스를 그리는 내 아이디어입니다.
1. EntityResolver를 만들고 "classpath*: **/dysd-*-namespaces.ini"와 같은 클래스 경로 아래에 지정된 모드의 구성 파일을 읽으십시오.
2. INI 파일의 네임 스페이스 메타 정보 정의 : :
네임 스페이스를 섹션의 이름으로 사용하십시오. 아래 스키마 및 파서는 네임 스페이스의 XSD 파일 및 파서 구현 클래스를 각각 나타냅니다. 이런 식으로 XML의 XSD 네임 스페이스를 기반으로 확인 파일을 찾을 수 있으며 구문 분석 항목이 있습니다.
설명 :
Apache의 Commons-Configuration은 INI 형식 파일에 대한 읽기 API를 제공합니다.
봄에는 Meta-Inf/spring.schemas 및 meta-inf/spring.handlers를 사용하여 XSD 파일 및 Parser 구현 클래스를 저장했습니다. 여기에서 INI 파일 중앙 구성을 사용하도록 수정했습니다.
모든 클래스 경로에서 와일드 카드 문자를 만족시키는 INI 파일을 읽고 있기 때문에 다른 네임 스페이스를 쉽게 확장 할 수 있습니다. XSD를 사용하여 Java에서 확인하는 방법에 대해서는 여기에서 자세히 설명하지 않습니다.
XML의 구문 분석을 컨텍스트를 구문 분석하고 파일을 구문 분석하는 세 가지 요소로 분해합니다. doparsesqlmapperresourcewithschema () 메소드도 매우 간결합니다.
보호 된 void doparsesqlmapperresourcewithschema (구성 구성, 리소스 mapperlocation) {isqlmapperparsercontext context = new sqlmapperparsercontext (configuration); xmlparserutils.parsexml (context, mapperlocation);}파서 인터페이스는 다음과 같습니다.
public interface iparser <e는 iparsercontext> {public void parse (e parsercontext, String location); public void parse (e parsercontext, String [] locationPatterns); public void parse (e parsercontext, inputstream inputstream); parsercontext, reparsercetext,);구문 분석 컨텍스트 및 파서 구현 클래스는 차례로 세 가지 수준으로 나뉩니다.
(1) 일반 구문 분석 상황 :
공개 인터페이스 IPARSERCONTEXT {public 문제자 직원 getProbleMreporter (); public eventListener getEventListener (); public sourceExtractor getSourceExtractor (); public Environment GetEnvironment ();}해당 레벨의 Parser 구현 클래스는 주로 구문 분석 파일 (예 : 문자열 와일드 카드를 리소스 개체 모음에로드)으로로드하여 반복 된 구문 분석이 수행되지 않도록하고 동시 실행을 보장합니다.
(2) XML 구문 분석 컨텍스트
public interface ixmlparsercontext 확장 iparsercontext {public boolean isnamespaceaware (); 공개 문서 로더 getDocumentLoader (); public entityResolver getEntityResolver (); public errorHandler getErrorHandler (); public XMLPARSERDELEGATE getDelegate ();}해당 레벨의 Parser 구현 클래스는 주로 리소스를 문서 개체로 변환하고 변환 프로세스 중에 확인할 책임이 있습니다.
(3) sqlmapper 구문 분석 컨텍스트
공개 인터페이스 ISQLMAPPERPARSERCONTEXT 확장 IXMLPARSERCONTEXT {public configuration getConfiguration ();}해당 레벨의 파서 구현 클래스는 주로 루트 요소가 위치한 네임 스페이스에서 파서를 찾아서 구문 분석기를 사용하여 문서를 구문 분석 할 책임이 있습니다.
마지막으로, 구문 분석은 INI 구성 파일의 skemasqlMapperNamesPaceParser 클래스에 위임됩니다. 그러나이 클래스는 텍스트 파일로 구성되어야하므로 매개 변수가있는 생성자에게는 편리하지 않으므로 SchemasqlMapperParserDelegate로 더 위임됩니다.
공개 클래스 SchemasqlMapperNamespaceParser는 inamespaceparser <isqlmapperparsercontext> {@overridepublic void init () {} @overridepublic void parse (isqlmapperparsercontext parsercontext, 문서, 리소스 자원) {schemasqlmapperparserdegateparserdegateparserdegate parse (isqlmapperparsercparsercontext parsercontext)) schemasqlmapperparserdelegate (parsercontext, document, resource); delegate.parse ();}@attredepublic void detory () {}}이 시점에서 XSD 검증이 완료되었고 XML 구문 분석 포털이 발견되었습니다. 후속 실제 구문 분석은 SchemasqlMapperParserDelegate에 있습니다.
위는 XSD를 사용하여 편집기가 소개 한 MyBatis의 SQLMapper 구성 파일을 확인하는 방법 (2)입니다. 나는 그것이 당신에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!