java - 您将使用什么工具来完成重新格式化 java 代码的任务?

标签 java macros text-editor

这是我的问题。我们公司决定从专有数据访问系统转向使用 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 编写转换器:

  1. 您有一个强大的 IDE 来编辑和调试它们
  2. 您已经了解 Java(您不必学习编辑器的宏语言)
  3. 您可以使用各种框架让您的生活更加简单

如果您想要一个真正强大的解决方案,请看看 jOOQ。 jOOQ 3.0 has support to call stored procedures代码生成器将为您构建大部分代码。

关于java - 您将使用什么工具来完成重新格式化 java 代码的任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21479809/

相关文章:

c - 如何制作#define 函数的循环?

多个链表可以共享相同的结构吗?

javascript - 有没有一种快速的方法可以在文本编辑器中将 JavaScript 对象转换为有效的 JSON?

java - 如何允许用户从 Android 中的联系人中选择一个或多个电话号码和/或电子邮件地址

java - 导入 Ant 构建脚本时获取 xerces 类的 ClassCastException

java - 具有动态 ArrayList 项类型的 Gson TypeToken

Java lambda (JSR 335) : Why "eliminate support for unbound inner class constructor references"?

Linux:使用鼠标加*键盘*修饰符模拟滚动

javascript - tinymce文本编辑器如何在新窗口打开超链接?

visual-studio-code - VSCode 用键盘选择列