hibernate调用mysql存储过程_Hibernate3.x调用存储过程

原文出处:http://tech.it168.com/j/d/2007-05-14/200705141007843.shtml

说明:该文不得转载

摘要:本文以详尽的实例展示了hibernate3.x中调用存储过程各步骤,从建立测试表、存储过程的建立、工程的建立以及类的编写和测试一步一步引导用户学习hibernate3.x中调用存储过程的方法.

如果底层数据库(eg. Oracle、mysql、sqlserver)等支持存储过程,可通过存储过程执行批量删除、更新等操作。本文以实例说明在hibernate3.x中如何调用存储过程。

说明:本例hibernate所用版本为3.0,mysql所用版本为5.0,所用数据库驱动为mysql-connector-java-5.0.4-bin.jar。

一.建表与初始化数据

在mysql的test数据库中建立一张新表:tbl_user,建表语句如下:

DROP TABLE IF EXISTS `user`;

CREATE TABLE `tbl_user` (

`userid` varchar(50) NOT NULL,

`name` varchar(50) default '',

`blog` varchar(50) default '',

PRIMARY KEY (`userid`)

) ENGINE=InnoDB DEFAULT CHARSET=gb2312;

建表成功后,在该表中插入如下4条初始数据,对应的sql语句如下:

INSERT INTO `tbl_user` (`userid`,`name`,`blog`) VALUES ('ant', '蚂蚁', 'http://www.blogjava.net/qixiangnj');

INSERT INTO `tbl_user` (`userid`,`name`,`blog`) VALUES ('beansoft', 'bean', 'http://www.blogjava.net/beansoft');

INSERT INTO `tbl_user` (`userid`,`name`,`blog`) VALUES ('sterning', '似水流年', 'http://www.blogjava.net/sterning');

INSERT INTO `tbl_user` (`userid`,`name`,`blog`) VALUES ('tom', 'tom' , 'http://www.blogjava.net/tom');

二.建立存储过程

为测试hibernate3.x中存储过程的调用,我们在user表中建立getUserList、createUser、updateUser和deleteUser这四个存储过程,在mysql中建立存储过程的语句如下:

1.获得用户信息列表的存储过程--getUserList

DROP PROCEDURE IF EXISTS `getUserList`;

CREATE PROCEDURE `getUserList`()

begin

select * from tbl_user;

end;

2.通过传入的参数创建用户的存储过程--createUser

DROP PROCEDURE IF EXISTS `createUser`;

CREATE PROCEDURE `createUser`(IN userid varchar(50), IN name varchar(50), IN blog varchar(50))

begin

insert into tbl_user values(userid, name, blog);

end;

3.通过传入的参数更新用户信息的存储过程--updateUser

DROP PROCEDURE IF EXISTS `updateUser`;

CREATE PROCEDURE `updateUser`(IN nameValue varchar(50), IN blogValue varchar(50), IN useidValue varchar(50))

begin

update tbl_user set name = nameValue, blog = blogValue where userid = useridValue;

end;

4.删除用户信息的存储过程--deleteUser

DROP PROCEDURE IF EXISTS `deleteUser`;

CREATE PROCEDURE `deleteUser`(IN useridValue int(11))

begin

delete from tbl_user where userid = useridValue;

end;

三.编程前准备工作

1.建立工程

在进入代码编写前,建立新的java工程proc, 目录结构如下:

proc

-lib

-bin

-src

-com

-amigo

-proc

-model

2.引入所需包

将hibernate3.0的包以及其相关包放入编译路径中,另注意:还需将mysql的数据库驱动jar包mysql-connector-java-5.0.4-bin.jar放入编译路径中。

四.编码与测试

在准备工作完成后,进入编码与测试阶段,本例演示了在hibernate3.0中调用mysql的存储过程的方法。

1、hibernate的配置文件

在hibernate的配置文件中包含数据库的连接信息,以及加入OR mapping的xml格式的映射文件,该文件如下(部分内容略):

4f1150b881333f12a311ae9ef34da474.png……

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png        jdbc:mysql://localhost:3306/test

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png        root

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png        root

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png        com.mysql.jdbc.Driver

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png        org.hibernate.dialect.MySQLDialect

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png        true

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png         

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png    ……

4f1150b881333f12a311ae9ef34da474.png

2、OR Mapping文件

产生的OR Mapping文件有User.java以及其对应的hibernate映射文件User.hbm.xml。其中User.java的内容如下:

4f1150b881333f12a311ae9ef34da474.pngpackage com.amigo.proc.model;

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png 

