如何使用休眠获取Mysql存储过程的输出参数?

用户名

我有一个MySql存储过程,其中包含两个输入参数(用户名和密码)和一个输出参数(用户状态)。我无法通过使用Hibernate 4获得Output参数,我在下面引用了以下链接http://www.mkyong.com/hibernate/how-to-call-store-procedure-in-hibernate/

冬眠代码

Session session = sessionFactory.openSession();  
Query query = session.createSQLQuery("CALL SP_Login_Authentication(:u_name,:p_word,:output)");
query.setParameter("u_name", username);  
query.setParameter("p_word", pwd);  
List return1 = query.list();

储存程序

DELIMITER $$
USE `CP`$$
DROP PROCEDURE IF EXISTS `SP_Login_Authentication`$$
CREATE PROCEDURE `SP_Login_Authentication`(IN u_name VARCHAR(255),IN p_word VARCHAR(255),OUT output INT )
BEGIN 
DECLARE user1 INT DEFAULT 0;
DECLARE password1 INT DEFAULT 0;
DECLARE status1 INT ;
SELECT COUNT(*) INTO user1
FROM users WHERE user_name=u_name;
SELECT COUNT(DISTINCT PASSWORD) INTO password1
FROM users WHERE PASSWORD=p_word;
SET status1=(SELECT STATUS FROM users WHERE PASSWORD=p_word AND user_name=u_name);
IF(user1 = 0) THEN
SET output = -3;
ELSEIF (user1 = 1 AND password1 = 0) THEN
SET output = -2;
ELSEIF (user1 = 1 AND password1 = 1 AND status1=1 ) THEN
SET output = 1;
ELSEIF (user1 = 1 AND password1 = 1 AND status1=0 ) THEN
SET output = 0;
ELSEIF (user1 = 1 AND password1 = 1 AND status1=-1 ) THEN
SET output =-1;
END IF;
END$$
DELIMITER ; 
弗拉德·米哈尔西娅(Vlad Mihalcea)

您可以使用datasource-proxy来做到这一点,正如我在本文中所描述

假设您的应用程序需要一个“ dataSource” @Resource,这是配置ttddyy代理的方法:

<bean id="testDataSource" class="bitronix.tm.resource.jdbc.PoolingDataSource" init-method="init"
  destroy-method="close">
    <property name="className" value="bitronix.tm.resource.jdbc.lrc.LrcXADataSource"/>
    <property name="uniqueName" value="testDataSource"/>
    <property name="minPoolSize" value="0"/>
    <property name="maxPoolSize" value="5"/>
    <property name="allowLocalTransactions" value="false" />
    <property name="driverProperties">
        <props>
            <prop key="user">${jdbc.username}</prop>
            <prop key="password">${jdbc.password}</prop>
            <prop key="url">${jdbc.url}</prop>
            <prop key="driverClassName">${jdbc.driverClassName}</prop>
        </props>
    </property>
</bean>

<bean id="proxyDataSource" class="net.ttddyy.dsproxy.support.ProxyDataSource">
    <property name="dataSource" ref="testDataSource"/>
    <property name="listener">
        <bean class="net.ttddyy.dsproxy.listener.ChainListener">
            <property name="listeners">
                <list>
                    <bean class="net.ttddyy.dsproxy.listener.CommonsQueryLoggingListener">
                        <property name="logLevel" value="INFO"/>
                    </bean>
                    <bean class="net.ttddyy.dsproxy.listener.DataSourceQueryCountListener"/>
                </list>
            </property>
        </bean>
    </property>
</bean>

<alias name="proxyDataSource" alias="dataSource"/>

现在,Hibernate输出与数据源代理:

INFO  [main]: o.v.s.i.WarehouseProductInfoServiceImpl - newWarehouseProductInfo
Hibernate: select company0_.id as id1_6_, company0_.name as name2_6_ from Company company0_
INFO  [main]: n.t.d.l.CommonsQueryLoggingListener - Name:, Time:1, Num:1, Query:{[select company0_.id as id1_6_, company0_.name as name2_6_ from Company company0_][]}
Hibernate: insert into WarehouseProductInfo (id, quantity) values (default, ?)
INFO  [main]: n.t.d.l.CommonsQueryLoggingListener - Name:, Time:0, Num:1, Query:{[insert into WarehouseProductInfo (id, quantity) values (default, ?)][19]}
Hibernate: insert into Product (id, code, company_id, importer_id, name, version) values (default, ?, ?, ?, ?, ?)
INFO  [main]: n.t.d.l.CommonsQueryLoggingListener - Name:, Time:0, Num:1, Query:{[insert into Product (id, code, company_id, importer_id, name, version) values (default, ?, ?, ?, ?, ?)][phoneCode,1,-5,Phone,0]}

数据源代理查询包含参数值,您甚至可以在默认日志记录侦听器旁边添加自定义JDBC语句侦听器。

这适用于从SELECT语句到存储过程的任何SQL查询。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用休眠实体管理器在Spring Boot中使用输出参数调用MySQL存储过程

如何使用休眠在Spring Boot中调用MySQL存储过程?

如何在c#中获取存储过程输出参数

如何获取 SQLCLR 存储过程的输出参数值?

如何使用mysql使用输入和输出参数在Entity Framework Core中调用存储过程

如何使用Pomelo ORM为.net核心传递MySQL存储过程的输出参数

PHP:如何获取MySql存储过程的输出值?

SQLAlchemy从Postgresql存储过程获取输出参数

如何使用存储的MYSQL过程中的表输出

使用输出参数执行存储过程?

存储过程的输出参数

如何使用输入参数调用存储过程并使用输出参数填充文本框?

如何抑制mysql存储过程的输出?

如何使用存储过程获取MYSQL动态查询?

如何在T-SQL中获取所有存储过程的输入和输出参数

如何从存储过程中获取输出参数结果和查询结果?

通过批处理文件将SQLCMD与存储过程一起使用-获取输出参数

获取存储过程参数

Laravel Model SQL Server:从存储过程获取输出参数

在MVC中获取值多个输出参数(存储过程)

如何从 ASP.NET 中的 Mysql 存储过程调用输出参数

使用参数和查询的MySQL存储过程

如何使用EF使用输入和输出参数执行存储过程?

模拟存储过程的输出参数

如何获取存储过程执行用户MySQL

在C#中使用SqlTransaction,如何从存储过程中获取输出参数并插入到另一个表中?

如何使用Entity Framework 6从存储过程中检索输出参数

如何使用Powershell将存储过程的输出参数转换为变量?

如何在C#的存储过程中使用输出参数