sql >> データベース >  >> RDS >> Oracle

MyBatisRowBoundsはクエリ結果を制限しません

    Mybatis SQL driverに多くのことを任せます それが使用されており、RowBoundsを取り巻く正確な動作が表示されます それらの1つです。

    http://mybatis.github.io/mybatis-3/java-api.html、特に次のセクションを参照してください:

    この点で、さまざまなドライバーがさまざまなレベルの効率を達成できます。最高のパフォーマンスを得るには、結果セットタイプのSCROLL_SENSITIVEまたはSCROLL_INSENSITIVE(つまり、notFORWARD_ONLY)を使用します。

    デフォルトは明らかにUNSET 、ただし、SCROLL_SENSITIVEを使用してみることができます ResultSetTypeとして selectの属性 タグを付けて、それが役立つかどうかを確認します。詳細については、http://mybatis.github.io/mybatis-3/sqlmap-xml.htmlを参照してください。

    それでも問題が解決しない場合は、RowBoundsの使用をやめることでいつでも問題を回避できます。 SettingsBeanを実装します selectのクラス(または同様のもの) タグはparameterTypeとして使用されます 、およびoffsetのフィールドが含まれています およびlimit (またはおそらくrowStart およびrowEnd Oracleの方が理にかなっています 、次に、必要に応じて実行時にそれらを設定し、select時にSQLに動的に補間することができます。 実行されます。

    コードはもう少し増えますが、純粋な動的SQLを使用して、必要に応じて動作を正確に制御できます。私はMybatisでこのようなアプローチを使用しました およびPostgres そしてそれはうまくいきました。

    したがって、 SettingsBeanを実装します これらのフィールドとそのゲッターとセッター、およびselectを使用したクラス その場合、ステートメントは次のようになります。

    <select
      id="selectFoo"
      parameterType="com.foo.bar.SettingsBean">
    
    select *
    from foo
    where rownum >= #{rowStart}
      and rownum < #{rowEnd}
    </select>
    


    1. Django:月ごとのクエリグループ

    2. AFTER LOGON(Oracle)は、拡張子が付けられたPostgreSQLでトリガーされます– login_hook

    3. SQLServerのシノニムの概要

    4. NextForm v3:データとデータベースの移行のための5つのオプション