这是我的问题。我们公司决定从专有数据访问系统转向使用 Spring 数据访问。我们的大多数代码更改只是改变我们调用存储过程的方式。例如。
输入:
public DataSet myMethodName1(Integer inputint1) {
DAOInfo info = _newDAOInfo();
info.setProperty(PROP_PROCNAME, "sp_name");
info.addParameter("sp_param1", PARAMETER_TYPE_INPUT, DATATYPE_INT, inputint1);
return _executeDAO(info);
}
public DataSet myMethodName2(String inputchar1, String inputchar2) {
DAOInfo info = _newDAOInfo();
info.setProperty(PROP_PROCNAME, "sp_name");
info.addParameter("sp_param1", PARAMETER_TYPE_INPUT, DATATYPE_CHAR, inputchar1);
info.addParameter("sp_param2", PARAMETER_TYPE_INPUT, DATATYPE_CHAR, inputchar2);
return _executeDAO(info);
}
输出:
public DataSet myMethodName1(Integer inputint1) {
SimpleJdbcCall jdbcCall = new SimpleJdbcCall (dataSource).withProcedureName("sp_name");
jdbcCall.setReturnValueRequired(true);
jdbcCall.declareParameters(new SqlParameter("sp_param1", Types.INTEGER));
jdbcCall.declareParameters(new SqlReturnResultSet(DATASET_PARAMETER_NAME, new DataSetResultSetExtractor()));
Map<String, Object> in = new HashMap<String, Object>();
in.put("sp_param1", profileId);
return executeSP(jdbcCall, inputint1);
}
public DataSet myMethodName2(String inputchar1, String inputchar2) {
SimpleJdbcCall jdbcCall = new SimpleJdbcCall (dataSource).withProcedureName("sp_name");
jdbcCall.setReturnValueRequired(true);
jdbcCall.declareParameters(new SqlParameter("sp_param1", Types.CHAR));
jdbcCall.declareParameters(new SqlParameter("sp_param2", Types.CHAR));
jdbcCall.declareParameters(new SqlReturnResultSet(DATASET_PARAMETER_NAME, new DataSetResultSetExtractor()));
Map<String, Object> in = new HashMap<String, Object>();
in.put("sp_param1", inputchar1);
in.put("sp_param2", inputchar2);
return executeSP(jdbcCall, in);
}
我不是在要求任何人解决问题。我只是在寻找工具的建议来帮助我解决这样的问题。请注意,任何一种方法中的参数数量可能在 0 到 30 之间变化。
上面的例子有2个方法。我有一个包含 100 个方法的文件,就像这两个方法一样。还有其他较小的文件有此需求。所以值得我花几个小时的时间。与我手动进行一堆重复的剪切粘贴相比,计算机会做得更好、更一致。
看起来我可以用一些时间制作一个 TextPad 宏来完成这项工作。但由于 TextPad 宏不可编辑,因此非常烦人。我可以使用的工具有 Windows7、RAD、TextPad、Java 或任何其他免费工具。感觉如果有一个免费的编辑器允许您编辑宏,这可能会很容易。
更新:我忘了提及此代码位于 jar 中并且需要向后兼容,因此我不需要有关如何修复代码的解决方案。
感谢您的想法或想法。
最佳答案
我的第一次尝试是将 SimpleJdbcCall
包装在 DAOInfo
内部,以保持 API 完全相同并在内部使用新功能。
如果您想迁移到 Spring,那么我建议考虑使用 POJO 而不是 30 个参数的方法,并加上 JPA 注释将它们映射到 SQL。 JPA 2.1 includes support for stored procedures .
使用 POJO 有很多优点。旧代码:
foo.method("hello","what","is","this",....);
新代码:
UpdateFoo foo = new UpdateFoo();
foo.setName("hello");
foo.setQuestion("what");
foo.setVerb("is");
foo.setTarget("this");
foo.execute();
-> 你将停止混合参数。
现在,其中一些流程可以实现自动化。 You can use the standalone Eclipse Java compiler to parse Java code 。这为您提供了抽象语法树 (AST) - 您可以分析和转换的 Java 代码的内存中模型。重构使用它来将一种形式的代码转换为另一种形式。
这种方法很强大,但需要一些时间来习惯使用 AST。
另一种方法是使用正则表达式。使用它们您将获得更快的成功,但它们的功能仅限于解析递归代码。如果您使用正则表达式,那么我建议用 Java 编写转换器:
- 您有一个强大的 IDE 来编辑和调试它们
- 您已经了解 Java(您不必学习编辑器的宏语言)
- 您可以使用各种框架让您的生活更加简单
如果您想要一个真正强大的解决方案,请看看 jOOQ。 jOOQ 3.0 has support to call stored procedures代码生成器将为您构建大部分代码。
关于java - 您将使用什么工具来完成重新格式化 java 代码的任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21479809/