1. 程式人生 > >mybatis呼叫儲存過程的例子,含輸入輸出引數

mybatis呼叫儲存過程的例子,含輸入輸出引數

首先定義一個MySQL儲存過程:

DROP PROCEDURE  IF  EXISTS test ;
CREATE PROCEDURE test (IN p1  VARCHAR(26), OUT pResult VARCHAR(512))
BEGIN
   SET pResult := NULL;
   SET pResult :=CONCAT ( 'test',p1);
   SELECT * FROM tb2 WHERE commet like  Concat('%',p1, '%'); -- this 返回一個結果集
END;

tb2的表結構和資料如下:

DROP TABLE IF EXISTS `tb2`;
CREATE TABLE `tb2` (
  `t_id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `Name` varchar(255) DEFAULT NULL COMMENT '欄位名',
  `type` int(1) DEFAULT NULL COMMENT '型別,0-正常,1-異常,2-傳輸,3-退單',
  `commet` varchar(255) DEFAULT NULL COMMENT '備註',
  `optime` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '操作時間',
  PRIMARY KEY (`t_id`)
) ;


繼續增加新的類:

Stb2.java內容:

package com.springdemo.usermgr.vo;

import java.util.Date;

/**
 * tb2表實體類
 * @author zhouxj
 * @date  2014-09-10 下午03:29:32
 */
public class Stb2{
    
    private Integer t_id;
    private String name;
    private Integer type;
    private String commet;    
    private java.util.Date optime;

    public Integer getT_id() {
        return t_id;
    }
    public void setT_id(Integer t_id) {
        this.t_id = t_id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getType() {
        return type;
    }
    public void setType(Integer type) {
        this.type = type;
    }
    public String getCommet() {
        return commet;
    }
    public void setCommet(String commet) {
        this.commet = commet;
    }
    public java.util.Date getOptime() {
        return optime;
    }
    public void setOptime(java.util.Date optime) {
        this.optime = optime;
    }
    
}

修改SUserMapper.java內容:

package com.springdemo.usermgr.vo;

import java.util.List;
import java.util.Map;

 
   
public interface SUserMapper {   
    public int  insertSUser(SUser user);   
    public SUser getSUser(String name);  
    public List<Stb2> getTestProc(Map<String, Object> param);
}

Test2測試類內容:

package domain;  
      
import java.io.IOException;  
import java.io.Reader;  
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.io.Resources;  
import org.apache.ibatis.session.SqlSession;  
import org.apache.ibatis.session.SqlSessionFactory;  
import org.apache.ibatis.session.SqlSessionFactoryBuilder;  
import com.springdemo.usermgr.vo.SUserMapper;
import com.springdemo.usermgr.vo.Stb2;

      
    public class Test2 {  
        public static void main(String[] args) throws IOException {  
            String resource = "config.xml";  
            Reader reader = Resources.getResourceAsReader(resource);  
            SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(reader);  
            SqlSession session = ssf.openSession(true); //true 為自動提交事務

            try {  
                Map<String, Object> parms = new HashMap<String, Object>();  
                parms.put("queryStr", "的");  
               
                  
                SUserMapper spMapper = session.getMapper(SUserMapper.class);  
                  
                List<Stb2> as=spMapper.getTestProc(parms);  
                String outPara=(String) parms.get("retStr");  
                System.out.println(outPara);
                System.out.println(as.toString());
                //org.apache.ibatis.type.JdbcType.VARCHAR
               // org.apache.ibatis.mapping.ParameterMode.OUT
            } catch (Exception e) {

                e.printStackTrace();  
            } finally {  
                session.close();  
            }  
        }  
    } 

config.xml配置檔案修改內容:

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE configuration PUBLIC   
    "-//mybatis.org//DTD Config 3.0//EN"  
    "http://mybatis.org/dtd/mybatis-3-config.dtd">  
<configuration>  
    <typeAliases>  
        <typeAlias alias="SUser" type="com.springdemo.usermgr.vo.SUser" />
        <typeAlias alias="Stb2" type="com.springdemo.usermgr.vo.Stb2" />    
    </typeAliases>  
    <environments default="development">  
        <environment id="development">  
            <transactionManager type="JDBC" />  
            <dataSource type="POOLED">  
                <property name="driver" value="com.mysql.jdbc.Driver" />  
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
                <property name="username" value="root" />  
                <property name="password" value="pass" />  
            </dataSource>  
        </environment>  
    </environments>  
    <mappers>  
        <mapper resource="SUser.xml" />
        <mapper resource="Stb2.xml" />   
    </mappers>  
</configuration>

增加配置檔案Stb2.xml:

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper PUBLIC   
    "-//mybatis.org//DTD Mapper 3.0//EN"  
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
<mapper namespace="com.springdemo.usermgr.vo.SUserMapper">  

<resultMap type="com.springdemo.usermgr.vo.Stb2" id="itemResult">  
 
</resultMap>

<select id="getTestProc" parameterType="java.util.Map" statementType="CALLABLE"  
  resultMap="itemResult">  
  {call test.test(
  #{queryStr,jdbcType=VARCHAR,mode=IN},  
  #{retStr,jdbcType=VARCHAR,mode=OUT})
    }
</select>  
         
</mapper> 

執行Test2類,可能的結果:

test的
[[email protected], [email protected]]

返回了引數內容,和兩條記錄。