3. Mybatis構成の分析

コア構成ファイル

configuration:配置,配置文件的根节点
properties:属性
settings:设置
typeAliases:类型别名
typeHandlers:类型处理器
objectFactory:对象工厂
plugins:插件
environments:环境
environment:环境变量
transactionManager:事务管理器
dataSource:数据源
mappers:映射器

環境

<environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;characterEncoding=utf8&amp;serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="mysql"/>
            </dataSource>
        </environment>
    </environments>
  • Mybatisの複数の動作環境を構成して、sqlを複数の異なるデータベースにマップします。そのうちの1つをデフォルトの動作環境として設定する必要があります。
  • 子要素ノード:環境
    • dataSource要素は、標準のJDBCデータソースインターフェースを使用して、JDBC接続オブジェクトのリソースを設定します
    • データを構成する必要があります
    • 3つの組み込みデータ型があります
      type="[UNPOOLED|POOLED|JNDI]"
      
    • unpooled:このデータソースの実装は、要求されるたびに接続を開いたり閉じたりするだけです
    • プール:このデータソースの実装は、プールの概念を使用してJDBC接続オブジェクトを編成します。これにより、人気のあるWebアプリケーションが、人気のあるリクエストの処理方法にすばやく応答できるようになります。
    • jndi:Springやアプリケーションサーバーなどのコンテナーで使用するために、コンテナーは中央または外部でデータソースを構成し、JNDIコンテキストアプリケーションを配置できます。
    • データソースには、dbcp、c3p0、druidなど、他の多くのサードパーティ実装も含まれています。
    • 特定の環境セットは、一意のIDを保証するIDを設定することで区別されます
    • 子要素ノード:transactionManagerトランザクション管理
      <transactionManager type="[JDBC|MANAGED]"/>
      
    • 子要素ノード:dataSource

マッパー

  • マッパー:ステートメントマッピングSQLを定義する
引入资源的方式:
    <!--使用相对类路径引入-->
    <mappers>
        <mapper resource="com/test/dao/UserDao.xml"/>
    </mappers>
    <!-- 使用完全限定资源定位符(URL) -->
    <mappers>
        <mapper url="file:///var/mappers/AuthorMapper.xml"/>
    </mappers>
    <!--
        将包内的映射器接口实现全部注册为映射器
        但是需要配置文件名称和接口名称一致,并且位于同一目录下
    -->
    <mappers>
        <package name="org.mybatis.builder"/>
    </mappers>

マッパーファイル

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.test.dao.UserDao">
</mapper>
  • 名前空間
    • 名前空間の名前は、インターフェースの完全修飾名でなければなりません
    • インターフェースのメソッドは、マッピングファイルのSQLステートメントのIDに対応します。

プロパティファイル

データベース接続の一部のプロパティは、一般的なJavaプロパティファイルで構成できる外部構成で動的に置き換えることができます。または、properties要素の子要素で構成できます。

  • リソースディレクトリにdb.propertiesファイルを導入する
    driver=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8
    username=root
    password=123456
    
  • 上記のファイルをプロパティ構成ファイルにインポートします
    <configuration>
        <!--导入properties文件-->
        <properties resource="db.properties"/>
    
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="${driver}"/>
                    <property name="url" value="${url}"/>
                    <property name="username" value="${username}"/>
                    <property name="password" value="${password}"/>
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <mapper resource="mapper/UserMapper.xml"/>
        </mappers>
    </configuration>
    

注:プロパティファイルは「 '&amp」文字を認識しません。「'&」 'に置き換える必要があります

typeAliases

完全修飾クラス名の冗長性を減らすために使用されるクラス名設定

<!--单独配置-->
<typeAliases>
    <typeAlias type="com.test.po.User" alias="User"/>
</typeAliases>
<!--包配置-->
<typeAliases>
    <package name="com.test.po"/>
</typeAliases>

設定