4f1150b881333f12a311ae9ef34da474.png

1fa987a29c6482f53d401256f96355eb.png/**

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png * 用户信息对象

d18c02628675d0a2c816449d98bda930.png

8f1ba5b45633e9678d1db480c16cae3f.png */

4f1150b881333f12a311ae9ef34da474.png

1fa987a29c6482f53d401256f96355eb.pngpublic class User implements java.io.Serializable {

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png    private static final long serialVersionUID = 1L;

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png    /** 用户id*/

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png    private String userid;

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png    /** 用户姓名*/

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png    private String name;

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png    /** 用户blog*/

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png    private String blog;

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png//省略get/set方法

d18c02628675d0a2c816449d98bda930.png

8f1ba5b45633e9678d1db480c16cae3f.png}

4f1150b881333f12a311ae9ef34da474.png

User.hbm.xml文件的内容如下:

4f1150b881333f12a311ae9ef34da474.png<?xml  version="1.0"?>

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.pnghibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png 

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png    

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png        

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png            

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png        

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png        

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png        

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png    

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png    

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png    

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png        

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png            

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png            

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png            

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png        

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png        {call getUserList()}

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png    

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png

在该文件中需注意中的这段代码,调用的存储过程在其中定义,并定义了调用存储过程后将记录组装成User对象,同时对记录的字段与对象的属性进行相关映射。

3.管理hibernate的session以及事务的类HibernateSessionFactory

该类包括打开session等方法,主要用于管理hibernate的session和事务。该类的内容如下(部分内容略):

4f1150b881333f12a311ae9ef34da474.pngpackage com.amigo.proc;

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.pngimport java.io.ByteArrayOutputStream;

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.pngimport java.io.OutputStreamWriter;

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png 

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.pngimport org.hibernate.HibernateException;

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.pngimport org.hibernate.Session;

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.pngimport org.hibernate.SessionFactory;

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.pngimport org.hibernate.Transaction;

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.pngimport org.hibernate.cfg.Configuration;

4f1150b881333f12a311ae9ef34da474.png

1fa987a29c6482f53d401256f96355eb.png/**

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png * Hibernate相关控制

d18c02628675d0a2c816449d98bda930.png

8f1ba5b45633e9678d1db480c16cae3f.png */

4f1150b881333f12a311ae9ef34da474.png

