mybatis调用存储过程例子

参数形式: 
Sql代码  
  1. create procedure sptest.adder(in addend1 integerin addend2 integerout theSum integer)  
  2. begin atomic  
  3.   set theSum = addend1 + addend2;   
  4. end  
  5. go  


Xml代码  
  1. <parameterMap type="map" id="testParameterMap">  
  2.    <parameter property="addend1" jdbcType="INTEGER" mode="IN"/>  
  3.    <parameter property="addend2" jdbcType="INTEGER" mode="IN"/>  
  4.    <parameter property="sum" jdbcType="INTEGER" mode="OUT"/>  
  5.  </parameterMap>  
  6. <update id="adderWithParameterMap" parameterMap="testParameterMap" statementType="CALLABLE">  
  7.    {call sptest.adder(?, ?, ?)}  
  8.  </update>  

Java代码 
  1. public void testAdderAsUpdateWithParameterMap() {  
  2.        SqlSession sqlSession = sqlSessionFactory.openSession();  
  3.        try {  
  4.            Map<String, Object> parms = new HashMap<String, Object>();  
  5.            parms.put("addend1"3);  
  6.            parms.put("addend2"4);  
  7.              
  8.            SPMapper spMapper = sqlSession.getMapper(SPMapper.class);  
  9.              
  10.            spMapper.adderWithParameterMap(parms);  
  11.            assertEquals(7, parms.get("sum"));  
  12.              
  13.            parms = new HashMap<String, Object>();  
  14.            parms.put("addend1"2);  
  15.            parms.put("addend2"3);  
  16.            spMapper.adderWithParameterMap(parms);  
  17.            assertEquals(5, parms.get("sum"));  
  18.              
  19.        } finally {  
  20.            sqlSession.close();  
  21.        }  


带输入输出参数的存储过程: 
sql代码:
Sql代码  收藏代码
  1. create procedure sptest.getnames(in lowestId intout totalrows integer)  
  2. reads sql data  
  3. dynamic result sets 1  
  4. BEGIN ATOMIC  
  5.   declare cur cursor for select * from sptest.names where id >= lowestId;  
  6.   select count(*) into totalrows from sptest.names where id >= lowestId;  
  7.   open cur;  
  8. END  
  9. go  



Xml代码  收藏代码
  1. <select id="getNamesAndItems" statementType="CALLABLE"  
  2.     <select id="getNames" parameterType="java.util.Map" statementType="CALLABLE"  
  3.   resultMap="nameResult">  
  4.   {call sptest.getnames(  
  5.     #{lowestId,jdbcType=INTEGER,mode=IN},  
  6.     #{totalRows,jdbcType=INTEGER,mode=OUT})}  
  7. </select>  
  8. </select>  


Java代码  收藏代码
  1. public void testCallWithResultSet2_a1() {  
  2.        SqlSession sqlSession = sqlSessionFactory.openSession();  
  3.        try {  
  4.            SPMapper spMapper = sqlSession.getMapper(SPMapper.class);  
  5.              
  6.            Map<String, Object> parms = new HashMap<String, Object>();  
  7.            parms.put("lowestId"1);  
  8.            List<Name> names = spMapper.getNamesAnnotated(parms);  
  9.            assertEquals(3, names.size());  
  10.            assertEquals(3, parms.get("totalRows"));  
  11.        } finally {  
  12.            sqlSession.close();  
  13.        }  
  14.    }  



返回多个结果集 
sql代码:
Sql代码  收藏代码
  1. create procedure sptest.getnamesanditems()  
  2. reads sql data  
  3. dynamic result sets 2  
  4. BEGIN ATOMIC  
  5.   declare cur1 cursor for select * from sptest.names;  
  6.   declare cur2 cursor for select * from sptest.items;  
  7.   open cur1;  
  8.   open cur2;  
  9. END  
  10. go  



Xml代码  收藏代码
  1. <resultMap type="org.apache.ibatis.submitted.sptests.Name" id="nameResult">  
  2.     <result column="ID" property="id"/>  
  3.     <result column="FIRST_NAME" property="firstName"/>  
  4.     <result column="LAST_NAME" property="lastName"/>  
  5.   </resultMap>  
  6.   
  7.   <resultMap type="org.apache.ibatis.submitted.sptests.Item" id="itemResult">  
  8.     <result column="ID" property="id"/>  
  9.     <result column="ITEM" property="item"/>  
  10.   </resultMap>  
  11.   
  12.   <select id="getNamesAndItems" statementType="CALLABLE"  
  13.     resultMap="nameResult,itemResult">  
  14.     {call sptest.getnamesanditems()}  
  15.   </select>  


Java代码  收藏代码
  1. @Test  
  2.     public void testGetNamesAndItems() throws SQLException {  
  3.         SqlSession sqlSession = sqlSessionFactory.openSession();  
  4.         try {  
  5.             SPMapper spMapper = sqlSession.getMapper(SPMapper.class);  
  6.               
  7.             List<List<?>> results = spMapper.getNamesAndItems();  
  8.             assertEquals(2, results.size());  
  9.             assertEquals(4, results.get(0).size());  
  10.             assertEquals(3, results.get(1).size());  
  11.         } finally {  
  12.             sqlSession.close();  
  13.         }  
  14.     }  
### 回答1: MyBatis 是一个开源的持久层框架,它可以通过映射器将 Java 程序与数据库相连,使得访问数据库变得简单和高效。在 MyBatis 中,可以通过以下步骤调用存储过程: 1. 定义存储过程的映射:在 XML 映射文件中定义存储过程的映射,其中包括存储过程的名称和参数。 2. 编写 Java 代码:通过 MyBatis 的 SqlSession 对象调用存储过程。 3. 设置存储过程参数:设置存储过程的输入和输出参数。 以下是一个简单的存储过程调用示例: ``` <select id="getUserCount" statementType="CALLABLE"> { call getUserCount(#{param1, mode=IN, jdbcType=INTEGER}) } </select> ``` ``` SqlSession sqlSession = sqlSessionFactory.openSession(); try { Map<String, Object> paramMap = new HashMap<>(); paramMap.put("param1", 1); sqlSession.selectOne("getUserCount", paramMap); } finally { sqlSession.close(); } ``` 在上面的示例中,我们通过 MyBatis 的 SqlSession 对象调用存储过程 `getUserCount`,并将参数 `1` 作为输入参数传递给该存储过程。 ### 回答2: MyBatis 是一种用于 Java 的持久层框架,它可以方便地与数据库进行交互。在 MyBatis调用存储过程可以通过以下几个步骤实现: 1. 定义存储过程的 SQL 语句:在数据库中创建一个存储过程,定义其输入参数、输出参数和执行逻辑。 2. 在 MyBatis 的 Mapper XML 文件中编写对应的 SQL 语句:使用 `<select>` 元素并设置 `statementType` 属性为 `CALLABLE`,然后编写存储过程调用语句,将输入参数和输出参数与对应的 Java 对象进行映射。 3. 在 Java 代码中调用 MyBatis 的 Mapper 接口:使用注入或动态获取 Mapper 接口对象,在需要调用存储过程的方法中调用对应的 Mapper 方法。 4. 传递参数并获取存储过程的执行结果:通过调用方法时传递参数,MyBatis 会将参数传递给存储过程,并获取执行结果。 需要注意的是,存储过程调用方式可能有所不同,根据具体的数据库类型和版本,可能需要在 MyBatis 的配置文件中进行一些额外的设置,以支持存储过程调用。此外,对于不同的数据库,存储过程的语法也会有所不同,需要根据目标数据库的文档进行相应的调整。 总之,使用 MyBatis 调用存储过程可以方便地与数据库进行交互,并通过参数传递和结果获取实现与存储过程的数据交换。 ### 回答3: 在MyBatis调用存储过程方法需要经过以下步骤: 首先,在MyBatis的映射文件中定义一个存储过程调用语句。可以使用<select>、<insert>、<update>或<delete>标签来定义,具体取决于存储过程的操作类型。例如,我们可以使用<select>标签来调用返回结果集的存储过程。 其次,在映射文件中定义的存储过程调用语句中,使用<statementType>标签指定调用存储过程的类型。可以使用“CALLABLE”或“PREPARED”参数来指定调用方式。 然后,在调用存储过程的时候,使用MyBatis的SqlSession对象的selectOne、selectList、insert、update或delete方法来执行映射文件中的定义。 最后,在调用存储过程方法时,需要传递参数给存储过程。可以使用parameterType属性来指定参数类型。如果存储过程有返回值,可以使用resultType属性来指定返回结果的类型。 以下是一个示例映射文件中调用存储过程的代码片段: <select id="callProcedure" statementType="CALLABLE" resultType="Integer"> CALL my_procedure(#{param1, jdbcType=VARCHAR, mode=IN}, #{param2, jdbcType=VARCHAR, mode=INOUT}) </select> 在这个例子中,我们定义了一个调用名为"my_procedure"的存储过程的select语句。存储过程有两个参数,“param1”和“param2”,分别是传入参数和传出参数。传入参数使用“mode=IN”,传出参数使用“mode=INOUT”。 使用以上的步骤,就可以在MyBatis调用存储过程方法了。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值