Parcourir la source

增加for update

zhouhao il y a 7 ans
Parent
commit
73bc6a66d7

+ 13 - 4
hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/plgins/pager/PagerInterceptor.java

@@ -26,6 +26,7 @@ import org.apache.ibatis.reflection.MetaObject;
 import org.apache.ibatis.reflection.SystemMetaObject;
 import org.apache.ibatis.session.ResultHandler;
 import org.apache.ibatis.session.RowBounds;
+import org.hswebframework.ezorm.core.param.QueryParam;
 import org.hswebframework.web.dao.mybatis.builder.EasyOrmSqlBuilder;
 import org.springframework.stereotype.Component;
 
@@ -48,12 +49,20 @@ public class PagerInterceptor implements Interceptor {
             MetaObject metaStatementHandler = SystemMetaObject.forObject(statementHandler);
             String sql = statementHandler.getBoundSql().getSql();
             Pager pager = Pager.getAndReset();
-            if (pager != null && sql.trim().toLowerCase().startsWith("select")) {
-                String newSql = EasyOrmSqlBuilder.getInstance()
-                        .getActiveDatabase().getDialect()
-                        .doPaging(sql, pager.pageIndex(), pager.pageSize());
+            String newSql = sql;
+            if (sql.trim().toLowerCase().startsWith("select")) {
+                if (pager != null) {
+                    newSql = EasyOrmSqlBuilder.getInstance()
+                            .getActiveDatabase().getDialect()
+                            .doPaging(sql, pager.pageIndex(), pager.pageSize());
+                }
+                Object queryEntity = statementHandler.getParameterHandler().getParameterObject();
+                if (queryEntity instanceof QueryParam && ((QueryParam) queryEntity).isForUpdate()) {
+                    newSql = newSql + " for update";
+                }
                 metaStatementHandler.setValue("delegate.boundSql.sql", newSql);
             }
+
         }
         return Plugin.wrap(target, this);
     }