ibatis(2)配置ファイルの作成について

7794 ワード

最近はibatisの練習と、スプリング対ibatisの統合をしました.
ibatisの配置ファイルの作成について以下のようにまとめます.
 
(1)insertは挿入された主キーの値を返しますが、設定ファイルにを追加する必要があります.
   主キーの値がSteringなら
 
<selectKey resultClass="string" keyProperty="id">
   SELECT @@IDENTITY AS ID
</selectKey>
 
 
   メインキーがIntタイプの場合
<selectKey resultClass="java.lang.Integer" keyProperty="id" >
   SELECT @@IDENTITY AS ID
</selectKey>
  
または
 
<selectKey resultClass="int" keyProperty="id">
   SELECT @@IDENTITY AS ID
</selectKey>
 
 
注:@IDENTITYはSQL Serverの書き方だけで、他のデータベースにも関連する属性があります.
(2)UpdateとDeleteは修正データの影響の本数に戻る;
SQLあいまいクエリの2つの方法
(1)あいまいなクエリであれば、キーワードが入る前に「%」を追加する.例:Stering keyword="%"+keyword+""%
 
(2)配置ファイルの書き方: select name,sex from t_user where name like'%   
ibatisのbean.xmlプロファイルで、日付の変換
 
<![CDATA[
select count( 1 ) from dbu_window where   
(     
( DATE_FORMAT( '$dateStartTemp$', '%Y-%m-%d' ) >= f_start_date and
    DATE_FORMAT( '$dateStartTemp$', '%Y-%m-%d' ) <= f_end_date )
or     
( DATE_FORMAT( '$dateEndTemp$', '%Y-%m-%d' ) >= f_start_date and 
    DATE_FORMAT( '$dateEndTemp$', '%Y-%m-%d' ) <= f_end_date ) )
]]>
 
 
.$sql$つまりプログラム定義sql文のアプリケーションです.
javaコード:
 
String selSql = "select count(*) from `bbs_config`;";
sqlMapClient.queryForObject( "execSelSqlStr" , selSql );
 
 
bean.xmlファイル:
 
<select id="execSelSqlStr" resultClass="int" parameterClass="string">
   <![CDATA[   $sql$   ]]>
</select>
 
 
・ResultClassとResultMapの違い
その結果をJAVAクラスに自動的にマッピングすることができますが、出力フィールドのタイプを指定することができません.性能に軽い影響を与えます.
resultMap:reult Map要素はあらかじめ定義されていますが、結果からどのようにデータを取り出すか、どの属性がどのフィールドにマッチするかを制御できます.
parameterClassとparameterMapの違い
parameterClass属性値はJAVAクラスのフルネームで、入力パラメータを制限するタイプは指定されたJAVAクラスです.指定しないと、適切な属性(get/setメソッド)を持つJAVA BEANが入力パラメータとして使用できます.
parameterMap:parameterMapの属性値を予め定義し、順序のあるパラメータでJDBC符号をマッチングする
.「葃」と「$」の違い
「葃」が占めるのに対して、鏣はprepareSttementを使っていますか?パラメータを挿入します.$はテキストの置換です.
直接的な代替としてSQLの導入問題と性能に影響を与えるためには、like,limitおよび表名の導入には「$」が必要です.
.where条件の組立
<isEqual>        属性値と静的値または他の属性値が等しいかどうかを比較します.
<idNotEqual>     属性値と静的値、または他の属性値が等しくないかを比較します.
<isgreater Than>   属性値が静的値または他の属性値より大きいかどうかを比較します.
<isgreater Equal>  属性値が静的値または他の属性値より大きいかどうかを比較します.
<isLessThan>     属性値が静的値または他の属性値より小さいかどうかを比較します.
<isLessEqual>    属性値が静的値または他の属性値に等しいかどうかを比較します.
<isNull>         属性がNULLかどうかをチェックします.
<isNotNull>      属性がNULLでないか確認します.
<isEmpty>       属性がNULLかどうかチェックします.
<isNotEmpty>    属性がNULLでないか、それとも空でないかをチェックします.
<isPropertyAvailable>      属性が存在するかどうかをチェックします.
<isNot PropertyAvailable>   この属性が存在しないかチェックします.
.<[CDATA[]]の意味
特殊文字を使ったSQL文(たとえば)<)はそのまま使用できません.必ず使います[CDATA[]]
ibatisはキャッシュの運用を持参しています.
 
<cacheModel id=”person-cache” implementation=”LRU”>
   <flushInterval hours=”24”/>       //   hours/minutes/second
   <flushOnExecute   statement=”selectperson”/>    //       ,     
   <property name=”size” value=”1000”/>
