1. SQLクエリを直接実行:
1。マッパーファイルからの抜粋
<resultmap id = "acmodelresultmap" type = "com.izumi.instancemodel"> <result column = "instanceid" property = "instanceid" jdbctype = "varchar" /> <result column = "instancename"プロパティ= "instancename" jdbctype = "varchar" varchar " resultType = "com.izumi.instanceModel"> $ {paramsql} </select>2。ダオからの抜粋
パブリックインターフェイスSomedao {list <instancemodel> getinstanceModel(@param( "paramsql")String sql);}3。注意すべきこと
3.1:渡されたメソッドのパラメーターは、次の仕様に従う必要があります。「instanceIdとしてxxxを選択し、xxxをinstancename .....」に従う必要があります。そうしないと、mybatisはクエリ結果をJavaオブジェクトに自動的に変えることができません。
3.2:#{} syntaxと$ {} Mappersファイルの構文の違い:
デフォルトでは、#{}構文によりMyBatisが準備された測定プロパティを生成し、prepedStatementパラメーター(=?)を使用して値を設定します。変更されていない文字列をSQLに直接置き換える場合は、$ {}を使用できます。
言い換えれば、Mybatisが#{}を見ると、JDBCプログラミングのように、質問マークに値を割り当てるのと同じように、SQLの変数に値を割り当てていると考えるでしょう(たとえば、MyBatisはその種類を判断し、前後に単一の引用を自動的に追加します)。 MyBatisが$ {}を見ると、処理を行わずに変数の値に直接置き換えます。
したがって、$ {}を使用する場合、#{}のような「jdbctype = varchar」などの属性を記述する必要はありません。
3.3:resultTypeおよびresultMap
1の執筆方法によれば、<sultsMap>パーツは使用せずに削除できます。次の<select>では、定義された結果マップは使用されないが、結果を使用するからです。
したがって、<select>の返品値の定義を書くには2つの方法があることがわかります。 1つは、結果マップを定義し、この結果マップを参照することです。もう1つは、resultTypeを使用してクラスのパスを指定することです。
2。データのバッチ挿入
1。xxx値(xx)(xxx)(xxx)に挿入を使用すると、xxx値(xx)に挿入、xxx値(xxx)に挿入、xxx値(xxx)に挿入するよりも効率的であることがわかります。
2。MyBatisでの使用
2.1。 Mappersファイルからの抜粋
<ID = "INSERT INSERTBATCH"> inserting Into Student(<include refid = "base_column_list" />)values <foreach collection = "list" item = "item" index = "index" separator = "、">(null、#{item.name}、#{item.sex}、#{item.address}、#{ited.telephone} </foreach> </insert>2.2。ダオからの抜粋
パブリックインターフェイスSomedao {public void insertBatch(@param( "list")list <Student> Student); }MyBatisバッチ挿入データの詳細な説明
まず、batch mapper.xmlファイルをご覧ください
<ID = "INSERT INSERTBATCH" PARAMETERTYPE = "JAVA.UTIL.LIST"> <SELECTKEY KEYPROPERTY = "FETCHTIME" ORDER = "resultType =" java.lang.String "> Select Current_timestamp()</selectkey> cangaiduoyaodian(depart_name 1、devery2、deproct_Nameユニット、承認_certificate、メーカー、Marketprice、vipprice、website、fetch_time、productdesc)values <foreach collection = "list" item = "item" = "index" separator = "、">(#{item.depart1}、#{item.depart2}、 #{item.img}、#{item.productspecification}、#{item.unit}、#{item.approvalcertificate}、#{item.manufacturer}、#{item.marketprice}、#{item.vipprice}、#{item.website}、#{fecktime} )</foreach> </insert>バッチ処理では、注意が必要ないくつかの問題があることがわかりました。
1.主キーを自動的に取得します。 insertにusegeneratedkeys =” true” keyproperty =” id”を追加します。 2つのプロパティの2つのプロパティは無効であり、データ挿入を中断する場合があります。 IDがデータベースの自己網である場合、何も書くことができません。挿入されたステートメントの主要な属性を削除し、それを使用します。
<selectkey keyproperty = "id" order = "resulttype =" java.lang.integer "> select last_insert_id()</selectkey>
注:<selectKey>タグは挿入にのみ存在します。バッチ処理中に<selectKey>を使用するのは適していません。主キー自体を増やすか、指定するのが最善です。
2。挿入時間の取得は上に表示されます。 MySQLを使用しています。 MySQL関数である限り、使用できます。挿入時間と主キーは、MySQL関数の1つです。 。 。