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利点:
-
使用してマスターに簡単に。
-
SQL一元管理と最適化を促進するために、XMLで記述されました。
-
SQLは、プログラムコードを分離します。
-
マッピングラベルを提供することで、フィールドサポートORMオブジェクト関係マッピングデータベース
-
タグは、オブジェクトリレーショナルマッピング、オブジェクト・リレーショナル形式のメンテナンスのためのサポートを提供します
-
XMLタグを提供し、動的SQLの準備をサポートしています。
3、MyBatisのフレームワークの欠点:
-
特にフィールドより内のSQL重いワークロード、長い時間のためのアソシエーションテーブル、なおさら。
-
SQLが悪いポータビリティデータベースで、その結果、データベースに依存しています。
-
XMLのタグIDで一意である必要があるため、DAOメソッドにつながるメソッドのオーバーロードをサポートしていません。
-
フィールド・マッピングとオブジェクト・リレーショナル・マッピングラベルタグは、特定の実装の間のマッピングのちょうど説明は依然としてSQLに依存しています。(このような何もSQLテーブルまたはクエリのサブサブテーブルが参加している場合、多くのコレクションのラベルを設定していないとして、その後、返されたオブジェクトは、コレクションオブジェクトがnullであることを、クエリオブジェクトの関係の後には使用できません)
-
DAO層は単純すぎる、ラージオブジェクトは、ワークロードを組み立てています。
-
これは、カスケード更新、削除のカスケードをサポートしていません。
-
動的SQL、便利なデバッグ、特に複雑なロジックを記述する場合。
-
クエリの主キーフィールド場合は、クエリオブジェクトは、現象を「カバー」しているが発生する可能性があります。
-
パラメータ支援不完全のデータ型。(例えば、パラメータの型の日付は伝えやすく、@paramを追加するパラメータの設定方法を、取得していません)
-
ときにマルチパラメータは、使用に不便では、強力な十分ではありません。(現在サポートされている方法には、012ビットモードに、オブジェクト、ノート@paramインデックスとデフォルトのマッピング)
-
ダーティデータの傾向がキャッシュ不適切な使用、。
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:マッピングのエンティティクラスのフィールド名と属性名ずつの関係
の挿入画像では、本明細書に記載しました