この記事は以前、SQLSessionFactoryBeanの再構築に基づいていたため、私が行った操作を簡単に確認します。
新しいsqlsessionfactorybeanを作成すると、初期コードはmybatis-springと同じです。
BuildSqlSessionFactory()メソッドをリファクタリングし、多数のIFステートメントを小さなメソッドのセットに抽出し、カスタム構成メソッドを予約し、一般的な属性を追加します。
コンポーネントファクトリーインターフェイスを抽出し、コンポーネントの作成ツールクラスSQLSESSIONCOMPONETFACTORYSを提供します。これは、コンポーネントの交換を容易にするためにさまざまな場所に散在する新しいXXX()を中央に管理します。
それでは、拡張方法を見てみましょう。まず、SchemasQlSessionFactoryBeanを作成し、リファクタリングされたSQLSessionFactoryBeanを継承し、XML構成の新しく作成されたクラスに同期します。
Public Class SchemasQlSessionFactoryBeanはsqlsessionfactorybeanを拡張します{}デフォルトの結果タイプの設定や指定されたタイプの略語のスキャンなど、いくつかの単純な関数拡張機能の場合、ここではあまり説明しません。ここでは、XSDを使用してSQLMapperの構成を確認するために拡張する方法に焦点を当てます。
1。sqlsessionfactorybeanのdoparsesqlmapperresource()メソッドを上書きします。この方法の機能は、SQLMapper構成ファイルを解析することです。
もちろん、互換性のために、最初にDTDであるかどうかを判断する必要があります。 DTDの場合は、元の方法に従って分析します。それ以外の場合は、カスタムメソッドに従って分析します。
Package org.dysd.dao.mybatis.schema; Import org.apache.ibatis.executor.errorcontext; Import org.apache.ibatis.session.configuration; Import org.springframework.core.nestedioexception; Import org.core.core.core.core.core.core.core.core.core.core.core.corework.core.core.corework.corework.corework.corework.corework.corework.core.io. org.springframework.util.xml.xmlvalidationmodedetector; public class schemasqlsessionfactorybeanはsqlsessionfactorybean {@override rutectected void doparsesqlmapperresource(構成、構成、リソースマッパーロケーション){intediexeext; modeextion modationmode(extectionextationmode)を投げます。 == XmlValidationModeDetector.VALIDATION_DTD){//If it is DTD, use Mybatis official parsing super.doParseSqlMapperResource(configuration, mapperLocation);}else{try {// Use Schema to verify this.doParseSqlMapperResourceWithSchema(configuration, mapperLocation);} catch (Exception e){新しいnestedioexception( "マッピングリソースの解析に失敗した: '" + mapperlocation + "'"、e);}最後に{errorcontext.instance()。reset();}}}プロトリックプロトリートプロトリートプロトリックmapperLocotocation)nestedioexception {int mode = -1; try {xmlvalidationModedEtector detector = new xmlvalidationModedEtector(); mode = detector.detectvalidationMode(mapperlocation.getInputStream();} catch(例外E) "'"、e);}最後に{errorcontext.instance()。reset();} return mode;}}}ここでは、XML構成ファイルの検証モードを検出するために、春にXMLValidationModedEtectorを借ります。論理的にシンプルで、1行を1行読み取るだけです。テキストが開始される前に、DTD定義があることがわかった場合、DTDモードを返します。それ以外の場合は、XSDモードを返します(実際、検出モードがスプリングを借用するだけでなく、その背後にあるカスタムネームスペースもスプリングを借ります)。
この時点で、SQLMapper構成ファイルの解析は2つのブランチに分割されており、これはMyBatisの公式解析と互換性があり、XSDモードでの解析はDoparsESQLMAPPERRESOURCEWITHSCHEMA()の方法に移動します。
2。sqlmapperの検証のためにXSDファイルを作成します(XSDの基本的な知識が必要です。このブログのXMLパーツに関する調査メモを参照してください)
1.最初にXMLツールを使用して、MyBatisのDTDファイルを元のXSDファイルに変換します。この機能を備えた多くのXMLツールがあります。オンラインで検索できます。
ここに3つのレベルがあります:
(1)ルート要素(マッパー要素):sqlmapperファイルに対応するには、子要素の論理的分類を表す名前空間属性があります。ここの名前空間属性はXMLネームスペースとは異なることに注意する必要があります。前者はMyBatis自体の論理的分類であり、後者はXMLファイルに表示されるXML要素と属性制約を定義するために使用されます。
(2)第1レベルの子要素(キャッシュ|キャッシュ-Ref | resultMap | parametermap | sql | insert | update | delete | select):マッパーの第1レベルの子要素。 MyBatisフレームワークには、第1レベルの子要素の処理が異なるため、別のレベルとして使用されます。主に追加、削除、およびチェックステートメントを変更するために変更されるため、ステートメントレベルのステートメント要素と呼ばれます。
(3)その他の要素(sql構成テキスト、| strim | where | set | foreach | chood | if):スクリプトレベルのスクリプト要素と呼ばれる動的スクリプト要素の構成に使用されるテキスト
2。XSDファイルの生成に基づいて次の変更を行います
(1)次のような名前空間を追加します。
<?xmlバージョン= "1.0" encoding = "utf-8" standalone = "no"?> <xsd:schema xmlns = "http://dysd.org/schema/sqlmapper" targetnamespace = "http://dysd.org/schema/sqlmapper" xmlns:xsd = "http://www.w3.org/2001/xmlsema version = "1.0">
(2)第1レベルの要素を要素グループステートメントグループにパッケージ化する
(3)マッパー要素を変更して、他の名前空間の要素が表示されるようにする
(4)動的スクリプト要素を要素グループdynascriptgroupに包み、他の名前の要素が表示されるようにする
(5)dynascriptgroupを使用して、<select>要素などの動的なスクリプト要素が表示される場所に置き換えます
(6)StatementTypeが列挙タイプとして取得できる3つの値ステートメントを定義するなど、他のいくつかの最適化:
<XSD:SimpleType name = "StatementType"> <XSD:制限ベース= "xsd:token"> <xsd:enumeration value = "statement" /> <xsd:enumeration value = "prepent" /> <xsd:列挙値= "callable" />> < /xsd:simpletype>
同様のものには、parametermode、jdbctype、javatypeなどが含まれます。
上記は、MyBatisを検証するためにXSDが使用するSQLMapper構成ファイルの概要です。私はそれが誰にでも役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は、すべての人に時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!