是的,这会很好,但是,我认为这是不可能的。一种方法是在 POJO 类中创建一个静态函数来获取“插入 SQL 语句”。虽然您必须保持两个函数(插入和参数)之间的顺序。
Employee.java
public static String getEmployeeInsertStatement()
{
//if you add more fields, increase this integer
int numberOfParameters = 5;
String insertion = "INSERT INTO employee\n"
+ "(name\n"
+ ",address\n"
+ ",phone\n"
+ ",comments\n"
+ ",hire_date\n";
insertion += ")"
+ "VALUES\n"
+ getParameterQuestionMarks(numberOfParameters);
return insertion;
}
// allow for multiple insertions
public static Object[][] getEmployeeParamters(List<Employee> employees)
{
List<List<Object>> paramList = new ArrayList<>();
for (Employee employee : employees)
{
List<Object> objectList = new ArrayList<>();
objectList.add(employee.getName());
objectList.add(employee.getAddress());
objectList.add(employee.getPhone());
objectList.add(employee.getComments());
objectList.add(employee.getHire_date());
paramList.add(objectList);
}
return paramList.stream().map(u -> u.toArray(new Object[0])).toArray(Object[][]::new);
}
public static String getParameterQuestionMarks(int number)
{
String paramterMarks = "(";
for (int x = 1; x <= number; x++)
{
paramterMarks += "?";
if ((x + 1) <= number)
{
paramterMarks += ",";
}
}
paramterMarks += ")";
return paramterMarks;
}
那么在你的 SQLManager 类中,你的 insert 方法是这样的:
public void insertEmployees(List<Employee> employees)
{
Connection connection = createConnection();
try
{
new QueryRunner().insertBatch(connection, Employee.getEmployeeInsertStatement(), new ScalarHandler<>(), Employee.getEmployeeParameters(employees));
} catch (SQLException ex)
{
Logger.getLogger(SQLManager.class.getName()).log(Level.SEVERE, null, ex);
} finally
{
try
{
DbUtils.close(connection);
} catch (SQLException ex)
{
Logger.getLogger(SQLManager.class.getName()).log(Level.SEVERE, null, ex);
}
}
}