<settings>
    <setting name="cacheEnabled" value="true"/>
    <setting name="lazyLoadingEnabled" value="true"/>
    <setting name="multipleResultSetsEnabled" value="true"/>
    <setting name="useColumnLabel" value="true"/>
    <setting name="useGeneratedKeys" value="false"/>
    <setting name="autoMappingBehavior" value="PARTIAL"/>
    <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
    <setting name="defaultExecutorType" value="SIMPLE"/>
    <setting name="defaultStatementTimeout" value="25"/>
    <setting name="defaultFetchSize" value="100"/>
    <setting name="safeRowBoundsEnabled" value="false"/>
    <setting name="mapUnderscoreToCamelCase" value="false"/>
    <setting name="localCacheScope" value="SESSION"/>
    <setting name="jdbcTypeForNull" value="OTHER"/>
    <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>
  • cacheEnabledすべてのマッパー構成ファイルによって構成されたキャッシュをグローバルにオンまたはオフにします
  • lazyLoadingEnabled遅延読み込みのグローバルスイッチ。オンにすると、関連付けられているすべてのオブジェクトが遅延ロードされます。fetchTypeプロパティを設定して、特定の関連付けのアイテムのオン/オフ状態をオーバーライドできます。真/偽
  • aggressiveLazyLoadingがオンになっている場合、メソッドを呼び出すと、オブジェクトのすべての遅延読み込みプロパティが読み込まれます。それ以外の場合、遅延読み込みウェイクアップはそれぞれオンデマンドで読み込まれます。真/偽
  • multipleResultSetsEnabledで単一のステートメントが複数の結果セットを返すことができるかどうかは、データベースドライバーのサポートが必要です。真/偽
  • useColumnLabelは、列名の代わりに列ラベルを使用します。実際の性能はデータベースドライバによって異なりますので、詳細はデータベースドライバの関連ドキュメントをご参照ください。true / fasle
  • useGeneratedKeysを使用すると、JDBCは主キーの自動生成をサポートでき、データベースドライバーのサポートが必要になります。trueに設定すると、主キーの生成が自動的に使用されます。一部のデータベースドライバーはこの機能をサポートしていませんが、正常に機能します。真/偽
  • autoMappingBehaviorは、Mybatisが列をフィールドまたは属性に自動的にマップする方法を指定します。NONEは自動マッピングをオフにすることを意味し、PARTIALはネストされた結果マッピングを定義していないフィールドのみを自動的にマッピングします。FULLは、複雑な結果セットを自動的にマップします。なし|部分的|完全
  • autoMappingUnknownColumnBehaviorターゲットの不明な列または不明な属性タイプを自動的に検出する動作を指定します。なし|警告|失敗
    • NONEは何もしません
    • WARNING出力警告ログ
      'org.apache.ibatis.session.AutoMappingUnknownColumnBehavior'ログレベルをWARNに設定する必要があります
    • FAILINGマッピングエラー
      はSqlSessionExceptionをスローします
  • defaultExecutorTypeは、デフォルトのアクチュエータを構成します。シンプル|再利用|バッチ
    • シンプルな通常のアクチュエータ
    • REUSE executorは準備されたステートメントを再利用します
    • BATCH executorはステートメントを再利用するだけでなく、バ​​ッチ更新も実行します。
  • defaultStatementTimeoutは、タイムアウト期間を設定し、データベースドライバーがデータベースの応答を待機する秒数を決定します。正の整数
  • defaultFetchSizeは、駆動される結果セットの取得数(fetchSize)の推奨値を設定します。このパラメーターは、クエリ設定で上書きすることもできます。正の整数
  • defaultResultSetTypeは、ステートメントのデフォルトのスクロール戦略を指定します。FORWARD_ONLY | SCROLL_SENSITIVE | SCROLL_INSENSITIVE | DEFAULT(未設定と同等)
  • safeRowBoundsEnabledネストされたステートメントでページネーション(RowBounds)を許可するかどうか。許可されている場合はfalseに設定します。真/偽
  • safeResultHandlerEnabledネストされたステートメントで結果ハンドラの使用を許可するかどうか。許可されている場合はfalseに設定します。真/偽
  • mapUnderscoreToCamelCaseラクダのこぶ名の自動マッピング、つまりA_BからaBへのマッピングを有効にするかどうか。真/偽
  • localCacheScope Mybatisは、ローカルキャッシュメカニズムを使用して循環参照を防止し、ネストされたクエリの繰り返しを加速します。デフォルト値はSESSIONで、セッションで実行されたすべてのクエリをキャッシュします。設定値がSTATEMENTの場合、ローカルキャッシュはステートメントの実行にのみ使用され、同じSqlSessionに対する異なるクエリはキャッシュされません。セッション/ステートメント
  • jdbcTypeForNullパラメータに特定のJDBCタイプが指定されていない場合、null値のデフォルトのJDBCタイプ。一部のデータベースドライバでは、列のJDBCタイプを指定する必要があります。ほとんどの場合、NULL、VARCHAR、OTHERなどの一般的なタイプを直接使用できます。
  • lazyLoadTriggerMethodsは、オブジェクトのどのメソッドが遅延ロードをトリガーするかを指定します。値はコンマで区切られたメソッドのリストです
  • defaultScriptingLanguageは、動的SQL生成に使用されるデフォルトのスクリプト言語を指定します。値は型エイリアスまたは完全修飾クラス名です
  • defaultEnumTypeHandlerは、Enumによって使用されるデフォルトのTypeHandlerを指定します。値は型エイリアスまたは完全修飾クラス名です
  • callSettersOnNullsは、結果セットがnullの場合にマップオブジェクトのセッター(マップオブジェクトに配置)を呼び出すかどうかを指定します。これは、Map.keySet()またはnullに依存して初期化する場合に役立ちます。基本タイプ(int、booleanなど)をnullに設定できないことに注意してください。真/偽
  • returnInstanceForEmptyRow返された列がすべて空の場合、Mybatisはデフォルトでnullを返します。この設定をオンにすると、Mybatisは空のインスタンスを返します。ネストされた結果セットにも適用されることに注意してください。真/偽
  • logPrefixは、Mybatisがログ名に追加するプレフィックスを指定します。値は任意の文字列です
  • logImplは、Mybatisが使用するログの特定の実装を指定します。指定しない場合は、自動的に検索されます。SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING
  • proxyFactoryは、遅延読み込みオブジェクトを作成するためにMybatisが使用するプロキシツールを指定します。CGLIB | JAVASSIST
  • vfsImplはVFSの実装を指定します。値は、コンマで区切られたカスタムVFS実装の完全修飾クラス名です
  • useActualParamNameを使用すると、メソッドタグ内の名前をステートメントパラメータ名として使用できます。この機能を使用するには、プロジェクトでJava8ミューテーションを使用し、-parametersオプションを追加する必要があります。真/偽
  • configurationFactoryは、Configurationインスタンスを提供するクラスを指定します。この返されたConfigurationインスタンスは、逆シリアル化されたオブジェクトの遅延読み込みプロパティ値を読み込むために使用されます。このクラスには、シグネチャstatic Configuration getConfiguration()を持つメソッドが含まれている必要があります。値は型エイリアスまたは完全修飾クラス名です

