MyBatisのメインJavaインタフェースがSQLSESSIONで使用してください。コマンドは、このインタフェースを介して実行マッピングおよびトランザクション管理にアクセスすることができます。
SQLSESSIONはSqlSessionFactoryのインスタンスによって作成され、SqlSessionFactoryオブジェクトがSQLSESSIONインスタンスを作成するために、すべてのメソッドが含まれています。SqlSessionFactory自身はあなたがSqlSessionFactoryを作成するためにXML、注釈や手からJavadiamを設定することができ、SqlSessionFactoryBuilder作成されています。
一、SqlSessionFactoryBuilder
あなたは、異なるソースからSQLSESSIONを構築することができ、それぞれが5ビルド()メソッドがあります。
SqlSessionFactoryビルド(InputStream InputStreamは)
SqlSessionFactoryビルド(InputStream InputStreamは、String型の環境)
SqlSessionFactoryビルド(InputStream InputStreamは、プロパティのプロパティ)
SqlSessionFactoryビルド(InputStream InputStreamは、文字列のenv、プロパティの小道具)
SqlSessionFactoryビルド(構成設定)
以下は、MyBatisの-config.xmlファイルからSqlSessionFactoryを作成する例を示します:
文字列リソース= "MyBatisの-config.xmlの" ; InputStream InputStreamは = Resources.getResourceAsStream(リソース) SqlSessionFactoryBuilderビルダー = 新しいSqlSessionFactoryBuilder(); SqlSessionFactory工場 = builder.build(のinputStream)。
org.apache.ibatis.ioアーカイブ内のリソースツールクラス、。リソース・ファイル内のURLは、クラスパス、ファイルシステムまたはWebからロードすることができます。
ここでは簡単な例ですが、手動で設定インスタンスを設定し、それがSqlSessionFactoryを作成する()メソッドを構築するために渡す方法をお教えし。
データソースデータソース= BaseDataTest.createBlogDataSource()。 たTransactionFactoryたTransactionFactory = 新しいJdbcTransactionFactory(); 環境環境 = 新しい環境( "開発" 、たTransactionFactory、データソース); コンフィギュレーションの設定 = 新しいコンフィギュレーション(環境)。 configuration.setLazyLoadingEnabled(真の); configuration.setEnhancementEnabled(真の); configuration.getTypeAliasRegistry()registerAlias(ブログ。。クラス); configuration.getTypeAliasRegistry()registerAlias(ポスト。。クラス); configuration.getTypeAliasRegistry()registerAlias(著者。。クラス); configuration.addMapper(BoundBlogMapper。クラス); configuration.addMapper(BoundAuthorMapper。クラス); SqlSessionFactoryBuilderビルダー = 新しいSqlSessionFactoryBuilder(); SqlSessionFactory工場 = builder.build(コンフィギュレーション)。
二、SqlSessionFactory
SqlSessionFactoryはSQLSESSIONインスタンスに6つのメソッドを作成しました。あなたは次のことを考慮する必要があり、これらの方法を選択したときに一般的に言えば:
- トランザクション処理:セッションでトランザクションを使用するか、自動コミット機能を使用する必要がありますか?
- 接続:データソースから取得MyBatisの設定を頼る必要がありますか?それとも自分自身を提供するために、コンフィギュレーションを使うのか?
- 文を実行します。必要が準備された文、またはバッチ更新を再利用MyBatisの?
共通API:
SQLSESSIONのOpenSession() SQLSESSIONのOpenSession(ブールはautoCommit) SQLSESSIONのOpenSession(コネクション接続) SQLSESSIONのOpenSession(TransactionIsolationLevelレベル) SQLSESSIONのOpenSession(ExecutorType execType、TransactionIsolationLevelレベル) SQLSESSIONのOpenSession(ExecutorType execType) SQLSESSIONのOpenSession(ExecutorType execType、ブールはautoCommit) SQLSESSIONのOpenSession(ExecutorType execType、コネクション接続) の設定getConfiguration();
デフォルトのOpenSession()メソッドは、パラメータはありません、それは次のような特性のSQLSESSIONを作成します。
- それは(それが自動的に送信されません)トランザクションを開きます。
- データソースの構成環境の現在のインスタンスから取得したConnectionオブジェクト。
- トランザクション分離レベルまたはデータソースドライブは、デフォルト設定を使用します。
- プリペアドステートメントを再利用することができない、と更新はバッチ処理されます。
(1)autoCommitが自動送信機能をオンにする場合はtrue渡します。
(2)独自の接続インスタンスへの接続パラメータに渡された接続インスタンスを使用します。
(3)それを使用しない場合は、JDBCは、5つの分離レベルをサポートして使用する、TransacationIsolationLevelと呼ばれるJavaの列挙ラッパーの使用のためのトランザクション分離レベルの呼び出しをMyBatisの(NONE、READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READとSERIALIZABLE)
(4)ExecutorType.SIMPLE:エグゼキュータのこのタイプは、特別何もしない、それは準備文の姓の各ステートメントを実行することで作成されます。ExecutorType.REUSE:エグゼキュータのこのタイプは、処理文を再利用します。ExecutorType.BATCH:エグゼキュータは、バッチのすべての更新ステートメントは、選択した場合は、必要に応じて、読みやすさの動作を保証するためにそれらの間を区別するために、彼らの真ん中に実行するだろう。
三、SQLSESSION
1.文のメソッドを実行します
これらのメソッドは、SQLにマッピングXMLファイル内のステートメントを定義SELECT、INSERT、UPDATEを実行し、削除するために使用されています。彼らは、ID属性とオブジェクトパラメータの文の各パラメータは、プリミティブ(自動包装や梱包)であってもよいし、JavaBeanの、POJOや地図、かなり自明です。
<T> T selectOne(文字列のステートメント、オブジェクトのパラメータ) <E>リスト<E> SelectListの(文字列のステートメント、オブジェクトのパラメータ) <K、V>地図<K、V> のSelectMAP(文字列のステートメント、オブジェクトパラメータ、文字列mapKey) int型(文字列のステートメント、オブジェクトのパラメータ)を挿入 int型の更新(文字列のステートメント、オブジェクトのパラメータ)を int型の削除(文字列のステートメント、オブジェクトのパラメータ)
SelectOne SelectListのは違うと単にselectOneは、NULL値またはオブジェクトを返す必要があります。戻り値が複数ある場合は、例外がスローされます。あなたが返されるオブジェクトの数がわからない場合は、SelectListのを使用しています。返されたオブジェクトが存在して表示するために、可能な解決策は、値(0または1)に戻されます。多値Map型に結果を設定するように、それは価値として、キー値として目標値をオブジェクトのプロパティを返しますので、特別な少しのSelectMAP。いないすべての文は、引数を必要とするので、ので、これらのメソッドは、パラメータの形式をリロードする必要はありません。
<T> T selectOne(文字列の文) <E>リスト<E> SelectListの(文字列の文) <K、V>地図<K、V> のSelectMAP(文字列の声明、文字列mapKey) int型の挿入(文字列の文) int型の更新(文字列声明) int型)(文字列の文を削除します
例:
// UserMapper.xml <ID = "selectUserById"このresultMap = "ユーザマップ"を選択> セレクト * ユーザから ID = #{ID} </選択> // UserDao.javaの ユーザU = session1.selectOne( "selectUserById"、1 );
最後に、あなたが戻るか、一般的に膨大なデータの場合には、コレクション(ページングクエリ)を使用するロジックを、取扱カスタム結果を提供するために、行数の範囲を限定することができますselectメソッドの3つの高度なバージョンがあります。
<E>リスト<E> SelectListの(文字列のステートメント、オブジェクトパラメータ、RowBounds rowBounds) <K、V>地図<K、V> のSelectMAP(文字列のステートメント、オブジェクトパラメータ、文字列mapKey、RowBoundsのrowbounds) 、ボイド(文字列の声明、オブジェクトを選択パラメータ、ResultHandler <T> ハンドラ) のボイドを選択(文字列の声明、オブジェクトパラメータ、RowBounds rowBounds、ResultHandler <T>ハンドラ)
RowBoundsパラメータは、指定されたレコードの数だけでなく、リミット返される結果の数をスキップするMyBatisのを伝えます。RowBoundsクラスはオフセットと限界を受信するためのコンストラクタを有し、さらに、それらは、二次割り当てられていません。
int型のオフセット= 100 ; INTの限界= 25 。 RowBoundsのrowBounds = 新しい RowBounds(限界、オフセット)。
例:
// UserMapper.xml <選択のid = "selectUsers" resultTypeと= "org.mybatis.mapper.User"> を選択 * ユーザーから </選択> // UserDao.java 一覧<ユーザー>私たち= session1.selectList( "selectUsers" 、NULL、新しい RowBounds(2、1))。
ResultHandlerパラメータを使用すると、しかし、あなたがそれを好き各行を処理することができます。あなたは、剛性保持に文の実行後の結果の合計リストの結果だけを置き換えている、ことができ、リストに追加マップとセットを作成、または各戻り値を破棄することができます。あなたはResultHandlerを使用することができます多くのことを行うには、この方法では、結果セットのリストを構築するためにMyBatisのの自身の内部使用、です。