1fa987a29c6482f53d401256f96355eb.pngpublic class HibernateSessionFactory {

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png    /** Hibernate配置文件 */

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png    private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png 

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png    /** 存储一个单独的session实例 */

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png    private static final ThreadLocal threadLocal = new ThreadLocal();

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png 

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png    /** Hibernate配置相关的一个实例 */

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png    private static Configuration configuration = null;

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png 

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png    /** Hibernate SessionFactory的一个实例 */

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png    private static SessionFactory sessionFactory;

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png 

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png    /** Hibernate的字符编码集*/

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png    private static String charSet;

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png    /** 若Hibernate未设置字符编码集时,采用的字符编码集*/

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png    private static final String encoding = (new OutputStreamWriter(

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png            new ByteArrayOutputStream())).getEncoding();

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png 

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png    /**

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png     * 默认构造函数

d18c02628675d0a2c816449d98bda930.png

ecedf933ec37d714bd4c2545da43add2.png     */

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png    public HibernateSessionFactory() {

d18c02628675d0a2c816449d98bda930.png

ecedf933ec37d714bd4c2545da43add2.png    }

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png 

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png    /**

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png     * 打开Hibernate的数据库连接

d18c02628675d0a2c816449d98bda930.png

ecedf933ec37d714bd4c2545da43add2.png     */

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png    public static final synchronized void open() {

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        if (sessionFactory != null)

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png            return;

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png        try {

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png            sessionFactory = getConfiguration().buildSessionFactory();

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png            charSet = configuration.getProperty("hibernate.connection.charSet");

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png            if (charSet == null)

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png                charSet = encoding;

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png            return;

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png        } catch (Throwable throwable) {

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png            throw new ExceptionInInitializerError(throwable);

d18c02628675d0a2c816449d98bda930.png

ecedf933ec37d714bd4c2545da43add2.png        }

d18c02628675d0a2c816449d98bda930.png

ecedf933ec37d714bd4c2545da43add2.png    }

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png 

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png    /**

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png     * 配置Hibernate数据库,并将其打开

d18c02628675d0a2c816449d98bda930.png

ecedf933ec37d714bd4c2545da43add2.png     */

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png    private static synchronized void configure() throws HibernateException {

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png        if (sessionFactory == null) {

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png            if (configuration == null) {

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png                getConfiguration().configure(CONFIG_FILE_LOCATION);

d18c02628675d0a2c816449d98bda930.png

ecedf933ec37d714bd4c2545da43add2.png            }

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png            open();

d18c02628675d0a2c816449d98bda930.png

ecedf933ec37d714bd4c2545da43add2.png        }

d18c02628675d0a2c816449d98bda930.png

ecedf933ec37d714bd4c2545da43add2.png    }

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png 

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png    /**

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png     * 获得配置实例

d18c02628675d0a2c816449d98bda930.png

ecedf933ec37d714bd4c2545da43add2.png     */

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png    public static synchronized final Configuration getConfiguration() {

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png        if (configuration == null) {

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png            configuration = new Configuration();

d18c02628675d0a2c816449d98bda930.png

ecedf933ec37d714bd4c2545da43add2.png        }

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        return configuration;

d18c02628675d0a2c816449d98bda930.png

ecedf933ec37d714bd4c2545da43add2.png    }

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png 

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png    /**

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png     * 功能说明:获得SessionFactory

d18c02628675d0a2c816449d98bda930.png

ecedf933ec37d714bd4c2545da43add2.png     */

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png    public static final SessionFactory getSessionFactory() {

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        return sessionFactory;

d18c02628675d0a2c816449d98bda930.png

ecedf933ec37d714bd4c2545da43add2.png    }

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png 

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png    /**

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png     * 功能说明:获得session

d18c02628675d0a2c816449d98bda930.png

ecedf933ec37d714bd4c2545da43add2.png     */

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png    public static final Session getSession() throws HibernateException {

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        configure();

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        Session session = null;

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png        if (threadLocal.get() == null) {

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png            session = getSessionFactory().openSession();

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png            threadLocal.set(session);

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png        } else {

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png            try {

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png                session = (Session)threadLocal.get();

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png            } catch(Exception ex) {

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png                session = getSessionFactory().openSession();

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png                threadLocal.set(session);

d18c02628675d0a2c816449d98bda930.png

ecedf933ec37d714bd4c2545da43add2.png            }

d18c02628675d0a2c816449d98bda930.png

ecedf933ec37d714bd4c2545da43add2.png        }

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        return session;

d18c02628675d0a2c816449d98bda930.png

ecedf933ec37d714bd4c2545da43add2.png    }

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png    //其余方法略

d18c02628675d0a2c816449d98bda930.png

8f1ba5b45633e9678d1db480c16cae3f.png}

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png

4. hibernate调用存储过程的测试类

本类是该例的核心类,在本类中,以实例清楚地说明了在hibernate中如何调用存储过程,例示了hibernate调用查询、更新、插入和删除这四类存储过程的方法,该类的内容如下:

4f1150b881333f12a311ae9ef34da474.pngpackage com.amigo.proc;

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png 

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.pngimport java.sql.CallableStatement;

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.pngimport java.sql.Connection;

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.pngimport java.sql.PreparedStatement;

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.pngimport java.util.List;

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png 

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.pngimport com.amigo.proc.model.User;

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png 

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.pngimport org.hibernate.Session;

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.pngimport org.hibernate.Transaction;

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png 

4f1150b881333f12a311ae9ef34da474.png

1fa987a29c6482f53d401256f96355eb.png/**

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png * hibernate调用存储过程

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png * @author Amigo Xie(xiexingxing1121@126.com)

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png * @since 2007/04/30

d18c02628675d0a2c816449d98bda930.png

8f1ba5b45633e9678d1db480c16cae3f.png */

4f1150b881333f12a311ae9ef34da474.png