</cacheModel>
 
 
キャッシュポリシー:
   LRU:最近は少なくとも使用します.
   MEMORY:統一されていないオブジェクト再利用モードに適用し、propertyの属性値はSTRONGでなければなりません.
   SOFT、WEAK、これらの3つの値はそれぞれJVMの異なるメモリreferenceタイプに対応している.
   WEAKは、ほとんどの場合、WEAKが一番いい選択です.デフォルトはWEAKです.これはよく使うクエリの性能を大幅に高めることができます.現在使われていない照会データに対しては、クリアされます.
   SOFTは、照会結果のオブジェクトには使用されず、メモリ不足の可能性を減らすことができます.
   STRONGは、クエリの結果をずっとメモリに残しています.データ量が少ない、または静的データの場合に使用できます.
   FIFO:先入先出
   OCACHE:配置oscache.properties
.valueの使用
JAVA BEANをパラメータとして書く必要がなければ、基本タイプを直接使用してもいいし、パラメータ値を直接入力してもいいです.パラメータ値が直接入ってくると、配置ファイルには、パラメータとして書かなければなりません.
.事務の処理
startTransacton()
comit Transation();
rollback Transation();
バッチ
検索していない文が多い場合は、ネットワーク通信の流れを減らすために、バッチ処理ができます.
 
sqlMaClientp.startBatch();
sqlMapClient.endBatch();
 
 
iterateのibatisでの運用は、Listパラメータ名の後ろに必ず「[]」を追加し、解像器が簡単にListをStringに解析することを防止します.
 
<select id="getUserInfoByName" resultMap="userResult" parameterClass="java.util.List">
select * from tuserinfo where f_user_code in
    <iterate open="(" close=")" conjunction="," >
<![CDATA[
           #value[]# 
        ]]>
   </iterate>
</select>
 
 
.xml Result Nameの運用詳細出力結果は、直接に検索して保存した結果をXML documentにマッピングします.
   
String xml=(String)sql MapClient.queryForObject("getUser",user);
System.out.println(xml)
<?xml version=「1.0」encoding=「UTF-8」?>
         weare good!
      2
   
.改ページ機能の実現
)ibatisのページ分け機能を使用していますが、自分でページごとにすべてのデータをメモリに読み込んで改ページしているので、Limit Sql Exector方法を上書きしなければなりません.
)直接にlimitを使って実現する
ibatisのIDE:http://ibatis.apache.org/ibator.html
間違えやすいところ:
)parameterMapとresultMapでは、フィールドデータタイプはjava.sql.Types類で定義されている定数名です.一般的なデータタイプはBLOB、CHAR、CLOB、DATE、LONVRBINARY、INTEGER、NULL、NUMERIC、TIME、TIMESTAMP、VRCHARRなどがあります. 
)データテーブルのNULLBALEのフィールドについては、フィールドのデータタイプをparameterMapとresultMapで指定しなければなりません. 
)データタイプはDATE、CLOBまたはBLOBのフィールドであり、データタイプはPArameterMapとreult Mapで指定したほうが良い. 
)バイナリタイプのデータでは、LONVRB INARYをbyte[]にマッピングすることができます. 
)テキストタイプの大きなデータに対しては、CLOBをStringにマッピングすることができる. 
)Java Beanは、デフォルトのコンストラクタ(すなわち、パラメータなしのコンストラクタ)を持つ必要があります. 
)Java Beanは、さらなる拡張を備えて、Serializableインターフェースを実現することが望ましい.
ibatisの動態調査の例を書きました.
ソートコードは以下の通りです.
<dynamic prepend=" order by">
<isNotNull property="sortName">
   <isNotEqual property="sortName" compareValue="">
    <![CDATA[#sortName# ]]>
   </isNotEqual>
</isNotNull>
<isNotNull property="sortSequence">
   <isNotEqual property="sortSequence" compareValue="">
    <![CDATA[ #sortSequence# ]]>
   </isNotEqual>
</isNotNull>
</dynamic>
 
並べ替えができませんでした.後で資料を調べて、「啱」を「$」に変えたらいいです.
経験をまとめてみます.现xxxは属性値、mapの中のkeyまたはpojoオブジェクトの中の属性を表しています.ibatisは自動的にその外に引用符を付けます.sql文はこのようなwhere xxx='xxx'です.xxxxは文字列としてあなたのsql文につづり合わせます.引用符をつけてください.例えば、あなたの文はこのように書きます.order by((zhi)xxx((xxxはあなたが伝えた文字列topicId)とibatisは彼をorder by'topicIdに訳します.これで間違えました.$の結果はこのようにorder by topicIdです.
ibatis共通sql文は単独で定義できます.
<sql id="whereTemplate">
<dynamic prepend="where">
   <isNotNull prepend="and" property="id">
    <![CDATA[ id = #id# ]]>
   </isNotNull>
</dynamic>
</sql>

<select id="coreGetCountAll" resultClass="java.lang.Integer" parameterClass="coreNote">
<![CDATA[ SELECT COUNT( 1 ) FROM note ]]>
<include refid="whereNoteTemplate" />
</select>