调用存储过程

Jul 10, 2017 10:38:44 AM

概述

从1.r.58开始, 支持出参, 之前的版本仅支持入参.

从实现方式上说, 是通过扩展自定义SQL的含义及上下文来实现

仅含义入参的存储过程

  1. // 建表,删除老的存储过程.
  2. dao.create(Pet.class, true);
  3. dao.insert(Pet.create("wendal"));
  4. dao.execute(Sqls.create("DROP PROCEDURE IF EXISTS proc_pet_fetch"));
  5. // 新建存储过程
  6. dao.execute(Sqls.create("CREATE PROCEDURE proc_pet_fetch(IN nm varchar(1024))\nBEGIN\n\tSELECT * FROM t_pet where name=nm;\nEND"));
  7. // 像普通自定义SQL那样创建SQL对象.
  8. Sql sql = Sqls.fetchEntity("CALL proc_pet_fetch(@nm)");
  9. sql.setEntity(dao.getEntity(Pet.class));
  10. sql.params().set("nm", "wendal"); //设置入参
  11. dao.execute(sql);
  12. Pet pet = sql.getObject(Pet.class);
  13. assertNotNull(pet);
  14. assertEquals("wendal", pet.getName());

带出参的存储过程

  1. // 新建存储过程
  2. dao.execute(Sqls.create("CREATE PROCEDURE proc_pet_fetch(IN nm varchar(1024), OUT outId int)\nBEGIN\n\tselect id into outId from t_pet where name=nm;\nEND"));
  3. // 像普通自定义SQL那样创建SQL对象.
  4. Sql sql = Sqls.create("CALL proc_pet_fetch(@nm, @OUTid)");
  5. sql.setEntity(dao.getEntity(Pet.class));
  6. sql.params().set("nm", "wendal"); // 设置入参
  7. sql.params().set("OUTid", Types.INTEGER);// 设置出参类型,注意,必须加OUT开头
  8. dao.execute(sql);
  9. Record re = sql.getOutParams();
  10. assertNotNull(re);
  11. assertEquals(pet.getId(), re.get("id"));

本页面的文字允许在知识共享 署名-相同方式共享 3.0协议GNU自由文档许可证下修改和再使用。

原文: http://nutzam.com/core/dao/procedure.html