欢迎使用普元产品知识库,本知识库包含普元应用开发平台EOSPlatform,流程平台BPS,企业服务总线ESB,微服务平台Microservice,运维管理平台Devops,数据集成平台DI
欢迎使用普元文档库
目前开发中遇到需要获取命名SQL的SQL内容及其对应的入参的问题,比如希望借助已经开发好的命名SQL,但使用JDBC或者Spring的JdbcTemplate来执行SQL。
普元开发平台除了封装iBatis的日常使用API,还提供相对底层的API来解决上述问题
public static DataObject getSqlAndParamByNameSqlId(String nameSqlId, Object param) {
SessionScope sessionScope = new SessionScope();
sessionScope.incrementRequestStackDepth();
RequestScope requestScope = new RequestScope();
requestScope.setSession(sessionScope);
SqlMapClientImpl sci = (SqlMapClientImpl) SqlMapClientManager.INSTANCE.getClient();
MappedStatement ms = sci.getMappedStatement(nameSqlId);
ms.initRequest(requestScope);
ms.getCacheKey(requestScope, param);
Sql sql = ms.getSql();
String sqlString = sql.getSql(requestScope, param);
Object[] sqlParams = sql.getParameterMap(requestScope, param).getParameterObjectValues(requestScope, param);
DataObject sqlObj = DataObjectUtilWy.createEmptyDataObject();
sqlObj.setString("sql", sqlString); // 已经使用占位符(?)替换了参数列表后的SQL
sqlObj.set("params", sqlParams); // 占位符对应的SQL入参列表
return sqlObj;
}
}
完整代码及示例参见基于普元开发平台获取iBatis的SQL及其入参的方法.docx