MyBatisの勉強の心得
3087 ワード
最近自分でプロジェクトを書いてMyBatisに関するものがあります.それからスレ主は白さんが黙って独学したほうがいいと言った.勉強が終わったら、実は多くのMyBatisの公式ドキュメントがはっきり書いてあることに気づきました.次は自分の勉強の心得を大まかに話しましょう.
1、道具が大事!!!MyBatisはプログラマーのsqlに対する習得度を試していますが、相対的に、書くともっと好きなようにすることができます.また、MyBatisの移植性はよくなく、データベースに依存しています.ネット上にはgeneratorもあります.それからチュートリアルにすれば、sql文を自動的に生成することができます.
2、事務のロールバックは人間的だ.Springのトランザクションロールバック(デフォルトではRuntimeExceptionとそのサブクラスのみがトリガーされるようです)よりも、MyBatisのトランザクションロールバックの方が良いです.もちろん、rollback-for=「java.lang.Exception」を設定してカスタマイズすることもできます.
3、MyBatisの外部キー.実際の設計では、データベース・テーブル間に関係があります.この時私たちは2つの方法があります.1つ目は、単純で乱暴で、プライマリコードの中で暴力的なforサイクルで操作されます.つまり、1枚のテーブルのクエリーです.2つ目はMyBatisのsql文を利用してクエリを行うことです.以前は外部キーに対して実はずっと愚かで、generatorは外部キーを生成しないようです.いろいろな牛は実はあまり全面的に話していないので、私はずっと重点をつかんでいません.次のコードを例に挙げます.
"com.demo.sys.entity.Menu" id="menuMap">
"id" column="id" />
"name" column="menu_name" />
"url" column="url" />
"active" column="isactive" />
"createDate" column="createdate" />
"updateDate" column="updatedate" />
"bak1" column="bak1" />
"bak2" column="bak2" />
"bak3" column="bak3" />
"locale" column="locale" />
"orderNum" column="ordernum" />
"module" column="module_id" select="queryModule">
resultの部分は見なくてもいいですが、実は結果マッピングで、鍵はassociationです.その中のpropertyとcolumnは言うまでもなく、JavaBeanの属性とデータベーステーブルのカラム名です.3つ目は実はselect操作で、それからあなたはこの操作を実現する必要があります.また、このresultMapに関するクエリー操作を書く必要があります.そうすれば、連表クエリーを行うことができます.
4、データ型マッピングの問題.すべてのJavaタイプがJdbcTypeに対応できるわけではありません.JdbcTypeはtext(MySQLを使っています)と試したことがありますが、マッピングできません.でもちょっとしたテクニックは
ここをvarcharに変更すれば間違いはありません.
5、安全性の問題.MyBatisのsql文には2つの書き方があります.
何の違いもないように見えますが、実は違いが大きいです.$SQL文をコンパイルするときとは大きく異なります.$文はコンパイル時に渡されたパラメータも書き込まれ、私たちが普段書いているsql文とは違いません.一方、#はプリコンパイルを使用しており、文の中の#の部分が疑問符に置き換えられ、jdbcのPreparedStatementに似ています.また、#を使用すると、sql注入を防ぐことができます.ほとんどのsql注入は実は文のコンパイル中に実現されるからです.しかし、彼のDDL、すなわちcreate、alter、dropは$を使わなければならない.
6、MybatisのDML操作(添削改ざん)は簡単で、一括処理も難しくありません.文にforeachを直接使用すると、文の長さが長すぎることに注意します.
7、締めくくり:
実はまだたくさん分かち合っていないで、trim、setなどのものを含んで、主にこれらのネット上の多くはすでに相応のブログがあって、私は贅沢に述べません.
1、道具が大事!!!MyBatisはプログラマーのsqlに対する習得度を試していますが、相対的に、書くともっと好きなようにすることができます.また、MyBatisの移植性はよくなく、データベースに依存しています.ネット上にはgeneratorもあります.それからチュートリアルにすれば、sql文を自動的に生成することができます.
2、事務のロールバックは人間的だ.Springのトランザクションロールバック(デフォルトではRuntimeExceptionとそのサブクラスのみがトリガーされるようです)よりも、MyBatisのトランザクションロールバックの方が良いです.もちろん、rollback-for=「java.lang.Exception」を設定してカスタマイズすることもできます.
3、MyBatisの外部キー.実際の設計では、データベース・テーブル間に関係があります.この時私たちは2つの方法があります.1つ目は、単純で乱暴で、プライマリコードの中で暴力的なforサイクルで操作されます.つまり、1枚のテーブルのクエリーです.2つ目はMyBatisのsql文を利用してクエリを行うことです.以前は外部キーに対して実はずっと愚かで、generatorは外部キーを生成しないようです.いろいろな牛は実はあまり全面的に話していないので、私はずっと重点をつかんでいません.次のコードを例に挙げます.
"com.demo.sys.entity.Menu" id="menuMap">
"id" column="id" />
"name" column="menu_name" />
"url" column="url" />
"active" column="isactive" />
"createDate" column="createdate" />
"updateDate" column="updatedate" />
"bak1" column="bak1" />
"bak2" column="bak2" />
"bak3" column="bak3" />
"locale" column="locale" />
"orderNum" column="ordernum" />
"module" column="module_id" select="queryModule">
resultの部分は見なくてもいいですが、実は結果マッピングで、鍵はassociationです.その中のpropertyとcolumnは言うまでもなく、JavaBeanの属性とデータベーステーブルのカラム名です.3つ目は実はselect操作で、それからあなたはこの操作を実現する必要があります.また、このresultMapに関するクエリー操作を書く必要があります.そうすれば、連表クエリーを行うことができます.
4、データ型マッピングの問題.すべてのJavaタイプがJdbcTypeに対応できるわけではありません.JdbcTypeはtext(MySQLを使っています)と試したことがありますが、マッピングできません.でもちょっとしたテクニックは
ここをvarcharに変更すれば間違いはありません.
5、安全性の問題.MyBatisのsql文には2つの書き方があります.
DELETE FROM
projectinfo
WHERE id = #{id};
DELETE FROM
projectinfo
WHERE id = ${id};
何の違いもないように見えますが、実は違いが大きいです.$SQL文をコンパイルするときとは大きく異なります.$文はコンパイル時に渡されたパラメータも書き込まれ、私たちが普段書いているsql文とは違いません.一方、#はプリコンパイルを使用しており、文の中の#の部分が疑問符に置き換えられ、jdbcのPreparedStatementに似ています.また、#を使用すると、sql注入を防ぐことができます.ほとんどのsql注入は実は文のコンパイル中に実現されるからです.しかし、彼のDDL、すなわちcreate、alter、dropは$を使わなければならない.
6、MybatisのDML操作(添削改ざん)は簡単で、一括処理も難しくありません.文にforeachを直接使用すると、文の長さが長すぎることに注意します.
UPDATE test_table
SET c_a = #{item.ca},
c_b = #{item.cb}
WHERE id = #{item.id}
7、締めくくり:
実はまだたくさん分かち合っていないで、trim、setなどのものを含んで、主にこれらのネット上の多くはすでに相応のブログがあって、私は贅沢に述べません.