使用JdbcTemplate.update()执行存储过程是一个好习惯吗?

时间:2016-11-10 11:24:39

标签: java spring jdbctemplate

目前我使用JdbcTemplate.update()方法执行存储过程,基本上更新并插入一些记录 不回报任何东西。 但我不确定使用update()方法执行存储过程是否是一个好习惯。使用该方法有任何缺点吗? 还是我必须使用execute()方法?我试图避免实现execute(),因为它需要在我的应用程序中进行大量的代码更改。

代码:

jdbcTemplate.update("call test_stored_proc(? , ?)", new Long[] {
                    userId, statusId }); 

2 个答案:

答案 0 :(得分:0)

您可以使用任何您想要的。 _do_something_avx是一种通用API,可以运行任何内容,并让您知道它返回的结果类型(结果集或受影响的行数)。 execute是一个特殊版本,用于返回受影响的行或根本不返回任何内容的查询。

update最终将查询委托给JdbcTemplate

来自java.sql.Statement Javadoc

  

executeUpdate(String sql):   执行给定的SQL语句,该语句可以是INSERT,UPDATE或DELETE语句,也可以是不返回任何内容的SQL语句,例如SQL DDL语句。

     

执行(String sql):   执行给定的SQL语句,该语句可能返回多个结果。

答案 1 :(得分:0)

如果您使用的是基本的Spring jdbc支持,则应使用SimpleJdbcCall来调用存储过程,因为这可以帮助您处理与这些类型的调用相关联的元数据。见http://docs.spring.io/spring/docs/current/spring-framework-reference/html/jdbc.html

但我个人在Spring Data JPA中使用了@Procedure注释,这让事情变得容易多了。见http://docs.spring.io/spring-data/jpa/docs/1.10.4.RELEASE/reference/html/#jpa.stored-procedures

所以你的代码改为调用接口上的方法,如下所示:

@Procedure("test_stored_proc")
public void callIt(long userId, statusId); 

请注意,您必须在应用中设置Spring JPARepository支持才能使其正常工作。