MyBatisの:コンフィギュレーションの解析

コンフィギュレーションの解析

コア・コンフィギュレーション・ファイル

  • MyBatisの-config.xmlのシステムのカーネルコンフィギュレーションファイル
  • MyBatisの設定ファイルには、深くMyBatisの動作に影響を与えることができます設定とプロパティが含まれています。
  • 次のようにコンテンツを設定することができます。
configuration(配置)
    properties(属性)
    settings(设置)
    typeAliases(类型别名)
    typeHandlers(类型处理器)
    objectFactory(对象工厂)
    plugins(插件)
    environments(环境配置)
        environment(环境变量)
            transactionManager(事务管理器)
            dataSource(数据源)
    databaseIdProvider(数据库厂商标识)
    mappers(映射器)
<!-- 注意元素节点的顺序!顺序不对会报错 -->

私たちは、DTDのヘッダファイルの上にMyBatisの-config.xmlのを読むことができます!

環境要素

<environments default="development">
  <environment id="development"> <transactionManager type="JDBC"> <property name="..." value="..."/> </transactionManager> <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>
  • 動作環境のMyBatisの構成いくつかのセットが、デフォルトの実行環境として(デフォルトで指定された)のいずれかを指定する必要があり、異なるSQLデータベースの複数にマッピングされます
  • 子要素ノード:環境

    • IDを設定することで区別環境の特定のセットには、IDは一意であることが保証しました!
    • 子要素ノード:のTransactionManager - [主催]

      <!-- 语法 -->
      <transactionManager type="[ JDBC | MANAGED ]"/>
    • 子要素ノード:データ・ソース(データソース)

      • 標準JDBCデータ・ソース・インターフェイス構成リソースJDBC接続オブジェクトを使用して、DataSource要素。
      • データソースを設定する必要があります。
      • 組み込みデータ・ソースの3つのタイプがあります。

        type="[UNPOOLED|POOLED|JNDI]")
      • unpooled:開口部とこれを達成するための接続を閉じますが、各データ・ソースが要求されます。
      • プールされた:このデータソースは、「セル」の概念を使用して実装され、同時処理要求応答方式という一般的なWebアプリケーションでJDBC接続オブジェクトを、整理します。
      • JNDI:これは、データソースは、集中またはコンフィギュレーション・データの外部ソースに、その後、基準JNDIコンテキストを配置することができる春または容器などのようなアプリケーションサーバで使用することができる実現することです。
      • 達成するために、多くのサードパーティのデータソースは、DBCP、C3P0、ドルイドなどとして、もあります....

マッパー要素

