iBATIS 3試用手記3
7149 ワード
最初の2つの手記はiBATIS 3のクエリー機能に重点を置いています.これは最大の変更点だからです.この手記ではiBATISのPersistance面での改善について説明します.
iBATIS 3は、データベースを永続化するためのラベルを提供しています.まずinsert操作を見てみましょう.
の場合、iBATIS 3には次の属性が追加されました. useGeneratedKeys:trueに設定すると、このタイプのプライマリ・キー が提供されるMySQL/MS SQL Serverのように、テーブルの自己増分列からプライマリ・キー値が自動的に取得されます. keyProperty:プライマリ・キーを格納するプロパティ名 statementType:STATEMENT、PREPARED、CALLABLE、デフォルトはPREPAREDに設定でき、ストレージ・プロシージャを呼び出すときにCALLABLEタイプ を使用できるようになります.
もう1つの改良は、上記のコードに示すように、insert時にラベルを使用してプライマリ・キー値を取得することをサポートすることである.keyPropertyはプライマリ・キーを格納する属性名を指定し、orderはの実行順序を指定し、値はBEFOREまたはAFTERであり、BEFOREであればのSQLを先に実行してから操作を実行し、AFTERは逆です.
次はupdate操作で、iBATIS 3はラベルを提供して操作を便利にし、SETキーワードを追加する必要があるかどうかを自動的に判断します.
Delete操作についてはiBATIS 2と同様であるが,ここでは詳しくは述べない.
さらに、との2つの比較的役に立つラベルを紹介します.
タグは、主に再利用可能なSQLを定義し、必要な場所でタグを使用して追加すればよい.次のようになります.
一方、ラベルは反復集合または配列に使用され、IN操作でよく使用され、JSTLのに似ています.以下のようになります.
最終的に生成されるSQLは、次のようになります.WF_STATUS IN (value1, value2, ....)
最後に、TransactionTypeがJDBCを設定場合、iBATIS 3はAutoCommitがfalseにデフォルト設定されているため、永続化操作が完了するとsessionを呼び出す必要がある.commit()メソッドは、トランザクションをコミットするか、sessionを最初に呼び出す.getConnection().settAutoCommit(autoCommit)は、AutoCommitポリシーを設定します.
iBATIS 3の永続化の紹介はここまでで、次の手記ではiBATIS 3が提供するAnnotation操作を簡単に紹介します.Annotationは簡単なSQLアプリケーションの面ではあまりよくありません.効率が高く、xmlを定義する必要はありません.
iBATIS 3は、データベースを永続化するための
<insert id="insertNewsNotice" parameterType="org.newsnotice.domain.NewsNoticeModel" flushCache="true"
statementType="PREPARED" timeout="20000">
<selectKey keyProperty="nnId" order="BEFORE" resultType="long"> SELECT SEQ_NN_MSTR_ID.NEXTVAL FROM DUAL </selectKey>
INSERT INTO NN_MSTR(
NN_ID
<if test="category != null">,CATEGORY</if>
<if test="subject != null">,SUBJECT</if>
,POSTED_DATE
,EXPIRY_DATE
<if test="alert != null">,ALERT</if>
<if test="emailAlert != null">,EMAIL_ALERT</if>
<if test="audience != null">,AUDIENCE</if>
<if test="filter != null">,FILTER</if>
<if test="filterValue != null">,FILTER_VALUE</if>
<if test="subFilterValue != null">
,SUB_FILTER_VALUE
</if>
<if test="excludeUserId != null">
,EXCLUDE_USER_ID
</if>
<if test="department != null">,WF_DEPARTMENT</if>
<if test="status != null">,WF_STATUS</if>
<if test="notes != null">,WF_NOTES</if>
<if test="createdBy != null">,WF_CREATED_BY</if>
<if test="createdDate != null">,WF_CREATED_ON</if>
<if test="modifiedBy != null">,WF_MODIFIED_BY</if>
<if test="modifiedDate != null">
,WF_MODIFIED_ON
</if>
<if test="approvedBy != null">,WF_APPROVED_BY</if>
<if test="approvedOn != null">,WF_APPROVED_ON</if>
<if test="version != null">,WF_VERSION</if>
)VALUES(
#{nnId}
<if test="category != null">,#{category}</if>
<if test="subject != null">,#{subject}</if>
,sysdate
,sysdate + 7
<if test="alert != null">,#{alert}</if>
<if test="emailAlert != null">,#{emailAlert}</if>
<if test="audience != null">,#{audience}</if>
<if test="filter != null">,#{filter}</if>
<if test="filterValue != null">,#{filterValue}</if>
<if test="subFilterValue != null">
,#{subFilterValue}
</if>
<if test="excludeUserId != null">
,#{excludeUserId}
</if>
<if test="department != null">,#{department}</if>
<if test="status != null">,#{status}</if>
<if test="notes != null">,#{notes}</if>
<if test="createdBy != null">,#{createdBy}</if>
<if test="createdDate != null">,#{createdDate}</if>
<if test="modifiedBy != null">,#{modifiedBy}</if>
<if test="modifiedDate != null">
,#{modifiedDate}
</if>
<if test="approvedBy != null">,#{approvedBy}</if>
<if test="approvedOn != null">,#{approvedOn}</if>
)
</insert>
もう1つの改良は、上記のコードに示すように、insert時に
次はupdate操作で、iBATIS 3は
<update id="updateNewsNotice" parameterType="org.newsnotice.domain.NewsNoticeModel"
flushCache="true" statementType="PREPARED" timeout="20000">
UPDATE NN_MSTR
<set>
<if test="category != null">CATEGORY = #{category},</if>
<if test="subject != null">SUBJECT = #{subject}</if>
</set>
WHERE NN_ID = #{nnId}
</update>
Delete操作についてはiBATIS 2と同様であるが,ここでは詳しくは述べない.
さらに、
<sql id="newsNoticeColumns">
A.NN_ID, A.CATEGORY, A.SUBJECT, A.POSTED_DATE, A.EXPIRY_DATE, A.ALERT, A.EMAIL_ALERT, A.AUDIENCE,
A.FILTER, A.FILTER_VALUE, A.SUB_FILTER_VALUE, A.EXCLUDE_USER_ID, A.WF_DEPARTMENT, A.WF_STATUS, A.WF_NOTES,
A.DEFUNCT_IND, A.APPROVER, B.ID CONTENT_ID, B.PARENT_NN_ID, B.CONTENT, C.ID MSG_BOX_ID, C.USER_ID,
C.NN_ID MSG_BOX_NN_ID, C.FOLDER, C.READ, C.READ_ON, C.DEFUNCT_IND MSG_BOX_DEFUNCT_IND, C.PI_NO MSG_BOX_PI_NO
</sql>
<select id="getNewsNotice1" parameterType="org.newsnotice.domain.NewsNoticeModel" resultMap="resultMap-getNewsNotice1" >
SELECT <include refid="newsNoticeColumns"/>
FROM NN_MSTR A, NN_CONTENT B, NN_MSG_BOX C
WHERE A.NN_ID = B.PARENT_NN_ID
AND A.NN_ID = C.NN_ID
......
一方、
<select id="foreachSelect" parameterType="org.newsnotice.domain.NewsNoticeModel"
resultType="int">
SELECT COUNT(*) FROM NN_MSTR
WHERE WF_STATUS IN
<foreach collection="statusArray" item="item" index="index" open="(" separator="," close=")">
#{item}
</foreach>
</select>
最終的に生成されるSQLは、次のようになります.WF_STATUS IN (value1, value2, ....)
最後に、TransactionTypeがJDBCを設定場合、iBATIS 3はAutoCommitがfalseにデフォルト設定されているため、永続化操作が完了するとsessionを呼び出す必要がある.commit()メソッドは、トランザクションをコミットするか、sessionを最初に呼び出す.getConnection().settAutoCommit(autoCommit)は、AutoCommitポリシーを設定します.
iBATIS 3の永続化の紹介はここまでで、次の手記ではiBATIS 3が提供するAnnotation操作を簡単に紹介します.Annotationは簡単なSQLアプリケーションの面ではあまりよくありません.効率が高く、xmlを定義する必要はありません.