1fa987a29c6482f53d401256f96355eb.pngpublic class ProcTest {

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png 

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png    /**

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png     * @param args

d18c02628675d0a2c816449d98bda930.png

ecedf933ec37d714bd4c2545da43add2.png     */

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png    public static void main(String[] args) throws Exception {

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        ProcTest proc = new ProcTest();

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        Session session = HibernateSessionFactory.getSession();

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        proc.testProcQuery(session);

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        proc.testProcUpdate(session);

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        System.out.println("update successfully");

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        proc.testProcInsert(session);

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        System.out.println("insert successfully");

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        proc.testProcDelete(session);

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        System.out.println("delete successfully");

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        session.close();

d18c02628675d0a2c816449d98bda930.png

ecedf933ec37d714bd4c2545da43add2.png    }

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png    

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png    /**

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png     * 测试实现查询的存储过程

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png     * @throws Exception

d18c02628675d0a2c816449d98bda930.png

ecedf933ec37d714bd4c2545da43add2.png     */

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png    private void testProcQuery(Session session) throws Exception {

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        //查询用户列表

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        List list = session.getNamedQuery("getUserList").list();

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png        for (int i = 0; i 

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png            User user = (User) list.get(i);    

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png            System.out.print("序号: " + (i+1));

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png            System.out.print(", userid: " + user.getUserid());

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png            System.out.print(", name: " + user.getName());

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png            System.out.println(", blog: " + user.getBlog());

d18c02628675d0a2c816449d98bda930.png

ecedf933ec37d714bd4c2545da43add2.png        }

d18c02628675d0a2c816449d98bda930.png

ecedf933ec37d714bd4c2545da43add2.png    }

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png    

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png    /**

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png     * 测试实现更新的存储过程

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png     * @throws Exception

d18c02628675d0a2c816449d98bda930.png

ecedf933ec37d714bd4c2545da43add2.png     */

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png    private void testProcUpdate(Session session) throws Exception {

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        //更新用户信息

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        Transaction tx = session.beginTransaction(); 

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        Connection con = session.connection(); 

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        String procedure = "{call updateUser(?, ?, ?)}"; 

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        CallableStatement cstmt = con.prepareCall(procedure); 

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        cstmt.setString(1, "陈xx");

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        cstmt.setString(2, "http://www.blogjava.net/sterningChen");

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        cstmt.setString(3, "sterning");

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        cstmt.executeUpdate(); 

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        tx.commit();

d18c02628675d0a2c816449d98bda930.png

ecedf933ec37d714bd4c2545da43add2.png    }

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png 

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png    /**

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png     * 测试实现插入的存储过程

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png     * @throws Exception

d18c02628675d0a2c816449d98bda930.png

ecedf933ec37d714bd4c2545da43add2.png     */

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png    private void testProcInsert(Session session) throws Exception {

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        //创建用户信息

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        session.beginTransaction();

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        PreparedStatement st = session.connection().prepareStatement("{call createUser(?, ?, ?)}");

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        st.setString(1, "amigo");

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        st.setString(2, "阿蜜果");

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        st.setString(3, "http://www.wblogjava.net/amigoxie");

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        st.execute();

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        session.getTransaction().commit(); 

d18c02628675d0a2c816449d98bda930.png

ecedf933ec37d714bd4c2545da43add2.png    }

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png    

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png    /**

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png     * 测试实现删除的存储过程

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png     * @throws Exception

d18c02628675d0a2c816449d98bda930.png

ecedf933ec37d714bd4c2545da43add2.png     */

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png    private void testProcDelete(Session session) throws Exception {

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        //删除用户信息

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        session.beginTransaction();

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        PreparedStatement st = session.connection().prepareStatement("{call deleteUser(?)}");

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        st.setString(1, "amigo");

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        st.execute();

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        session.getTransaction().commit();

d18c02628675d0a2c816449d98bda930.png

ecedf933ec37d714bd4c2545da43add2.png    }

d18c02628675d0a2c816449d98bda930.png

8f1ba5b45633e9678d1db480c16cae3f.png}

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png

在本类中,调用查询类存储过程时,调用session.getNamedQuery("…")方法来获得User.hbm.xml中配置的查询存储过程。在其余的存储过程调用的测试中,首先通过hibernate的session获得connection,然后调用connection对象的相应方法来实现存储过程的调用。

该类的执行结果如下:

Hibernate: {call getUserList()}

序号: 1, userid: ant, name: 蚂蚁, blog: http://www.blogjava.net/qixiangnj

序号: 2, userid: beansoft, name: bean, blog: http://www.blogjava.net/beansoft

序号: 3, userid: sterning, name: 似水流年, blog: http://www.blogjava.net/sterning

序号: 4, userid: tom, name: tom, blog: http://www.blogjava.net/tom

update successfully

insert successfully

delete successfully

五.总结本例提出了在hibernate3中调用mysql的存储过程的实现方案,从本例可以看出,hibernate提供了在*.hbm.xml中配置调用存储过程,并通过向用户提供session.getNamedQuery(“…”)方法来调用配置的调用查询相关的存储过程的方法,另外,hibernate还提供了取得sql的connection的方法,从而能够通过connection中存储过程调用相关的方法来实现存储过程的调用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值