マッパー

  • マッパー:SQL文のファイルをマッピングするカスタム
  • 行って構成された他の要素のMyBatisの動作以来、私たちはマップされたSQL文を定義する準備が整いました。しかし、最初に我々はどこそれらを見つけるためにMyBatisのを指示する必要があります。Javaは、自動的にこのエリアで見つけることは良い方法を提供していないので、最良の方法は、どこのマップファイルを検索しMyBatisのを伝えることです。あなたは、参照、または(を含む完全修飾リソースロケータにリソースクラスの相対パスを使用することができ  file:/// URLで)、クラスとパッケージ名、など。マッパーは、MyBatisののコアコンポーネントの一つであり、MyBatisの3の前に、唯一つまり、XMLマッパーをサポートしています。すべてのSQL文は、XMLファイルで設定する必要があります。開始MyBatisの3よりも、インターフェイスマッパーをサポートし、このようにマッパ可能にするJavaコードの注釈定義するSQL文が非常に簡単です。

リソースの方法をご紹介

<!-- 使用相对于类路径的资源引用 -->
<mappers>
  <mapper resource="org/mybatis/builder/PostMapper.xml"/> </mappers>
<!-- 使用完全限定资源定位符(URL) -->
<mappers>
  <mapper url="file:///var/mappers/AuthorMapper.xml"/> </mappers>
<!-- 
使用映射器接口实现类的完全限定类名
需要配置文件名称和接口名称一致,并且位于同一目录下
-->
<mappers>
  <mapper class="org.mybatis.builder.AuthorMapper"/> </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.kuang.mapper.UserMapper"> </mapper>
  • 名前空間の中国の意味は次のように名前空間の役割は次のとおりです。

    1. ID名前空間と連帯保証一意のサブエレメントは、異なるマッパ区別します
    2. 結合DAOインタフェース

      • 名前空間には、インターフェースと同じ名前で命名されなければなりません
      • SQL文のidインターフェイスメソッドとマッピングファイルが対応している必要があります
    3. 名前空間の命名規則:パッケージ名+クラス名

その魔法の嘘であるそのMyBatisのマッピング文の本当のパワー嘘。理由は、その非常に強力な、XMLマッパーファイルを比較的簡単になります。あなたはそれが同じ機能を持つJDBCコードと比較取る場合は、すぐにコードの約95%の節約ができます。MyBatisのは、可能な限りあなたのための手間を軽減するために、SQLに焦点を当てるために建てられました。

プロパティの最適化

これらのデータベースは、外部から設定可能な属性と動的に交換可能である典型的なJavaファイル属性に配置してもよい、サブエレメントはまた、プロパティ要素によって伝送することができます。具体的な公式文書

私たちは、設定ファイルを最適化

第1のステップと、db.properties下のリソースディレクトリを作成します

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8
username=root password=123456

ステップ2:コンフィギュレーション・ファイルのプロパティにファイル

<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>

その他のアクションは、あなたが公式の文書を表示することができます![プレゼンテーション]の研究を率い

  • プロファイルの優先順位の問題
  • 新機能:使用プレースホルダ

typeAliases最適化

Java型のエイリアスを入力しますが、短い名前が設定されています。そして、存在の意味に関連した唯一のXML設定は、冗長性、完全修飾クラス名を低減するために使用されます。

<!--配置别名,注意顺序-->
<typeAliases>
    <typeAlias type="com.kuang.pojo.User" alias="User"/> </typeAliases>

そのように構成すると、Userそれはいずれにも使用することができるcom.kuang.pojo.User場所。

:あなたはまたのような、MyBatisのが必要なJavaビーンの下にパッケージ名を検索します、パッケージ名を指定することができます

<typeAliases>
    <package name="com.kuang.pojo"/> </typeAliases>

内の各パッケージ  com.kuang.pojo 、注釈のない状態で、最初の文字を使用するには、Java Beanが、それの別名として豆非修飾クラス名を小文字。

注釈は、注釈値の別名である場合。次の例を参照してください。

@Alias("user")
public class User { ... }

[講演]別名のいくつかの種類のQuguanネットワークルックMyBatisのデフォルト!

セットアップ

  • 設定(設定) =>ヘルプドキュメントを関連

    • レイジーローディング
    • ログイン実現
    • キャッシュオンオフ
  • 要素次の完全に構成設定の例:

    <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>

プロセッサの種類

公式ドキュメント

  • MyBatisの設定されたパラメータは、コンセントレータ内のステートメント(PreparedStatementを)を調製または結果から値を取得するかどうか、それはプロセッサの取得した種別の値がJava型に適切な方法であろう。
  • あなたはプロセッサのタイプをオーバーライドしたり、サポートしていないプロセッサのタイプまたは非標準的なタイプに対処するために独自に作成することができます。[理解するために]

オブジェクトファクトリ

公式ドキュメント

  • MyBatisの結果オブジェクトが作成されるたびに新しいインスタンスが、それはそうするオブジェクトファクトリ(ObjectFactoryの)インスタンスを使用します。
  • デフォルトのオブジェクトファクトリは、実行するために、ターゲットクラスの例のみを必要とする、またはデフォルトコンストラクタによって、または存在する場合、参照パラメータマップとコンストラクタによってインスタンス。
  • あなたがオブジェクトファクトリのデフォルトの動作を無効にしたい場合は、独自のオブジェクトファクトリを作成することによって行うことができます。[理解するために]

ライフサイクルとスコープ

スコープ(範囲)とライフサイクル

誤った使用は非常に深刻な並行性の問題につながる可能性があるため、非常に重要である我々はすでに議論異なるスコープとライフサイクルのクラスを理解します。

私たちはまず、実装プロセスのMyBatisのの分析をフローチャートを描くことができます!

1567006707407.png

スコープを理解します

  • 役割が成功を作成し、SqlSessionFactoryBuilder SqlSessionFactoryを作成することです後、それはでSqlSessionFactoryを作成するための唯一の方法が存在することができますが、長い時間をさせないように、SqlSessionFactoryBuilderは、その効果を失うことになります。従って  スコープの好ましい例は、メソッドSqlSessionFactoryBuilderの範囲である(すなわち、ローカル変数法)。
  • SqlSessionFactoryは、データベース接続プールと考えることができ、その役割はSQLSESSIONインタフェースオブジェクトを作成することです。MyBatisのの本質は、データベースのJavaの操作であるため、そのSqlSessionFactoryライフサイクルは、アプリケーション全体のMyBatisの中に存在しているので、SqlSessionFactoryの作成後、それは長期保存することが必要であり、もはや使用MyBatisのアプリケーションまで、それはSqlSessionFactory人生考えることができますアプリケーションの期間に相当MyBatisの期間。
  • SqlSessionFactoryは、データベースへの接続プールがあるので、それは、接続リソースデータベースを占有します。あなたが複数のSqlSessionFactoryを作成する場合それはデータベースリソースの制御を助長されていませんので、それから、より多くの1つのデータベース接続プールよりもそこにあるので、起きてからこれを回避しようなど、システムのダウンタイムを枯渇現れているデータベース接続のリソースになります。
  • だから、一般的に、我々はシングルトンとしてSqlSessionFactoryアプリケーションを望む傾向があり、それが共有アプリケーションです。だから、  応用範囲の最高SqlSessionFactory範囲。
  • SqlSessionFactory同等のデータベース接続プール場合、SQLSESSIONは、データベース接続(Connectionオブジェクト)に相当し、あなたは、単一のトランザクションで複数のSQLを実行することができ、それは、トランザクションをコミットまたはロールバックするために、ロールバックや他の方法をコミットします。それは、サービス要求の中で生き残る必要がありますので、全体の要求を処理した後、この接続を閉じる必要があり、それはSqlSessionFactoryに戻り、またはデータベース・リソースがすぐに裸費やされる、システムが麻痺されますので、利用ください... catch ...最後に...その適切な接近を確実にするためのステートメント。
  • そのため、スコープSQLSESSION最良の方法は、要求または範囲です。

1567007397555.png

おすすめ

転載: www.cnblogs.com/wpy188/p/12375452.html