MyBatisのは、一般的な面接の質問を終えて

MyBatisの顔の質問

1. MyBatisのは何ですか?

2、Mybaits利点:

3、MyBatisのフレームワークの欠点:

4、MyBatisのフレームワーク適用場面:

5、HibernateでMyBatisの違いは何ですか?

6.#{}と{} $であるとの違いは何ですか?

7、エンティティクラスの属性名のフィールド名とテーブルが同じでない場合、どのように?

8、文の書き方のようなあいまいクエリ?


1. MyBatisのは何ですか?

MyBatisのは、優れたベースであるJDBC内部をカプセル化する永続化フレームワークのJava、開発者が唯一のハンドルにエネルギーを費やす必要がなく、SQL文自体を集中する必要があるので、ローディングドライバ接続を作成し、文の作成プロセスを複雑に。

さまざまな構成ステートメントの方法によってMyBatisのXMLまたは注釈が一緒に実行される、最終的に最終的な地図生成のSQL Javaオブジェクトと、SQL文の動的パラメータによって実行文とは、JavaオブジェクトとMyBatisのによりSQLおよびフレームに結果をマッピングを実行しますリターン。

2、Mybaits利点:

  1. 使用してマスターに簡単に。

  2. SQL一元管理と最適化を促進するために、XMLで記述されました。

  3. SQLは、プログラムコードを分離します。

  4. マッピングラベルを提供することで、フィールドサポートORMオブジェクト関係マッピングデータベース

  5. タグは、オブジェクトリレーショナルマッピング、オブジェクト・リレーショナル形式のメンテナンスのためのサポートを提供します

  6. XMLタグを提供し、動的SQLの準備をサポートしています。

3、MyBatisのフレームワークの欠点:

  1. 特にフィールドより内のSQL重いワークロード、長い時間のためのアソシエーションテーブル、なおさら。

  2. SQLが悪いポータビリティデータベースで、その結果、データベースに依存しています。

  3. XMLのタグIDで一意である必要があるため、DAOメソッドにつながるメソッドのオーバーロードをサポートしていません。

  4. フィールド・マッピングとオブジェクト・リレーショナル・マッピングラベルタグは、特定の実装の間のマッピングのちょうど説明は依然としてSQLに依存しています。(このような何もSQLテーブルまたはクエリのサブサブテーブルが参加している場合、多くのコレクションのラベルを設定していないとして、その後、返されたオブジェクトは、コレクションオブジェクトがnullであることを、クエリオブジェクトの関係の後には使用できません)

  5. DAO層は単純すぎる、ラージオブジェクトは、ワークロードを組み立てています。

  6. これは、カスケード更新、削除のカスケードをサポートしていません。

  7. 動的SQL、便利なデバッグ、特に複雑なロジックを記述する場合。

  8. クエリの主キーフィールド場合は、クエリオブジェクトは、現象を「カバー」しているが発生する可能性があります。

  9. パラメータ支援不完全のデータ型。(例えば、パラメータの型の日付は伝えやすく、@paramを追加するパラメータの設定方法を、取得していません)

  10. ときにマルチパラメータは、使用に不便では、強力な十分ではありません。(現在サポートされている方法には、012ビットモードに、オブジェクト、ノート@paramインデックスとデフォルトのマッピング)

  11. ダーティデータの傾向がキャッシュ不適切な使用、。

4、MyBatisのフレームワーク適用場面:

MyBatis是一个半映射的框架,它也支持缓存,级联等操作,缺点就在于需要你提供映射规则和SQL,
工作量比Hibernate要大。MyBatis虽然开发不如Hibernate效率高,但是其灵活,可SQL优化的特点很
吸引人,正因为此,在于大数据,高并发移动互联网项目中较为常用。

5、HibernateでMyBatisの違いは何ですか?

1、开发方面
        在项目开发过程当中,就速度而言:
            hibernate开发中,sql语句已经被封装,直接可以使用,加快系统开发;
            Mybatis 属于半自动化,sql需要手工完成,稍微繁琐;
        但是,凡事都不是绝对的,如果对于庞大复杂的系统项目来说,发杂语句较多,选择hibernate 就不是一个好方案。
2、 sql优化方面
        Hibernate 自动生成sql,有些语句较为繁琐,会多消耗一些性能;
        Mybatis 手动编写sql,可以避免不需要的查询,提高系统性能;
2、对象管理比对
        Hibernate 是完整的对象-关系映射的框架,开发工程中,无需过多关注底层实现,只要去管理对象即可;
        Mybatis 需要自行管理 映射关系;

6.#{}と{} $であるとの違いは何ですか?

 #{}: 解析为一个 JDBC 预编译语句(prepared statement)的参数标记符,一个 #{ } 被解析为一个参数占位符 。
 ${}: 仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换。

 1 #是将传入的值当做字符串的形式,eg:select id,name,age from student where id =#{id},当前端把id值1,传入到后台的时候,就相当于 select id,name,age from student where id ='1'.

 2 $是将传入的数据直接显示生成sql语句,eg:select id,name,age from student where id =${id},当前端把id值1,传入到后台的时候,就相当于 select id,name,age from student where id = 1.

 3 使用#可以很大程度上防止sql注入。(语句的拼接)

 4 但是如果使用在order by 中就需要使用 $.

 5 在大多数情况下还是经常使用#,但在不同情况下必须使用$. 

7、エンティティクラスの属性名のフィールド名とテーブルが同じでない場合、どのように?

方法の一つ:SQL文のクエリの別名でフィールド名を定義することで、そのため同じ属性名とエイリアスエンティティクラスのフィールド名。
ここに画像を挿入説明
方法2:マッピングのエンティティクラスのフィールド名と属性名ずつの関係
の挿入画像では、本明細書に記載しました
ここに画像を挿入説明

公開された44元の記事 ウォン称賛27 ビュー10000 +

おすすめ

転載: blog.csdn.net/weixin_42784951/article/details/104632723