MyBatisのRowBoundsPluginで生成されるselectByExampleWithRowboundsの使い方

システム開発Tips

引数のRowBoundsとはなんぞや。

MyBatisのRowBoundsPluginを使用すると

List<T> selectByExampleWithRowbounds(Criteria example, RowBounds rowBounds);

みたいなメソッドが生成されるのですが、rowBoundsにoffsetとlimitをいくら設定しても全然絞り込まれないのでmapper.xmlを見てみると全然絞り込んでない・・・。

納得への糸口

なんでや!Mapperの作り方が悪いのか・・・とか思って色々探しているとありました

RowBounds的构造方法new RowBounds(offset, limit)中的offset、limit参数就相当于MySQL的select语句limit后的offset和rows。如果此时仔细观察一下日志打出来的SQL语句或者看下生成的XxxMapper.xml文件中的selectByExampleWithRowbounds元素,可以发现select语句并没有使用limit。实际上RowBounds原理是通过ResultSet的游标来实现分页,也就是并不是用select语句的limit分页而是用Java代码分页,查询语句的结果集会包含符合查询条件的所有数据,使用不慎会导致性能问题,所以并不推荐使用RowBoundsPlugin来实现分页。

中国語ですが、Google先生に頼って翻訳したところまぁ端的に言うと、Javaでやるためのインターフェースだけ用意したよ!データは全件とってくるから注意してね!とのこと。

おお・・・。

selectByExampleの差がさほどないから、こうなるとわざわざプラグイン化した事自体が意味不明になってくるのですが、私だけでしょうか。しかも全件取得って・・・。DB使う意味ないやないか・・・。

フォローお願いします!

コメント

タイトルとURLをコピーしました