Mybatis Sql Session FactoryBuider/Sql Session Factory/Sql Sessionライフサイクルまとめ

5249 ワード

一.Mybatisの基本構成:コアコンポーネント
1.Sql Session FactoryBuider
     コンストラクタは、構成情報に基づいてSql Session Factory(工場インターフェース)の生成を担当しています。
2.Sql Session Factory
     本工場のインターフェースによりSql Sessionを生成する。
3.Sql Session
    Sqlを送信して実行し、結果を返しても良いし、Mapperインターフェースを取得することもできます。
4.Sql Mapper
    一つのJavaインターフェースと対応するXMLファイル(または注釈)から構成されており、対応するSQLとマッピングルールを提供し、SQLを送信して実行し、結果を返す必要がある。
Sql Session Factory BuiildからSql Session Factoryを作成する方法を例に示し、Sql Sessionを取得します。
package forum.dao;

import java.io.IOException;
import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.BeforeClass;


public class BaseMapperTest{

    private static SqlSessionFactory sqlSessionFactory;

    @BeforeClass
    public static void init() {

        System.out.println("sys statup");
        try {
            //      
            Reader reader = Resources.getResourceAsReader("res/mybatis/mybatis-config.xml");
            //  sqlSessionFactory
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            reader.close();

        }
        catch(IOException ex) {         
            ex.printStackTrace();
        }
    }
    /*  sqlSession/
    public SqlSession getSqlSession() {
        return BaseMapperTest.sqlSessionFactory.openSession();
    }
}
sql Sessionを取得します
public class UserMapperTest  extends BaseMapperTest {   
    @Test
    public void SelectByIdTest() {
        SqlSession  sqlSession = getSqlSession();   
        try {       
           //           
            TUserMapper userMapper = sqlSession.getMapper(TUserMapper.class)
            //  Sql  ,       
            TUser user = userMapper.selectByPrimaryKey(1);  
            printUser(user);
        }
        finally {
            //      sqlSession,    
            sqlSession.close();
        }

    }
}
二.ライフサイクル
1.Sql Session FactoryBuider
    Sql Session FactoryBuiderは、注釈またはXML方式を利用してSql Session Factoryを作成します。これによって複数のSql Session Factoryを構築でき、構築が完了すると機能がなくなり、そのライフサイクルは局所的な方法だけが存在する。
2.Sql Session Factory
     プログラムがデータベースにアクセスするたびに、Sql Session Factoryを通じてSql Sessionを取得する必要がありますので、そのライフサイクルはMybatisのライフサイクル全体に存在します。     もし一つのデータベースが複数のSql Session Factoryを作成すると、作成するたびにより多くのデータベース接続リソースを開くので、データベースの接続リソースはすぐに使い果たします。したがって、各データベースはSql Session Factoryだけを作成するべきです。
3.Sql Session
    Sql Sessionはセッションで、JDBCのConnectionオブジェクトに相当しています。その生命の第一号はデータベースに依頼して事務を処理する過程で、例えば照会、挿入などの操作を行うべきです。
     Sql Sessionは、スレッドが安全でないオブジェクトであり、マルチスレッドに関わる場合は、データベースの分離レベル、データベースロックなどの高度な特性に注意する必要があります。
     Sql Sessionを作成するたびに、データベースの接続プールのリソースが減少し、システム性能が低下します。そのため、使うたびにSql Sessionをオフにする必要があります。
finally {
    //      sqlSession,    
    sqlSession.close();
}