ResultSetInterceptor.java 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package jnpf.database.plugins;
  2. import jnpf.database.util.ResetSetHolder;
  3. import org.apache.ibatis.executor.resultset.ResultSetHandler;
  4. import org.apache.ibatis.plugin.Interceptor;
  5. import org.apache.ibatis.plugin.Intercepts;
  6. import org.apache.ibatis.plugin.Invocation;
  7. import org.apache.ibatis.plugin.Signature;
  8. import java.sql.ResultSet;
  9. import java.sql.SQLException;
  10. import java.sql.Statement;
  11. /**
  12. * Mybatis ResultSet拦截器
  13. * @see ResetSetHolder
  14. * @author JNPF开发平台组
  15. * @user N
  16. * @copyright 引迈信息技术有限公司
  17. * @date 2022/10/14 16:29
  18. */
  19. @Intercepts({@Signature(type = ResultSetHandler.class, method = "handleResultSets", args = {Statement.class})})
  20. public class ResultSetInterceptor implements Interceptor {
  21. @Override
  22. public Object intercept(Invocation invocation) throws Throwable {
  23. Object[] args = invocation.getArgs();
  24. Statement statement = (Statement) args[0];
  25. ResultSet rs = getFirstResultSet(statement);
  26. if (rs != null) {
  27. ResetSetHolder.setResultSet(rs);
  28. }
  29. Object result;
  30. try{
  31. result = invocation.proceed();
  32. }finally{
  33. ResetSetHolder.clear();
  34. }
  35. return result;
  36. }
  37. private ResultSet getFirstResultSet(Statement stmt) throws SQLException {
  38. ResultSet rs = stmt.getResultSet();
  39. while (rs == null) {
  40. if (stmt.getMoreResults()) {
  41. rs = stmt.getResultSet();
  42. } else if (stmt.getUpdateCount() == -1) {
  43. break;
  44. }
  45. }
  46. return rs;
  47. }
  48. }