Foxnic-SQL (9) —— DAO 个性 : 执行存储过程与函数

概述

  Foxnic-SQL 对函数与存储过程的调用做了简化,使调用过程尽量简洁。尽管当初新构建的利用越来越不提倡应用数据库存储过程与函数,然而它们还是十分宽泛地被应用着。任何技术的应用,一是看场景,而是看使用者,存储过程和函数不应被摈弃。
  本文中的示例代码均可在 https://gitee.com/LeeFJ/foxnic-samples 我的项目中找到。

定义存储过程

  首先,在数据库创立存储过程和函数,存储过程的特点是多个参数,多个返回值。函数的特点是多个参数,一个返回值。当然,从数据库角度它们还有其它的区别,咱们不做开展,在此咱们只关怀调用的模式。示例代码如下:

CREATE DEFINER=`foxnic`@`%` PROCEDURE `demo_proc`( IN a decimal(8,2), IN b decimal(8,2), OUT c decimal(8,2), OUT d decimal(8,2))BEGIN  set c=a+b;  set d=a*b;END
CREATE DEFINER=`foxnic`@`%` FUNCTION `demo_func`(  a decimal(8,2),  b decimal(8,2)) RETURNS decimal(8,2) DETERMINISTICBEGIN    RETURN a+b;END

调用函数

  函数的调用绝对比较简单,也就是传入参数返回后果,示例代码如下:

/*** 数据库函数调用测试* */@Test    public void test_func() {    // 通过 DBInstance 拿到 DAO 对象    DAO dao= DBInstance.DEFAULT.dao();    // 从 dao 拿到存储函数对象    StoredFunction<BigDecimal> function =dao.getStoredFunction("demo_func",BigDecimal.class);    // 按程序传入参数    BigDecimal result= function.execute(1.1,2.2);    // 查看后果    assertTrue(result.doubleValue()==3.30);}

  针对 StoredFunction 类因为它只有一个返回值,Foxnic-SQL 应用了泛型的形式来简化参数定义。通过 DAO 拿到 StoredFunction 对象,通过 execute 办法按程序传入参数,执行即可。

调用存储过程

  因为存储过程能够是多入参、多出参,所以它的调用过程绝对简单一点。它须要有参数类型定义,map 参数传入并执行,返回多个后果值等几个步骤,示例代码如下:

/*** 数据库存储过程调用测试* */@Test    public void test_proc() {    // 通过 DBInstance 拿到 DAO 对象    DAO dao= DBInstance.DEFAULT.dao();    // 从 dao 拿到存储过程对象    StoredProcedure procedure =dao.getStoredProcedure("demo_proc");    // 定义参数    procedure.declareParameter("a", DBDataType.STRING);    procedure.declareParameter("b", DBDataType.DECIMAL);    procedure.declareOutParameter("c",DBDataType.DECIMAL);    procedure.declareOutParameter("d",DBDataType.DECIMAL);    // 传入 Map 类型参数    Map<String,Object> result= procedure.execute(MapUtil.asMap("a",1.1,"b",2.2));    // 取得多个返回值    BigDecimal c=(BigDecimal) result.get("c");    BigDecimal d=(BigDecimal) result.get("d");    // 查看后果    assertTrue(c.doubleValue()==3.30);    assertTrue(d.doubleValue()==2.42);}

小结

  本节次要介绍了在 Foxni-SQL 中如何调用数据库的存储过程与函数。存储过程与函数在传参的模式以及接管返回值的模式上有着比拟显著的差别。

相干我的项目

  https://gitee.com/LeeFJ/foxnic
  https://gitee.com/LeeFJ/foxnic-web
  https://gitee.com/lank/eam
  https://gitee.com/LeeFJ/foxnic-samples

官网文档

  http://foxnicweb.com/docs/doc.html