用hibernate调用存储过程

来源:互联网 发布:潍坊行知学校什么样子 编辑:程序博客网 时间:2024/06/08 06:58

存储过程是将一组需要重复执行的操作封装在一起存放在服务器中,支持用户提供的变量,具有强大的编程功能, 可以使用各种sql语句和过程式语句的组合,来封装数据库应用中复杂的业务逻辑和处理规则.

使用存储过程的优点就是:    1.存储过程是预编译的可执行代码,提高效率

2.将常用的操作集编写成存储过程,一次编写可多次使用,程度可重用

Hibernate中使用存储过程有很多种方法,
1. 使用hibernate命名查询
2. 使用JDBC的方法
大概方法如下
a) 获取hibernatesession
b) 用session获取Connection
c) 实例化ResultSet
d) CallableStatement call= conn.prepareCall(“{ 存储过程执行语句}”);
e) 返回数据,关闭数据库连接,和session连接

  1. 使用Hibernate中的SQLQuery接口执行
    这个方法获取数据比较简单,今天就使用这个方法来查询数据

详细过程:
a) 创建表,使用DDL语句

代码部分:
DROP TABLE IF EXISTS t_user;
CREATE TABLE t_user (
user_id int(11) NOT NULL AUTO_INCREMENT,
user_name varchar(30) NOT NULL,
user_pwd varchar(20) DEFAULT NULL,
PRIMARY KEY (user_id)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

b) 向表内插入数据使用DML语句
代码部分
INSERT INTO t_user VALUES(数值1,数值2,….);

c) 创建存储过程
代码部分:

create PROCEDURE selc_id(IN id varchar(20))//创建一个名为selc_id的存储过程,传入一个参数    BEGIN        set @variable1=CONCAT('%',id,'%');        //创建一个全局变量,        IF id is null or id='' THEN         select * from t_user;        else         select * from t_user where user_name like @variable1;      END if;    END

d),查询存储工程是否创建成功
在mysql客户端
show procedure status;
如创建成功,Navicat会显示结果条数

e),创建一个Hibernate项目,把导入相关jar包,配置hibernate.cfg.xml
代码测试部分

private SessionFactory sessionFact=HibernateSessionFactory.getSessionFactory(); private Session session= sessionFact.openSession();String proc="{call selc_id(1) }"; SQLQuery query = session.createSQLQuery(proc);//query.setString(0, "admin");//可以设置参数到语句中        //query.setString(1, "admin");List list =query.list();System.out.println(list.get(0));//这里获取到的是一个对象session.close();//关闭会话sessionFact.close();//关闭会话工厂
0 0