mycat mybatis 调用存储过程&多语句操作

mycat结合mybatis调用存储过程

mycat调用存储过程,项目示例,已经测试通过的。
<select id="callArchiveData" parameterType="com.hundsun.cloudtrade.match.dto.req.CallArivateDataReq" 
		resultType="com.hundsun.cloudtrade.match.dto.req.CallArivateDataReq">
         <![CDATA[ 
	/*!mycat:sql=SELECT 1 FROM tb_day_transaction WHERE firm_account = ${firm_account} */
       {CALL ARCHIVE_DATA(
       #{firm_account,mode=IN,jdbcType=INTEGER},
       #{hold_date,mode=IN,jdbcType=INTEGER},
       @p_error_no,
       @p_error_info
       )};
       SELECT @p_error_no as p_error_no,@p_error_info as p_error_info;
       ]]>  
    </select>  
注意点:
1.没有callable
2.前面的 /*!mycat:sql=SELECT 1 FROM tb_day_transaction WHERE firm_account = ${firm_account} */ 参考mycat的注解,官网的学习文档里就有
3.mycat 有些语句是不支持的,比如 insert into …… select ……,具体可以网上找。使用存储过程可以避免这点
4.mycat 的注解就是告诉 mycat 后面的语句是在哪个 db 数据库进行执行,所以要求存储过程的内容一定得是同一个数据库里的数据进行的操作

mycat多语句操作

无意间测试发现的问题:mybatis 支持多语句同时操作数据库,比如:
	<update id="clearData" parameterType="com.hundsun.cloudtrade.match.dto.req.ClearDataReq">
		<![CDATA[
		DELETE FROM tb_day_transaction WHERE firm_account = #{firm_account};
		
		UPDATE tb_conf_tradedays SET init_flag=0,clear_flag=0 WHERE firm_account = 0;
		]]>
	</update>
但是,如果使用 mycat ,在实际的项目中表 tb_day_transaction 和表 tb_conf_tradedays 不在同一个数据库的话,会出现问题
在执行了第一条语句 DELETE FROM tb_day_transaction WHERE firm_account = #{firm_account}; 后,
mycat 还是会在同一个数据库下,执行 UPDATE tb_conf_tradedays SET init_flag=0,clear_flag=0 WHERE firm_account = 0;
可以拆开,分成两个 id 的 sql 来写






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值