MyBatisとSpringの統合について
MyBatisは、永続化層のORMとして実現され、オブジェクトモデルからリレーショナルデータモデルへの変換が完了し、オブジェクトモデルとリレーショナルモデルとの間の不調和が調整され、従来jdbcでプログラミングされていたコードの大部分が減少し、アプリケーション開発者がビジネスロジック層コードの作成に集中し、作業効率が大幅に向上した.MyBatisは半自動化された永続層フレームワークであり、従来のプロファイルのほか、ドメインオブジェクトのマッピングファイルや、プラグインによって最終的なSQLマッピングを完了する補助機能、例えばページングブロックプラグイン、マッピングファイルには一連の動的SQLが定義されており、各所定のSQL文の上には対応するパラメータと最終的な戻り結果があります.実行時に入力されたパラメータに基づいて、その属性を判断すると、SQL文の生成が動的に完了し、必要な結果セットが生成されます.ドメイン・オブジェクトから最終的な戻りまで、結果セット・マッピング、SQLマッピングを定義する必要があります.結果セット・マッピングでは、ドメイン・オブジェクトとリレーショナル・データ行とのマッピング関係が定義されます.javaオブジェクトに基づく属性とリレーショナル・モデルに基づくデータ列とのマッピングが定義され、元の結果セットを取得した後、反射技術を使用してターゲット・エンティティ・オブジェクトを正確に合成できます.動的SQLの定義は、コンフィギュレーションよりも大きく設定されています.MyBatisマッピング・ファイルのマッピング・ファイルの要素に関するDTD宣言では、0つ以上のresultMapおよびその他の言及要素を定義できるように、そのマッピング・ファイルでは、0つ以上のresultMapおよびその他の言及要素を定義できるように、所定の数の要素しか定義できないことが規定されています.一般的なMyBatisマッピングファイルは、ドメインオブジェクトモデルが次のように仮定されます.
マッピングファイルの例が終わり、Springの統合を実証します.1.Springのプロファイルで、データソース、BasicDataSource、DriverManagerDataSourceを構成する
2、SqlSessionFactoryBeanの構成
3.MyBatis永続層操作テンプレートクラスの構成(構造および注入)
4.トランザクションの構成(宣言トランザクションを使用して、コアビジネスロジックとトランザクションロジックを剥離し、高集約、低結合)
5、持久層Mybatis操作テンプレート参照の注入関連DAO任務を完成する
public class DomainData{
private Integer id;
private String name;
private java.util.Date birthday;
private AuthUser createBy;
// setters and getters
}
<mapper namespace="DomainData">
<resultMap id="DomainData_Result" type="DomainData">
<result property="id column="ID" jdbcType ="NUMERIC" />
<result property="name" column="NAME" jdbcType="VARCHAR" />
<result property="birthday" column="BIRTHDAY" jdbcType="TIMESTAMP"/>
<association property="createBy" column="CREATE_BY" select="AuthUser.queryById"/>
</resultMap>
<!-- -->
<insert id="insert" parameterType="DomainData">
<selectKey resultType="java.lang.Integer" keyProperty="id" order="BEFORE">
SELECT SEQ_DOMAIN_DATA.nextual from dual
</selectKey>
insert into DOMAIN_DATA(
ID,
NAME,
BIRTHDAY,
CREATE_BY
)
VALUES
(
#{id,jdbcType=NUMERIC},
#{title,jdbcType=VARCHAR},
#{birthday,jdbcType=TIMESTAMP},
#{createBy.id,jdbcType=NUMERIC}
)
</insert>
<!-- -->
<update id="update" parameterType="DomainData">
update DOMAIN_DATA
<set>
<if test="name!=null">
NAME=#{name,jdbcType=VARCHAR},
</if>
<if test="birthday!=null">
BIRTHDAY = #{birthday,jdbcType=TIMESTAMP},
</if>
<if test="createBy != null and createBy.id != null" >
CREATE_BY=#{createBy.id,jdbcType=NUMERIC},
</if>
</set>
WHERE
ID = #{id,jdbcType=NUMERIC}
</update>
<!-- -->
<delete id="delete" parameterType="java.lang.Integer">
delete from DOMAIN_DATA where ID = #{id,jdbcType=NUMERIC}
</delete>
<!-- -->
<delete id="logicDelete" parameterType="java.lang.Integer">
update DOMAIN_DATA set ENABLE_FLAG=0 where ID = #{id,jdbcType=NUMERIC}
</delete>
<!-- -->
<select id="query" parameterType="FeedbackData" resultMap="FeedbackData_Result">
SELECT
*
FROM DOMAIN_DATA
<where>
<if test="id != null" >
AND ID=#{id,jdbcType=NUMERIC}
</if>
<if test="name != null" >
AND NAME like CONCAT(CONCAT('%', #{name}), '%')
</if>
<if test="birthday != null" >
AND BIRTHDAY=#{birthday,jdbcType=TIMESTAMP}
</if>
<if test="isHandle != null" >
AND CREATE_BY=#{createBy,jdbcType=VARCHAR}
</if>
</where>
</select>
</mapper>
マッピングファイルの例が終わり、Springの統合を実証します.1.Springのプロファイルで、データソース、BasicDataSource、DriverManagerDataSourceを構成する
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>${jdbc.driverClassName}</value>
</property>
<property name="url">
<value>${jdbc.url}</value> // placeHolder
</property>
<property name="username">
<value>${jdbc.username}</value>
</property>
<property name="password">
<value>${jdbc.password}</value>
</property>
</bean>
2、SqlSessionFactoryBeanの構成
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- sqlMapConfig , environment spring -->
<property name="configLocation">
<value>classpath:SqlMapConfig.xml</value> //mybatis MyBaits , ( )
</property>
<property name="typeAliasesPackage"> // java
<value>
com.demo.www.test.bo
</value>
</property>
<!-- mybatis -->
<property name="mapperLocations"> //
<list>
<value>classpath*:mapper/**/*.xml</value>
</list>
</property>
</bean>
3.MyBatis永続層操作テンプレートクラスの構成(構造および注入)
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
4.トランザクションの構成(宣言トランザクションを使用して、コアビジネスロジックとトランザクションロジックを剥離し、高集約、低結合)
<!-- -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<!-- cglib false spring -->
<aop:aspectj-autoproxy proxy-target-class="true" />
<!-- Spring Annotation -->
<context:annotation-config/>
5、持久層Mybatis操作テンプレート参照の注入関連DAO任務を完成する