我们来演示如何使用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);
先将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)
|