您的位置:首页 > 其它

用hibernate调用存储过程

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

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


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

Hibernate中使用存储过程有很多种方法,

1. 使用hibernate命名查询

2. 使用JDBC的方法

大概方法如下

a) 获取hibernatesession

b) 用session获取Connection

c) 实例化ResultSet

d) CallableStatement call= conn.prepareCall(“{ 存储过程执行语句}”);

e) 返回数据,关闭数据库连接,和session连接

使用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();//关闭会话工厂
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: