MyBatisは9のMyBatis-pringを勉強します.さらに勉強します.


事務
MyBatis-pringを使用する主な理由は、MyBatisがSpringの事務管理に参加できるようにすることです.MyBatisに新しい特定のトランザクションマネージャを作成する代わりに、MyBatis-priningはSpringに存在するDataSourceTransation Managerを利用しています.
SpringのPlatform Transation Managerが配置されれば、Springで通常のやり方で事務を配置することができます.TransactコメントとAOP(Asppect-Oriented Program)スタイルの配置はすべてサポートされています.トランザクション処理中に、個別のSql Sessionオブジェクトが作成され、使用されます.事務が完了すると、このセッションは適切な方法で提出またはロールバックします.
いったん事務が作成されると、MyBatis-priningは透明な管理事務を行います.あなたのDAO類には追加のコードは必要ありません.
Spring管理のSql SessionでSql Session.com miit()を呼び出すことはできません.Sql Session.rollback()またはSql Session.close()方法.このようにすれば、ユニスティックモードExceptionの異常が出ます.注意注入されたマッパーを使用する場合はそれらの方法にアクセスできません.
方式1:標準方式でSpringの事務処理を開始し、SpringのXMLプロファイルで簡単にDataSourceTransation Managerオブジェクトを作成します.
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource" />
</bean>
指定されたDataSourceは普通あなたがSpringを使っている任意のJDBC DataSourceです.これは接続池とJNDI検索で得られたDataSourceを含んでいる.
注意してください.事務マネージャに指定されたDataSourceはSql Session FactoryBenを作成するのと同じデータソースでなければ、事務マネージャは動作しません.
方式二:JEE容器管理事務JEE容器を使用しており、かつSpringを容器管理事務(Continer manage d transactions、CMT、訳者注)に参加させたい場合、SpringはJtaTransation Managerまたは容器指定のサブクラスを使用して配置されるべきです.この仕事をする一番便利な方法はSpringの事務の名前空間です.
<tx:jta-transaction-manager />
このような構成では、MyBatisはCMTによって構成される他のSpringトランザクションリソースと同じである.Springは任意の存在の容器事務を自動的に使用し、上にSql Sessionを付加します.ビジネスを開始していない場合や、ビジネス設定に基づいて、Springは新しい容器管理事務を開始します.
注意してください.Springの事務管理ではなくCMTを使いたいなら、Sql Session FactoryBenを基本的なMyBatisのManagedTransactoryを使用して、他の任意のSpring事務管理器ではなく、Sql Session Factoryを配置しなければなりません.
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="transactionFactory">
    <bean class="org.apache.ibatis.transaction.managed.ManagedTransactionFactory" />
  </property>  
</bean>
Sql Sessionを使う
MyBatis-Session Factoryをそのまま使う必要はなくなりました.あなたのbeanはスレッドを通して安全なSql Sessionに注入できます.Springの事務構成に基づいて自動的に提出し、ロールバックし、sessionをオフします.注意通常はSql Sessionを直接使用する必要はありません.ほとんどの場合、Mapper FactoryBeanは、beanに必要なマッパーを注入します.
Sql Session Template
Sql Session TemplateはMyBatis-pringの中核です.このクラスはMyBatisのSql Sessionを管理して、MyBatisのSQLメソッドを呼び出して、翻訳が異常です.Sql Session Templateはスレッドが安全で、複数のDAOに共有されて使用できます.
SQLメソッドを呼び出した場合、マッパーgetMapper()方法から戻る方法を含み、Sql Session Templateは使用するSql Sessionが現在のSpringのトランザクションに関連していることを保証する.また、sessionのライフサイクルを管理し、必要なシャットダウンを含めて、ロールバック操作を行います.
Sql Session TemplateはSql Sessionインターフェースを実現しています.つまり、コードの中でMyBatisのSql Sessionを置換する必要はありません.Sql Session Templateは通常、デフォルトのMyBatisの代わりに使用されるDefault Sql Sessionであり、テンプレートはSpringのトランザクションに参加でき、複数の注入されたマッピングクラスに使用される場合もスレッドが安全である.同じアプリケーションの2つのクラスの間の変換は、データの整合性の問題を引き起こす可能性があります.
Sql Session Templateオブジェクトは、構造方法のパラメータとしてSql Session Factoryを使用して作成できます.
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
  <constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
