Эта статья ранее была основана на реконструкции SQLSessionFactoryBean, поэтому я кратко рассмотрю, какие операции я сделал:
Создайте новый SQLSessionFactoryBean, а начальный код такой же, как Mybatis-Spring;
Рефактор метод buildSQlSessionFactory (), извлеките многочисленные операторы в набор небольших методов, резервируйте методы пользовательских конфигурации и добавьте общие атрибуты методов получения;
Извлеките компоненты заводских интерфейсов и обеспечивают класс инструмента создания компонентов SQLSessionComponetFactorys, который в центре управляет новым XXX (), разбросанным в разных местах, чтобы облегчить замену компонентов.
Теперь давайте посмотрим, как расширить. Во -первых, создайте SchemasqlSessionFactoryBean, наследуйте рефактор SQLSessionFactoryBean и синхронизируйте его до недавно созданного класса в конфигурации XML:
открытый класс SchemasqlSessionFactoryBean Extends sqlSessionFactoryBean {}Для некоторых простых расширений функций, таких как настройка типа результата по умолчанию и сканирование аббревиатуры указанного типа, я не буду много обсуждать его здесь. Здесь я сосредоточусь на том, как расширить, чтобы проверить конфигурацию SQLMapper с использованием XSD.
1. Перезаписать метод Doparsesqlmapperresource () в sqlSessionFactorybean. Функция этого метода состоит в том, чтобы анализировать файл конфигурации SQLMapper.
Конечно, для совместимости вам нужно сначала определить, является ли это DTD. Если это DTD, проанализируйте его в соответствии с исходным методом, в противном случае проанализируйте его в соответствии с пользовательским методом:
пакет org.dysd.dao.mybatis.schema; import org.apache.ibatis.executor.errorcontext; import org.apache.ibatis.session.configuration; импорт org.springframework.core.nestioexception; импорт org.spramework.core.resource; org.springframework.util.xml.xmlvalidationmodedetector; открытый класс SchemasqlSessionFactorybean extends sqlSessionFactorybean {@OverrideProtected void DoParsesqlmapperresource (конфигурация, Mappercopation) trows nestedioexcept DeTectValidationMode (mapperLocation); if (mode == xmlvalidationModedetector.validation_dtd) {// Если это dtd, используйте официальный парирование mybatis super.doparsesqlmapperresource (configuration, mapperlocation); this.doparsesqlmapperresourcewithschema (configuration, mapperlocation);} catch (exception e) {throw new inestioexception («Не удалось проанализировать отображение ресурса: '» + mapperlocation + "'", e);} наконец {errycontext.instance (). Doparsesqlmapperresourcewithschema (конфигурация конфигурации, ресурс mapperlocation) {} private int detectValidationMode (ресурс MapperLocation) Throws nestEdioException {int mode = -1; try {xmlvalidationmodedectector detector = new xmlvalidationmodetector (); Detector.DetectValidationMode (mapperLocation.getInputStream ());} Catch (Exception e) {Thress New IntedioException («Не удалось проанализировать отображение ресурса: '" + mapperlocation + "'", e);} наконец {errorContext.Instance (). Reset ();} режим возврата;}}}}}}}}}}}}}}}}}}}}}})Здесь мы заимствуем XmlvalidationModedector в пружине, чтобы обнаружить режим проверки файлов конфигурации XML. Это логически просто, просто прочитайте одну строчку за одним. Перед тем, как текст начнется, если вы обнаружите, что есть определение DTD, вы вернете режим DTD, в противном случае вы вернете режим XSD (на самом деле, не только режим обнаружения заимствует пружину, но и на пользовательское пространство имен за ним также заимствует пружину).
На данный момент анализ файла конфигурации SQLMapper был разделен на две ветви, которые совместимы с официальным анализом mybatis, а парирование в режиме XSD перемещается с методом Doparsesqlmapperresourcewithschema ().
2. Напишите файл XSD для проверки SQLMAPPER (требует некоторых базовых знаний о XSD, пожалуйста, обратитесь к примечаниям исследования в области XML в этом блоге)
1. Сначала используйте инструмент XML для преобразования файла DTD MyBatis в исходный файл XSD. Есть много инструментов XML, которые имеют эту функцию. Вы можете искать в Интернете.
Вот три уровня:
(1) root element (элемент Mapper): соответствующий файлу sqlmapper, существует атрибут пространства имен, представляющий логическую классификацию его дочерних элементов. Следует отметить, что атрибут пространства имен здесь отличается от пространства имен XML. Первый - это логическая классификация самого Mybatis, а последний используется для определения элементов XML и ограничений атрибутов, которые могут отображаться в файлах XML.
(2) Дочерние элементы первого уровня (кэш | cache-ref | resultmap | parametermap | sql | вставка | Обновление | Delete | Select): дочерние элементы первого уровня Mapper. Поскольку структура Mybatis имеет различную обработку дочерних элементов первого уровня, она используется в качестве отдельного уровня. Поскольку это в основном добавляет, удаляет и изменяется для проверки операторов, он называется элементом оператора на уровне оператора.
(3) Другие элементы (текст конфигурации SQL, включите | TRIM | Где | SET | FOREACH | Выберите | Если): текст, используемый для настройки сценариев SQL, а также динамические элементы сценария, называемые элементами сценария уровня скрипта
2. Сделайте следующие изменения на основе генерации файлов XSD
(1) Добавить пространство имен, например:
<? xml version = "1.0" Encoding = "UTF-8" STANTALONE = "Нет"?> <XSD: Схема xmlns = "http://dysd.org/schema/sqlmapper" targetnamespace = "http://dysd.org/schema/sqlmapper" xmlns: xsd = "http://www.w3.org/2001/xmlschema" elementformdef.
(2) Упакуйте элемент первого уровня в группу элементов Group Group
(3) Изменить элемент Mapper, чтобы позволить появиться элементы в других пространствах имен
(4) Обертывание элементов динамического сценария в группу элементов DynascriptGroup и позволяет появиться другие названные элементы
(5) Используйте DynascriptGroup, чтобы заменить там, где появляются динамические элементы сценария, такие как <elect> элементы
(6) Некоторые другие оптимизации, такие как определение оператора трех значений, подготовленных и призывных, которые могут быть приняты с помощью операторов в виде типов перечисления:
<xsd: simpletype name = "atportiontype"> <xsd: ограничение base = "xsd: token"> <xsd: enumeration value = "sturn" /> <xsd: enumeration value = "Подготовлено" /> <xsd: enumeration value = "calltable" /> < /xsd: Retriction> < /xsd: simpetype> " /> < />
Аналогичные включают ParameterMode, JDBCTYPE, Javatype и т. Д.
Выше приведено резюме файла конфигурации SQLMapper, используемого XSD для проверки MyBatis. Я надеюсь, что это будет полезно для всех. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит всем вовремя. Большое спасибо за вашу поддержку сайту wulin.com!