A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

我们来演示如何使用mybatis注解方式调用oracle数据库中的一个带有传参参数、输出参数 的存储过程。
  • 准备实体类数据表和数据
        
[Java] 纯文本查看 复制代码
public class Product {
    //数据库中的属性字段与该实体类中的属性一致
    private String id; // 主键
    private String productNum; // 编号 唯一
    private String productName; // 名称
    private String cityName; // 出发城市
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
    private Date departureTime; // 出发时间
    private String departureTimeStr;
    private double productPrice; // 产品价格
    private String productDesc; // 产品描述
    private Integer productStatus; // 状态 0 关闭 1 开启
    private String productStatusStr;




  • 准备存储过程
         ——由于储存过程无法贴出代码,以附件形式上传
       本次的存储过程主要完成的是,对指定的单个商品名称进行价格上涨100的操作。存储过程代码如下:

  • 准备测试代码。本次demo是基于maven管理项目,在ssm框架基础上做的测试,文中仅贴出service层代码和dao层代码
  • DAO层代码如下:
[Java] 纯文本查看 复制代码
//调用存储过程,传参名称为proname,即产品名称;出参名称为finalPrice,即涨价后的产品价格
    @Select(value = "call p_yearsal(#{proname, mode=IN,jdbcType=VARCHAR},#{finalPrice,mode=OUT,jdbcType=NUMERIC})")
    //声明执行的是调用存储过程的命令
    @Options(statementType = StatementType.CALLABLE) 
    //需要参数为Map集合
    void callState(Map<String,Object> paramMap);

  • service层调用代码
       先将dao注入
[Java] 纯文本查看 复制代码
@Autowired
    private IUserDao userDao;

       在调用dao
[Java] 纯文本查看 复制代码
public void callProducure(){
        //注意:
        //paramMap中的key必须和dao 方法注解中的#{proname, mode=IN,jdbcType=VARCHAR},#{finalPrice,mode=OUT,jdbcType=NUMERIC}参数名一致
        Map<String,Object> paramMap = new HashMap<String,Object>();
        //设置参参数值
        paramMap.put("proname","枫叶谷");
        //调用dao
        userDao.callState(paramMap);
        //获取出参参数值
        System.out.println(paramMap.get("finalPrice"));
    }

  • 查看打印结果
       后台日志打印出300,同时数据库中该记录数值变动为300


储存过程.txt (342 Bytes, 下载次数: 83)

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马