Sql Session Templateには、ExectorTypeをパラメータとして使用する構造方法があります.これはオブジェクトの作成を許可します.例えば、一つ.
バッチSql Sessionですが、以下のSpring構成のXMLファイルを使用しています.
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
  <constructor-arg index="0" ref="sqlSessionFactory" />
  <constructor-arg index="1" value="BATCH" />
</bean>
このbeanは今直接DAO beanに注入できます.beanにSql Session属性を追加する必要があります.次のコードのようです.
<bean id="userDao" class="org.mybatis.spring.sample.dao.UserDaoImpl">
  <property name="sqlSession" ref="sqlSession" />
</bean>
public class UserDaoImpl implements UserDao {

  private SqlSession sqlSession;

  public void setSqlSession(SqlSession sqlSession) {
    this.sqlSession = sqlSession;
  }

  public User getUser(String userId) {
    return (User) sqlSession.selectOne("org.mybatis.spring.sample.mapper.UserMapper.getUser", userId);
  }
}
大量操作を使用した子供に付き添う場合、以下のこれも使用できます.
public void insertUsers(User[] users) {
   for (User user : users) {
     sqlSession.insert("org.mybatis.spring.sample.mapper.UserMapper.insertUser", user);
   }
 }
Sql Session DaoSupport Sql Session DaoSupportは、Sql Sessionを提供する抽象的なサポートクラスです.get Sql Session()を呼び出すとSql Session Templateが得られます.その後はSQL方法を実行するために使用できます.
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {
  public User getUser(String userId) {
    return (User) getSqlSession().selectOne("org.mybatis.spring.sample.mapper.UserMapper.getUser", userId);
  }
}
通常はMapper FactoryBeanはこのタイプの優先順位です.追加コードが必要ではないからです.しかし、DAOの中で他のMyBatisではない仕事や具体的な種類が必要であれば、このクラスはとても役に立ちます.
Sql Session DaoSupportはsql Session Factoryまたはsql Session Template属性を設定する必要があります.これらは明確に設定されているか、またはSpringによって自動的に組み立てられている.両方とも設置されているとSql Session Factoryは無視されます.クラスUserMapperImplはSql Session DaoSupportのサブクラスであると仮定して、Springでは次のような構成ができます.
<bean id="userMapper" class="org.mybatis.spring.sample.mapper.UserDaoImpl">
  <property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
注入マッパー
Mapper FactoryBen
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
  <property name="mapperInterface" value="org.mybatis.spring.sample.mapper.UserMapper" />
  <property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
Mapper FactoryBenが作成したエージェントはUserMapperインターフェースを実現し、アプリケーションに注入します.プロキシは運行環境の中で作成されますので、それでは
指定されたマッパーはインターフェースでなければなりません.
具体的な実現クラスではない.
UserMapperが対応するMyBatisのXMLマッパーファイルを持っている場合、XMLファイルがクラスパスの位置とマッパー類と同じであれば、Mapper FactoryBernに自動解析されます.
. MyBatisプロファイルにマッパーを指定する必要はありません.
マッパーのXMLファイルが異なるクラスパスでない限り.Sql Session FactoryBenのconfigLocation属性を参照することができます.
を選択します.
任意のSpring beanを注入するのと同じ方法で直接的にbusines/serviceオブジェクトに注入することができる.
<bean id="fooService" class="org.mybatis.spring.sample.mapper.FooServiceImpl">
  <property name="userMapper" ref="userMapper" />
</bean>
public class FooServiceImpl implements FooService {

  private UserMapper userMapper;

  public void setUserMapper(UserMapper userMapper) {
    this.userMapper = userMapper;
  }

  public User doSomeBusinessStuff(String userId) {
    return this.userMapper.getUser(userId);
  }
}
Mapper Scanner Configrer
SpringのXMLプロファイルにすべてのマッパーを登録する必要はありません.反対に、MapperScanner Configrerを使用してもいいです.これはクラスパスの下のマッパーを探して、自動的にそれらをMapper FactoryBenに作成します.MapperScanner Configrerを作成するには、Springの構成に下記のコードを追加することができます.
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  <property name="basePackage" value="org.mybatis.spring.sample.mapper" />
</bean>
basePackage属性は、マッパーインターフェースファイルのための基本的なパケットパスを設定します.セミコロンまたはコンマを使用して、複数のパケットパスをセパレータとして設定できます.各マッパーは、指定されたパケットパスの中で再帰的に検索される.