mybatis調用存儲過程


直接貼代碼吧 注解式可以調用 但是不能返回結果 所有我就貼配置式的 有知道注解怎么返回結果的請評論
數據庫代碼

#表
DROP TABLE IF EXISTS `p_user`;
CREATE TABLE `p_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(10) DEFAULT NULL, `sex` char(2) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

#模擬數據
INSERT INTO `p_user` VALUES ('1', 'A', '男');
INSERT INTO `p_user` VALUES ('2', 'B', '女');
INSERT INTO `p_user` VALUES ('3', 'C', '男');
#存儲過程
CREATE PROCEDURE ges_user_count(OUT user_count int) BEGIN IF sex_id=0 THEN SELECT COUNT(*) FROM p_user WHERE p_user.sex='女' INTO user_count;
ELSE
SELECT COUNT(*) FROM p_user WHERE p_user.sex='男' INTO user_count;
END IF;
END

下面是mybatis配置的代碼

    <!-- parameterMap.put("sexid", 0); parameterMap.put("usercount", -1); -->
    <parameterMap type="java.util.Map" id="getUserCountMap">
        <parameter property="sexid" mode="IN" jdbcType="INTEGER" />
        <parameter property="usercount" mode="OUT" jdbcType="INTEGER" />
    </parameterMap>
    <!-- 查詢得到男性或女性的數量, 如果傳入的是0就女性否則是男性 statementType="CALLABLE"存儲過程類型 -->
    <select id="getUserCount" parameterMap="getUserCountMap" statementType="CALLABLE">
        CALL ges_user_count(?,?)
    </select>

dao層代碼

//接口
public interface UserMapper {
    public int getUserCount();
}
//實現類 我用spring的自動注入 也可以通過實例化來new SqlSessionFactory
package com.dw.user.dao;

import java.util.HashMap;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository("userMapper")
public class UserMapperImpl implements UserMapper{
    //注入SqlSessionFactory
    @Autowired
    SqlSessionFactory sessionFactory;

    public void setSessionFactory(SqlSessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }
    @Override
    public int getUserCount() {
        SqlSession sqlSession = sessionFactory.openSession();
        Map<String, Integer> parameterMap = new HashMap<String, Integer>();
        //設置參數
        parameterMap.put("sexid", 1);
        parameterMap.put("usercount", -1);
        //Integer i = 
        sqlSession.selectOne("com.dw.user.dao.UserMapper.getUserCount",parameterMap);
        Integer i = parameterMap.get("usercount");
        System.out.println(i);
        sqlSession.close();
        return i;
    }
}

后面就可以調用實現類的返回值打印就行了 我就不貼了 如果要 留言就行


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM