Mybatisよくある問題のまとめ
目次
1、Mybatis作用
2、長所と短所と適用シーン
3、Mybatisとヒップホップの違い
4、MybatisはどのようにSQL注入を防止しますか?
1)SQL文を書くときは、2つの特殊文法を使います.
主な参考:
https://blog.csdn.net/a745233700/article/details/80977133
1、Mybatis作用概念:オブジェクト関係マッピングフレームワーク.(POJOとデータベースのマッピングをします.POJOデータベース) の役割:データベースを使用するときは、SQL文自体の論理に注目するだけで、プログラマは直接に元の生態SQL文を作成してデータベースを操作することができます.もうマニュアルでJDBCのフルセットの仕事をする必要はないです.(ロード駆動、コネクション作成、.などはここのポイントではないです.略) 動作方式:xmlファイルまたは注釈によって実行される様々なstatementを構成し、javaオブジェクトとstatementのsqlの動的パラメータをマッピングして最終実行されるsql文を生成し、最後にmybatisフレームでsqlを実行し、結果をjavaオブジェクトにマッピングして返します.(sqlを実行してからreltに戻るまでのプロセス).すなわち(sql文を生成する(実行するstatementを設定し、マッピングする)---sql文を実行する---sql実行結果に戻る(戻りはjavaオブジェクト、POJO)
2、長所と短所と適用シーン
利点:
これは使うことによって記憶を理解するしかないです.フレキシブルで軽量です. 互換性がいいです. (1)SQL文に基づいてプログラミングしています.かなり柔軟で、アプリケーションやデータベースの既存の設計に影響を与えないです.SQLはXMLに書いて、sqlとプログラムコードの結合を解除して、統一管理に便利です.XMLタグを提供し、ダイナミックSQL文の作成をサポートし、再利用できます.
(2)JDBCに比べて、50%以上のコード量を削減し、JDBCの大量冗長コードを除去しました.手動スイッチ接続は必要ありません.
(3)各種データベースとの相性が良い(MyBatisはJDBCを使ってデータベースに接続しているので、JDBCがサポートするデータベースMyBatisだけがサポートされています).
(4)Springと良い集積ができます.
(5)マッピングラベルを提供し、オブジェクトとデータベースのORMフィールド関係マップをサポートします.オブジェクト関係マップタグを提供し、オブジェクト関係コンポーネントのメンテナンスをサポートします.
短所: SQL文は一定の要求が必要です. はデータベースに依存しているため、グラフト性が悪い. (1)SQL文の編纂は仕事量が多く、特にフィールドが多く、関連表が多い場合、開発者にSQL文を編纂する技術的な要求があります.
(2)SQL文はデータベースに依存しており、データベースの移植性が悪くなり、勝手にデータベースを交換できない.
適用の場合:柔軟なDAO層ソリューション. は性能に対する要求が高く、需要の変化が多い項目です.インターネットプログラム 3、Mybatisとヒップホップの違い
Mybatis
ハイベルナー
SQL
プログラマが手動で作成する必要があります.
データベースの依存性
差
わりに良い
(1)SQL文.Mybatisはhibernateと違って、全くORMの枠組みではないです.MyBatisはプログラマが自分でSql文を書く必要があるからです.
(2)データベースの依存性. Mybatisは直接に元の生態sqlを編纂して、sqlの実行性能を厳格に制御することができて、柔軟性は高くて、関係データモデルに対して高くないソフトウェア開発を要求することに適しています.しかし、柔软な前提はmybatisがデータベースの関系性を完成できないので、もし复数のデータベースをサポートするソフトウェアを実现する必要があれば、カスタムのsqlマッピングファイル(一つのsqlマッピングファイル--一つのデータベース)が必要で、仕事量が多いです. Hibernateオブジェクト/関係マッピング能力が高く、データベースには関係なく、モデルに対して高いソフトウェアが要求されています.hibernateで開発すれば、多くのコードが節約され、効率が向上します. 4、MybatisはどのようにSQL注入を防止しますか?
MybatisはSQLによるプリコンパイルでSQL注入を防ぐ.
例:まずSQL文を書き、具体的なデータを_で修飾する. 実行前に、Mybatisは以下のSQLをデータベースにプリコンパイル(プレースホルダを使用)します. 注:SQL注入はコンパイル中に行われますが、Mybatisのプリコンパイルには具体的なデータがありません.プレースホルダだけです.注入を防ぐことができます. SQL文を実行するときは、コンパイルされたSQLを直接使用して、プレースホルダ「?」 を置換します.
ここに文章を貼ります. https://www.cnblogs.com/mmzs/p/8398405.htmlを参照して理解できます.
1)SQL文を書くときは、2つの特殊文法を使います.
湖南省にある地名
${}(米ドル)
安全性
コンパイルされた安全性
コンパイルされていません.変数の値を取るだけで、安全ではありません.
sql文を生成
xiは入ってきたデータをすべて文字列として扱い、自動的に入ってきたデータにダブルクォーテーションを付けます.eg:where username=钾{username}もし入ってきた値が111なら、sqlに解析した時の値はwhere username=111です. もし入ってきた値がidならば解析したsqlはwhere username="id"です.
$は、入ってきたデータを直接にsqlに表示します.eg:where username=$usernameがもし入ってきた値が111なら、sqlに解析された時の値はwhere username=111です.
SQL注入を防止できます.
効果的に防止できます
防ぎようがない
注意:普通は〓のを使うことができて$を使わないでください、どうしても「$xxx」のこのようなパラメーターを使わなければならないならば、手作業で濾過作業をしっかりと行って、sqlが攻撃に注ぎ込むことを防止します. はMyBatisにおいて、「$xxx」というフォーマットのパラメータが直接SQLコンパイルに参加し、注入攻撃を避けることができない. ですが、ダイナミックなテーブル名と列名に関しては、「米ドル{xxx}」というパラメータ形式しか使えません.したがって,このようなパラメータは注入防止のためにコード内で手作業で処理する必要がある. 【結論】MyBatisのマッピング文を作成する際には、できるだけ「〓{xxx}」というフォーマットを採用します.このようなパラメータを使わなければならないならば、SQLの攻撃を防ぐために、手作業でフィルター作業を行います.
1、Mybatis作用
2、長所と短所と適用シーン
3、Mybatisとヒップホップの違い
4、MybatisはどのようにSQL注入を防止しますか?
1)SQL文を書くときは、2つの特殊文法を使います.
主な参考:
https://blog.csdn.net/a745233700/article/details/80977133
1、Mybatis作用
2、長所と短所と適用シーン
利点:
これは使うことによって記憶を理解するしかないです.
(2)JDBCに比べて、50%以上のコード量を削減し、JDBCの大量冗長コードを除去しました.手動スイッチ接続は必要ありません.
(3)各種データベースとの相性が良い(MyBatisはJDBCを使ってデータベースに接続しているので、JDBCがサポートするデータベースMyBatisだけがサポートされています).
(4)Springと良い集積ができます.
(5)マッピングラベルを提供し、オブジェクトとデータベースのORMフィールド関係マップをサポートします.オブジェクト関係マップタグを提供し、オブジェクト関係コンポーネントのメンテナンスをサポートします.
短所:
(2)SQL文はデータベースに依存しており、データベースの移植性が悪くなり、勝手にデータベースを交換できない.
適用の場合:
Mybatis
ハイベルナー
SQL
プログラマが手動で作成する必要があります.
データベースの依存性
差
わりに良い
(1)SQL文.Mybatisはhibernateと違って、全くORMの枠組みではないです.MyBatisはプログラマが自分でSql文を書く必要があるからです.
(2)データベースの依存性.
MybatisはSQLによるプリコンパイルでSQL注入を防ぐ.
例:
select id, username, password, role from user where username=? and password=?
ここに文章を貼ります. https://www.cnblogs.com/mmzs/p/8398405.htmlを参照して理解できます.
1)SQL文を書くときは、2つの特殊文法を使います.
湖南省にある地名
${}(米ドル)
安全性
コンパイルされた安全性
コンパイルされていません.変数の値を取るだけで、安全ではありません.
sql文を生成
xiは入ってきたデータをすべて文字列として扱い、自動的に入ってきたデータにダブルクォーテーションを付けます.eg:where username=钾{username}もし入ってきた値が111なら、sqlに解析した時の値はwhere username=111です. もし入ってきた値がidならば解析したsqlはwhere username="id"です.
$は、入ってきたデータを直接にsqlに表示します.eg:where username=$usernameがもし入ってきた値が111なら、sqlに解析された時の値はwhere username=111です.
SQL注入を防止できます.
効果的に防止できます
防ぎようがない
注意: