多数据源调用mysql存储过程

来源:互联网 发布:python 高斯曲线拟合 编辑:程序博客网 时间:2024/06/03 11:09

我们在实际的开发过程中可能会或多或少的访问多个数据源,比如笔者开发的时候是采用mybatis+mysql,此时有两个比较好的方法跨数据源访问存储过程。


1、基于mybaitis这个持久性框架的特性,高一点的版本提供了多数据源的访问,可以利用面向切面编程思想来自由切换数据源,具体的配置可以参考,多数据源的配置。访问存储过程像一般访问即可。

        <!-- 利用存储过程批量插入数据 --><select id="addxxxByProcedure" parameterType="java.util.Map" statementType="CALLABLE" >{CALL test_db.insertBatchCoupon(  #{v_pid,jdbcType=VARCHAR,mode=IN},#{v_eid,jdbcType=VARCHAR,mode=IN},  #{v_uid,jdbcType=VARCHAR,mode=IN},  #{v_start,jdbcType=INTEGER,mode=IN},  #{v_pos,jdbcType=INTEGER,mode=IN})  }  </select> 
xml配置

        // 注解型存储过程@Select("CALL test_db.insertxxx(#{v_eid},#{v_pid},#{v_uid},#{v_start}, #{v_pos})")Map<Object, Object> addxxxByProcedure(@Param("v_eid") String v_eid, @Param("v_pid") String v_pid,@Param("v_uid") String v_uid, @Param("v_start") Integer v_start, @Param("v_pos") Integer v_pos);

注解型访问

2、第一种虽然能够解决一般性需求,但是随着业务量的增大,系统数据库的数据量会变得更加庞大,维护难度加大,此时往往都需要对数据库进行瘦身,一般会考虑垂直分库和水平分库,这是我们会选择一个辅助插件来完成这些工作--mycat(不熟悉的同学可以去官网下载新手手册来熟悉他的规则,官网请点击此处),使用mycat来访问多数据源,需要一个标志来引导mycat定位哪一个数据源。比如

       <!-- 利用存储过程批量插入数据 --><select id="addxxxByProcedure" parameterType="java.util.Map" statementType="CALLABLE" > -->/*!mycat: sql=select 1 from test;*/ {CALL test.insertBatchCoupon( #{v_pid,jdbcType=VARCHAR,mode=IN}, #{v_eid,jdbcType=VARCHAR,mode=IN}, #{v_uid,jdbcType=VARCHAR,mode=IN}, #{v_start,jdbcType=INTEGER,mode=IN}, #{v_pos,jdbcType=INTEGER,mode=IN})  }  </select> 

xml配置

       // 注解型存储过程@Select("/*!mycat: sql=select 1 from test;*/ CALL trc_coupon_db.insertxxx(#{v_eid},#{v_pid},#{v_uid},#{v_start}, #{v_pos})")Map<Object, Object> addxxxProcedure(@Param("v_eid") String v_eid, @Param("v_pid") String v_pid,@Param("v_uid") String v_uid, @Param("v_start") Integer v_start, @Param("v_pos") Integer v_pos);

注解型配置

1 0
原创粉丝点击