Ibatis面接問題


1)Ibatisでlike「%菗filedName菵%」を使った場合、何か問題がありますか?
xmlマッピングファイルにおいて、直接に上記のように書くと、異常を報告します。java.sql.SQLException:Invalid argment in JDBC call:parameter index out of range:1。
ですから、普通は次の2つの方法を採用します。
1)like'%filedName''のように、菗を$に両替すれば大丈夫です。
2)文字の直列コネクタを採用しています。例えば、like'%𞓜||{{{{{{{𞃳%
2)Ibatisの中で〹と$の違いは?
1((zhi)は、入ってきたデータを文字列として扱い、例えば菗field(zhi field)が伝わってきたのはidであるとsql文を生成します。order by「id」。
2ドルのデータがsqlに直接生成されます。例えば、沝field菵が伝わってきたのはidです。sql文が生成されたのはこのようにorder by idです。
3〓〓の方式は大幅にsql注入を防止することができて、しかし$方式はsql注入を防止することができません;
4ドルの方法は、一般的にデータベースオブジェクトにインポートするために使用されます。
5普通は〓〓のを使うことができます。
 
3)ibatisの動的SQL文問題:
 
<select id="findHelpTopicByCondition"
        resultType="org.apache.ibatis.zsamples.entities.HelpTopic"
        parameterType="org.apache.ibatis.zsamples.entities.HelpTopic"
        useCache="true">
        select help_topic_id as id, name as name, help_category_id,
        description as description, example as example, url as url from
        help_topic
        <where>
            <if test="name!=''">
                name=#{name}
            </if>
            <if test="id!=null">
                and id=2
            </if>
            <if test="name!=''">
                and description=#{description}
            </if>
            <if test="name!=''">
                and example=#{example}
            </if>
            <if test="name!=''">
                and url=#{url}
            </if>
        </where>

    </select>
 
SELECT help_topic_id AS id, 
       name          AS name, 
       help_category_id, 
       description   AS description, 
       example       AS example, 
       url           AS url 
FROM   help_topic 
WHERE  name =? 
       AND id = 2 
       AND description =? 
       AND example =? 
       AND url =? 
 
    public List<HelpTopic> findHelpTopicByCondition(HelpTopic ht){
        List<HelpTopic> hts=null;
        SqlSession session=getSqlSessionFactory().openSession();
        hts=session.selectList("HelpTopicSpace.findHelpTopicByCondition",ht);
        close(session);
        return hts; 
    }
 
4)iBatisとヒベルナの違いは?書き記す
1.iBatisはsql文を手書きで書く必要があります。一部を生成することもできます。Hbernateは基本的に自動的に生成できます。たまにHqlを書きます。同じ需要で、iBATISの仕事量はHibernateよりも多いです。同様に、データベースフィールドの修正に関しては、Hibernateの修正箇所が少ないですが、iBATISはそれらのsql mappingのところを一つ一つ修正します。
2.iBatisは微細度の最適化が可能です。
例えば、この表にはいくつかのフィールドがあります。その中の一つのフィールドを更新したいです。iBatisは簡単です。sql UDATE TABLE_を実行します。A SET column_1=〹column_1チアWHERE id=芰id芰ですが、ハイバーナーを使うと面倒くさいです。デフォルトの場合は、ヒベルナはすべてのフィールドを更新します。もちろんhibernateには修正したフィールドだけを保存するオプションがあると覚えていますが、この機能のマイナス効果はよく分かりません。
例えば、表の部分をリストしたいです。iBatisを使う時、この中の利点は多くのデータをデータベースから少なく読んで、流量SELECT ID、NAME FROM TABLE_を節約することです。WITH_A_LOT_OF_COLUMN WHERE…一般的にはハイバーナーはすべてのフィールドを選択します。たとえば、上の表には8つのフィールドがあります。中には大きなフィールドが一つか二つあります。上のシーンで私はなぜ彼らを選んだのですか?hibernateを使うと、この二つの不要なフィールドをlazy loadに設定することはできません。まだたくさんのところでdomain objectを全部ロードする必要があります。この時はibatisのメリットが現れます。もし私が記録を更新したいなら、ヒベルナを使うなら、今対象をセットアウトしてから、アップロードします。これはデータベースにとっては二つのsqlです。iBatisはudateのsqlだけでいいです。データベースとの相互作用を一回減らすことは,性能の向上にとって非常に重要である。
3.開発側:
開発効率的には、両者はほぼ同じであるべきだと思います。メンテナンス性は、iBatisのほうがいいと思います。iBatisのsqlはすべて別のファイルに保存されているからです。Hbernateは、場合によってはjavaコードでsql/hqlを保護することがあります。iBATISは、Hibernate「O/R」に対して「Sql Mapping」のORMで実現しています。iBATISの力点は、POJOとSQLのマッピング関係にある。つまり、iBATISは、プログラマが運転期間中に自動的にSQLを生成して実行するわけではない。具体的なSQLはプログラマによって作成され、設定ファイルをマッピングすることによってSQLに必要なパラメータと、戻った結果フィールドを指定されたPOJOにマッピングする必要があります。iBATISが提供するORM方式を使用して、業務ロジックの実現者にとっては純粋なJavaオブジェクトに対して、この層はHibernateによってORMを実現するのと基本的に一致していますが、具体的なデータ操作に対しては、Hibernateは自動的にSQL文を生成します。iBATISは開発者に具体的なSQL文を作成するように要求します。iBATISはHibernateに対してSQL開発の作業量とデータベース移植性の譲歩をもってシステム設計に大きな自由空間を提供しています。
4.運転効率
cacheを考慮しないで、iBatisはhibernateより少し速くなりますか?それとも多いはずです。