1.mybatis に#{} と$ {} の違いは?
回答:
定義:#{}は、プリコンパイルされています。
アクション: MyBatisののプロセス#{} 、一方でSQLがそれに取って代わるだろう?、次に呼び出すPreparedStatementを設定する方法の割り当て;も防ぐことができ、SQL インジェクションを。
注: SQL インジェクションは、悪質な実行可能インジェクション攻撃でのSQL ステートメントは。することで、SQL データベースクエリのコードに、攻撃者が制御することができますので、ウェブサーバアプリケーションの背後にあるデータベース・サービスを、それがデータベースに対する操作の数であってもよいです。データベースにデータを追加、変更および削除など。
定義:$ {} 文字列置換。
アクション: MyBatisののプロセスの$ {} 、一方でSQLが変数の値で置き換えます。
2.mybatis いくつかの方法の改ページがありますか?
:あり4、すなわち、ページング、の配列SQLのページング、ページングインターセプタ、RowBoundsのページ。
3.mybatisのページングの物理的および論理ページの違いは?
回答:
定義:物理ページのような、エンティティがデータベースであることを、物理的なエンティティに依存している MySQLのデータベースが提供する制限プログラマはについて書いて、キーワードを制限するクエリのキーワードを、データベースがページング結果を返します。
定義:論理ページは、プログラマが書いたコードではなく、ページングデータベースから返された結果が、すべてのデータとコードのプログラマによって得られたページングされたデータ。一般的な使い捨てのクエリ操作は、すべてのデータを格納することで、リストのセットを、そしてデータを取得することは、インデックスで指定された範囲、
2間の比較:
- データベースの負担は:すべての物理ページ問合せ、および論理ページが一度だけのデータベースを照会するため、データベース上の大きな負担が物理ページによって引き起こされるので、データベースにアクセスすることができます。
- サーバーの負荷:論理ページワンタイムより大きなメモリ空間を占有して、データをメモリに読み込まれ、物理ページが訪問あたりのデータベースのデータの一部だけを読んで、より少ないメモリスペースを取る、サーバー上の論理ページより大きな負担ので、 。
- リアルタイム:論理ページのデータは、データの変更は、データベース操作の最新の状態にリアルタイムに反映されません一度、実際の時間差でメモリに読み込まれ、物理ページには、データを必要とするたびにデータベースにアクセスする必要がありますデータ変更、データベースの最新の状態をリアルタイムで操作するので、リアルタイム性能を反映したとき。
- アプリケーション:小さなデータ量とデータが安定している場合の論理ページは、物理ページに適用可能なデータの量が頻繁に機会を更新しています。
注: MyBatisののRowBoundsの論理ページを使用して、タブ、そしてオフセットとリミットカットタブレコードと結果を返します。しかし、それは、大量のデータメモリのオーバーフローが発生します。
4. DESCRIPTIONは MyBatisのキャッシュと二次キャッシュを?
A:キャッシュは:それが基づいている PerpetualCache / [pə petʃuəl] [kæʃ] のハッシュマップローカルストレージ、その範囲は、に格納されたセッション。場合は、セッションフラッシュまたは近いこの後のセッションのすべてのキャッシュがクリアされます。レベルのキャッシュはデフォルトでオンになっています。
キャッシュとキャッシュ機構、基づいている PerpetualCacheにHashMapの範囲は、その格納された異なるローカルストレージ、マッパー(名前空間)、およびカスタム・ストレージ・ソースであってもよいし。あなたは二次キャッシュを開きたい場合は、二次キャッシュは、達成するために2つのキャッシュ属性クラスをデフォルトで開いて必要としませんシリアライズ/ [ sɪərɪəlaɪzəbl] シリアルインターフェースを。
すべてのクエリは、スコープの下にクリアされたときのスコープの追加および削除デフォルトのキャッシュに:データをキャッシュするための更新メカニズムのため。
5.休止状態とMyBatisの違いは?
回答: Hibernateは人気があるORM (オブジェクトリレーショナルマッピング)フレームワーク、より完全なパッケージのためのデータベース構造。
MyBatisのも人気のORM フレームワークは、主な焦点は、POJO とSQL の間のマッピング。POJOの単純無作為の代表Javaのオブジェクトは、純粋の伝統的な意味でのJava オブジェクトを、最も基本的なJavaの豆の属性によってのみ、属性のget とセット方法は、変換することができ、PO、DTO、VOを。
1. 両者の最大の違い:単純なクエリのために、休止状態とMyBatisのに対応したコード生成器は、実質的に生成することができるDAO レベルコード。
针对高级查询:mybatis需要手动去写SQL语句,以及ResultMap;而hibernate有良好的映射机制,开发者不需要关心sql生成和映射结果,可以更加关注业务流程。
2.开发难度对比:hibernate的开发难度大于mybatis,因为hibernate比较庞大复杂,而且学习周期比较长。而mybatis就比较简单,且它比较依赖于sql的书写,可以让开发者更加熟悉。
举一个形象的比喻:
Mybatis:机械工具,使用方便,拿来就用,但是工作还是要自己来做,不过工具是活的,怎么用由自己决定。
Hibernate:智能机器人,但研发(学习,熟练度)它的成本高,工作都可以交给它,但仅限于它能作的事。
6.Mybatis分页插件的实现原理是什么?
答:分页插件的基本原理是使用mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方法,添加相应的物理分页语句和物理分页参数。