项目中需要采用存储过程使用代码:
/**
* 执行存储过程的方法(存储过程仅仅支持输入参数的使用,并且无返回值的以后扩展信息)
*
* @param procedureName
* 存储过程的名称
* @param paramList
* 备注:Map<String, Object> paramList 其中String 参数: Object输入的参数对象
* 存储过程参数的信息
*/
public void executeProcedure(String procedureName, final Map<String, Object> paramList) {
if (StringUtils.isNotBlank(procedureName)) {
int length = 0;
if (MapUtils.isNotEmpty(paramList)) {
length = paramList.size();
}
final String executeProcedure = generationExcuteProdure(procedureName, length);
this.getHibernateTemplate().execute(new HibernateCallback() {
@SuppressWarnings("deprecation")
@Override
public Object doInHibernate(Session session) throws HibernateException, SQLException {
boolean flag = false;
Transaction trans = session.beginTransaction();
try {
CallableStatement cstmt = session.connection().prepareCall(executeProcedure);
if (MapUtils.isNotEmpty(paramList)) {
Set<Entry<String, Object>> entrys = paramList.entrySet();
for (Entry<String, Object> entry : entrys) {
cstmt.setObject(entry.getKey(), entry.getValue());
}
}
flag = cstmt.execute();
trans.commit();
} catch (RuntimeException e) {
trans.rollback();
flag = false;
logger.error(e);
}
return flag;
}
});
} else {
throw new RuntimeException(" the procedureName is not null!");
}
}
/**
* 生成存储过程的方法
*
* @param procedureName
* 存储过程的名称
* @param length
* 参数的个数
* @return 生成的执行的存储过程
*/
private String generationExcuteProdure(String procedureName, int length) {
StringBuilder sql = new StringBuilder();
sql.append("{ call ");
sql.append(StringUtils.trim(procedureName));
if (length > 0) {
sql.append("(");
for (int i = 0; i < length; i++) {
sql.append("?");
if (i != length - 1) {
sql.append(",");
}
}
sql.append(")");
}
sql.append("}");
logger.info("executeProcedure", sql.toString());
return sql.toString();
}
备注:项目中采用注解希望大家指点一下,有没有更加简单的方法或采用注解方式:
@SQLInsert,@SQLUpdate,怎么使用希望大家拍砖!!
好像可以但是不知道怎么使用?请教高人支持!!!!
分享到:
相关推荐
hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程
在Hibernate中,调用存储过程通常通过Session对象的createNativeQuery()方法实现,这个方法用于创建原生SQL查询,可以方便地调用数据库的自定义SQL或者存储过程。以下是一个简单的示例,展示了如何调用一个不带参数...
- **执行存储过程**:调用`executeUpdate`或`list`方法执行存储过程。对于无返回值的存储过程,通常使用`executeUpdate`;如果有结果集,可以使用`list`获取并处理结果。 - **处理结果**:如果存储过程返回结果,...
本文将深入探讨如何在Spring和Hibernate中执行存储过程,并基于描述中的例子进行解析。 首先,让我们了解Spring如何执行存储过程。Spring通过JdbcTemplate或NamedParameterJdbcTemplate提供存储过程的调用。...
总结来说,Hibernate调用存储过程是通过`StoredProcedureQuery`对象实现的,提供了更简便的对象化API。对比JDBC,Hibernate更注重开发者体验,而JDBC则更适合对数据库操作有深度控制的需求。在实际开发中,根据项目...
### Hibernate调用存储过程详解 #### 一、建立存储过程 在进行Hibernate调用存储过程之前,首先需要在数据库中创建存储过程。本例中创建了一个名为`getUserInfo`的简单存储过程,其功能是从`user`表中选择所有记录...
执行SQLQuery对象的executeUpdate或list方法来执行存储过程。对于无返回结果或只有输出参数的情况,通常使用executeUpdate。 ```java int rowsAffected = query.executeUpdate(); ``` 5. **关闭资源** 最后,...
总结,使用Hibernate调用存储过程,无论是不带参数还是带参数返回值的,都需要创建SQL查询或`CallableStatement`,设置参数,执行存储过程,并处理返回结果。在处理过程中,需要注意事务管理,确保数据的一致性。...
在某些复杂场景下,比如需要执行存储过程或者复杂的SQL查询时,Hibernate也提供了相应的支持。以下我们将详细探讨如何在Hibernate中调用存储过程,并结合文档内容,讲解相关的知识点。 首先,存储过程是数据库中预...
调用存储过程时,我们需要创建一个Hibernate的Session对象,然后利用Session的`createSQLQuery`方法来执行存储过程。例如,调用`getUserList`过程可以写成: ```java Session session = HibernateUtil....
在Hibernate中调用这个存储过程,我们需要创建一个事务,获取数据库连接,然后通过CallableStatement对象执行存储过程: ```java Transaction tx = session.beginTransaction(); Connection con = session....
然后,实现这个接口,使用Hibernate的`Session`对象调用`createSQLQuery`方法来执行存储过程。例如,调用`getUserList`的实现可能是: ```java public void getUserList() { Session session = HibernateUtil....
- 使用`Session.createSQLQuery()`方法创建SQLQuery对象,然后通过`addScalar()`指定返回值类型,`executeUpdate()`或`list()`执行存储过程。 3. **调用存储过程的方法** - **简单调用**:对于无参数或只接收输入...
2. **定义CallabledStatement**:在Hibernate中,使用Session的doWork方法或者Session的createCallableStatement方法来执行存储过程。 3. **映射输出参数和结果集**:如果存储过程有输出参数或结果集,你需要定义...
- 执行存储过程。 ```java Session session = sessionFactory.openSession(); StoredProcedureQuery query = session.createStoredProcedureQuery("batchUpdateStudent"); // 设置输入参数(如果有的话) ...
除了映射文件,还可以在运行时动态创建SQLQuery对象来执行存储过程,这适用于那些不需要持久化到实体类的结果。例如: ```csharp string sql = "EXEC usp_CustomProcedure :param1"; SQLQuery query = session....
在 Java 中,我们需要使用 `registerOutParameter()` 方法来注册输出参数,然后使用 `execute()` 方法来执行存储过程,并使用 `getString()` 方法来获取输出参数的值。 示例代码 下面是一个简单的示例代码,演示...