codecamp

调用存储过程

概述

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

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

仅含义入参的存储过程

    // 建表,删除老的存储过程.
    dao.create(Pet.class, true);
    dao.insert(Pet.create("wendal"));
    dao.execute(Sqls.create("DROP PROCEDURE IF EXISTS proc_pet_fetch"));
    // 新建存储过程
    dao.execute(Sqls.create("CREATE PROCEDURE proc_pet_fetch(IN nm varchar(1024))\nBEGIN\n\tSELECT * FROM t_pet where name=nm;\nEND"));

    // 像普通自定义SQL那样创建SQL对象.
    Sql sql = Sqls.fetchEntity("CALL proc_pet_fetch(@nm)");
    sql.setEntity(dao.getEntity(Pet.class));
    sql.params().set("nm", "wendal"); //设置入参
    dao.execute(sql);

    Pet pet = sql.getObject(Pet.class);
    assertNotNull(pet);
    assertEquals("wendal", pet.getName());

带出参的存储过程

    // 新建存储过程
    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"));

    // 像普通自定义SQL那样创建SQL对象.
    Sql sql = Sqls.create("CALL proc_pet_fetch(@nm, @OUTid)");
    sql.setEntity(dao.getEntity(Pet.class));
    sql.params().set("nm", "wendal"); // 设置入参
    sql.params().set("OUTid", Types.INTEGER);// 设置出参类型,注意,必须加OUT开头
    dao.execute(sql);

    Record re = sql.getOutParams();
    assertNotNull(re);
    assertEquals(pet.getId(), re.get("id"));
Dao拦截器
读写分离
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

表达式引擎

maplist结构

图像处理小军刀

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }