Mybatis Sql Session FactoryBuider/Sql Session Factory/Sql Sessionライフサイクルまとめ
一.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を取得します。
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をオフにする必要があります。
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();
}