在getSqlMapClientTemplate中执行preparedStatement

时间:2014-05-09 06:09:39

标签: spring jdbc ibatis

我想在getsqlMapClientTemplate()方法中执行prepardStatement。另一个查询结果会收到preparedStatement参数值的一个。是否可以像这样执行?

String query="select Id_no from employee";
String resultQuery="select empSalary from employeePay where Id=?";
prepareStatement ps=con.preprepareStatement(query); // Instead of connection reference i want to use getSqlMapClientTemplate
ResultSet rs=ps.executeQuery();
while(rs.next()){
//pst.setInt(1,rs.getInt(1)); // here if i want to pass dynamic value to execute resultQuery
  pst.setInt(1,userGivenValue);
PrepareStatement pst=con.prepareStatement(resultQuery); //
pst.executeQuery();

forpreparedStatement而不是连接对象我想使用getSqlMapClientTemplate()方法。

1 个答案:

答案 0 :(得分:0)

您不希望SqlMapClientTemplate代替您JdbcTemplate

接下来你的解决方案存在缺陷,因为它属于1 + N选择问题,即。您执行单个查询以获取ID列表,然后为每个id发出另一个查询。创建单个查询,一次性完成所有操作更有效。

final String query = "select empSalary from employeePay where Id in (select Id_no from employee)" 
JdbcTemplate template = getJdbcTemplate();
List<Long> salaries = template.queryForList(query, Long.class);

这样的事情。

或者,如果您想使用SqlMapClientTemplate,只需将查询添加到ibatis配置中,让iBatis(而不是JdbcTemplate)为您处理难题。