ライフサイクル

  • SqlSessionFactoryBuilderの役割はSqlSessionFactoryを作成することです。作成が成功すると、SqlSessionFactoryBuilderはその役割を失うため、SqlSessionFactoryを作成するメソッドにのみ存在し、長期間存在させることはできません。したがって、SqlSessionFactoryBuilderインスタンスの最適なスコープは、メソッドスコープ(つまり、ローカルメソッド変数)です。
  • SqlSessionFactoryはデータベース接続プールと考えることができ、その役割はSqlSessionインターフェースオブジェクトを作成することです。MyBatisの本質はデータベースでのJavaの操作であるため、SqlSessionFactoryのライフサイクルはMyBatisアプリケーション全体に存在するため、SqlSessionFactoryを作成したら、MyBatisアプリケーションが使用されなくなるまで長期間保存する必要があるため、SqlSessionFactoryの寿命を考えることができます。このサイクルは、MyBatisのアプリケーションサイクルに相当します。
  • SqlSessionFactoryはデータベースへの接続プールであるため、データベースの接続リソースを占有します。複数のSqlSessionFactoryを作成すると、複数のデータベース接続プールが存在するため、データベースリソースの制御に役立ちません。また、データベース接続リソースの枯渇とシステムのダウンタイムにもつながります。
  • したがって、一般的なアプリケーションでは、SqlSessionFactoryをシングルトンとして使用し、アプリケーションで共有できるようにすることがよくあります。したがって、SqlSessionFactoryの最適なスコープはアプリケーションスコープです。
  • SqlSessionFactoryがデータベース接続プールと同等である場合、SqlSessionはデータベース接続(Connectionオブジェクト)と同等であり、トランザクションで複数のSQLを実行し、コミット、ロールバック、およびその他のメソッドを介してトランザクションを送信またはロールバックできます。したがって、ビジネスリクエストを存続させる必要があります。リクエスト全体を処理した後、接続を閉じてSqlSessionFactoryに返す必要があります。そうしないと、データベースリソースがすぐに使い果たされ、システムが麻痺するので、...キャッチしてみてください。 ...最後に...正しく閉じるためのステートメント。
    注:コンテンツのこの部分は、チュートリアルのMybatisシリーズから転送されます

おすすめ

転載: www.cnblogs.com/mageboo/p/12736905.html