1、動作原理、プロセス
リーダーオブジェクトmybatis.xmlファイルによって読み取ら1は、(ファイル名とパスは、srcディレクトリの下に提案を置くためにカスタマイズすることができます);
2を、SqlSessionFactoryBuilderはオブジェクトを通してSqlSessionFactoryオブジェクトを作成し、
3を、現在のスレッドからSQLSESSIONオブジェクトを取得します。
図4に示すように、トランザクションが開始される(MyBatisのと自動的に開くデフォルト);
5、SQLSESSIONによってマッピングファイルID XXXXXMapper.xmlに対応する読み出し動作は、それによってSQL文を取得し、
6を、トランザクションをコミット(CUDに書き込む);
7、閉鎖SQLSESSIONオブジェクト、現在のSQLSESSIONオブジェクトの分離とのスレッドが、GCはできるだけ早く回復します。
MyBatisの作品、プロセスを説明するために、次の簡単なコード(ノートを参照してください):
MyBatisUtils.javaツール
1 パブリック クラスMyBatisUtils { 2 プライベート 静的にThreadLocal <SQLSESSION> THREADLOCAL = 新規のThreadLocal <SQLSESSION> (); 3 プライベート 静的SqlSessionFactory sqlSessionFactory。 4 5 静的{ 6 試み{ 7 // 1、读取配置mybatis.xml 8 リーダーリーダー= Resources.getResourceAsReader( "mybatis.xml" )。 9 // 2、创建SqlSessionFactory 10 sqlSessionFactory = 新。SqlSessionFactoryBuilder()ビルド(リーダー)。 。11 } キャッチ(例外E){ 12は e.fillInStackTrace(); 13である スロー 新しい新規のRuntimeException(E); 14 } 15 } 16 。17 プライベートMyBatisUtils(){} 18れている 19。 // 3、SQLSESSION求める。 20がある 公共の 静的SQLSESSION getSqlSession() { 21は SQLSESSION SQLSESSION = ThreadLocal.get(); 22である IF(SQLSESSION == NULL){ // SQLSESSION上に得られない場合は、以下のようにして得られる 23である SQLSESSION =sqlSessionFactory.openSession(); 24 } 25 リターンSQLSESSION。 26 } 27 28 // 7、关闭SQLSESSION 29 公共 静的 ボイドcloseSqlSession(){ 30 SQLSESSION SQLSESSION = threadLocal.get()。 31 であれば(SQLSESSION!= NULL ){ 32 sqlSession.close()。 33 threadLocal.remove()。 34 } 35 } 36 }
mybatis.xmlコアプロファイル
1 <?XMLバージョン= "1.0"エンコード= "UTF-8" ?> 2 <!DOCTYPE設定PUBLIC " - // mybatis.org//DTDコンフィグ3.0 // EN" 3 "http://mybatis.org/dtd/mybatis-3-config.dtd" > 4 < 設定> 5 < 環境デフォルト=」開発」> 6 < 環境ID = "開発" > 7 < トランザクションマネージャーのタイプ= "JDBC" /> 8 < データソースのタイプ= "POOLED" 名前= "ドライバ" 値= "oracle.jdbc.driver.OracleDriverと" /> 10 < プロパティ名= "URL" 値= "JDBC:オラクル:薄い:@localhost:1521:shoreid" /> 11 < プロパティ名=」ユーザ名」値= "zhangsan" /> 12 < プロパティ名= "パスワード" 値= "123456" /> 13 </ のdataSource > 14 </ 環境> 15 </ 環境> 16 17 <マッパーによって> <! - 。5、読み出し動作は、これにより、SQL文を取得し、SQLSESSIONによりマッピングファイルID XXXXXMapper.xmlに対応し; - > 18である < マッパーリソース= "COM /ショア/エンティティ/ StudentMapper.xml" > / 19 </ マッパーによって> 20 </ 設定>
DAO层(StudentDAO)
1 // クエリすべて(永続動作休止状態に対応する) 2 パブリックリスト<学生> listAllの(){ 3。 一覧<学生>ボス= 新しい新規のArrayList <学生> (); 4 SQLSESSION SQLSESSION = MyBatisUtils.getSqlSession(); / / 3、SQLSESSIONを得る 5。 試し{ 6つの。 ボスsqlSession.selectList =( "student.selectAll" ); 7 } キャッチ(例外E){ 8。 // sqlSession.rollback(); // トランザクションのロールバック(クエリが送信されません。 )ロールバックなし 9 System.out.println( "エラー:" + e.getMessage()); // 印刷制御局に、異常情報を取得し 10 } 最後に{ 11 // sqlSession.commit(); // 6、トランザクションをコミット(クエリ提出する必要がなく、全くロールバック) 12がなく MyBatisUtils.closeSqlSession(); // 7、。SQLSESSION閉鎖 13は } 14の リターンボス、 15 }
プロジェクトは完全なコードです: https://www.cnblogs.com/dshore123/p/12463550.html
2、細部に注意を払います
、mybatis.xmlファイル、我々はSRCに次のことをお勧めし、ファイル名をカスタマイズすることができます。
B、XXXXMapper.xmlファイルを1つのパッケージの下のオブジェクトとの提案を置くために、ファイル名は、一般に「オブジェクト名Mapper.xml」です。あなたはカスタマイズすることができます。
C、MyBatisUtilsツールは:
1、静的初期化ブロックは、MyBatisの設定ファイルがロードされXXXXMapper.xmlファイル(一回実行される)
ので、一緒に結合し、現在のスレッドとSQLSESSIONオブジェクトが(一度実行)こと、ThreadLocalのオブジェクトを使用して、2
、3ない場合は、対象からSQLSESSION SqlSessionFactoryオブジェクトを取得し、現在のスレッドのSQLSESSIONオブジェクトを取得し
、4現在のスレッドのSQLSESSIONオブジェクトを取得し、それが占有リソースを解放し、それをオフにします。
原作:DSHORE ホーム著者: http://www.cnblogs.com/dshore123/ 元から:https://www.cnblogs.com/dshore123/p/12464563.html ようこそ転載、複製、ソースを示すために確認してください。(この記事は参考になりました場合は、右下の隅をクリックすることができます勧告、またはコメントをありがとうございました!) |