1.创建一个javaweb项目MyBatis_Part4_Procedure

2.在src下创建procedure.sql文件

 --创建表
create table p_user(
id number primary key,
name varchar2(20),
sex varchar2(2)
); create sequence seq_puser; insert into p_user values(seq_puser.nextval,'A','男');
insert into p_user values(seq_puser.nextval,'B','女');
insert into p_user values(seq_puser.nextval,'C','男'); commit; --统计男女的数量
CREATE or replace PROCEDURE holly.get_user_count(sex_id IN number,user_count OUT number)
is
BEGIN
IF sex_id=0 THEN
SELECT COUNT(*) INTO user_count FROM p_user WHERE p_user.sex='女';
ELSE
SELECT COUNT(*) INTO user_count FROM p_user WHERE p_user.sex='男' ;
END IF;
END ;
/

procedure.sql

3.在src下创建jdbc.properties属性文件

 driver=oracle.jdbc.driver.OracleDriver
url=jdbc\:oracle\:thin\:@127.0.0.1\:1521\:orcl
username=holly
password=sys

jdbc.properties

4.在src下创建configuration.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> <!-- 1.引用jdbc链接数据库的属性文件 -->
<properties resource="jdbc.properties"/> <!-- 2.类路径的别名 --><!--
<typeAliases>
<typeAlias type="com.entity.Classes" alias="Classes"/>
<typeAlias type="com.entity.Teacher" alias="Teacher"/>
<typeAlias type="com.entity.Student" alias="Student"/>
</typeAliases> --><!-- 3.事务和数据源的配置 -->
<environments default="development">
<environment id="development">
<transactionManager type="jdbc"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!-- 4.注册映射文件 -->
<mappers>
<!-- 有映射文件时resource属性=映射文件的路径 -->
<!-- 使用注解没有映射文件时class属性=映射文件的路径 -->
<mapper resource="com/mapper/PUserMapper.xml"/> </mappers> </configuration>

configuration.xml

5.在src下com.entity创建PUser.java

 package com.entity;

 public class PUser {
private int id;
private String name;
private String sex; public PUser() {
}
public PUser(int id, String name, String sex) {
this.id = id;
this.name = name;
this.sex = sex;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "PUser [id=" + id + ", name=" + name + ", sex=" + sex + "]";
} }

PUser.java

6.在src下com.util包下创建MyBaitsUtil.java

 package com.util;

 import java.io.IOException;
import java.io.Reader; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class MyBaitsUtil {
private static SqlSessionFactory sqlSessionFactory; static{
try {
Reader reader=Resources.getResourceAsReader("configuration.xml");
sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
} }
/**
*
* @param isCommit true表示执行完操作提交事务,false表示执行完不自动提交事务
* @return
*/
public static SqlSession getSqlSession(boolean isCommit){
return sqlSessionFactory.openSession(isCommit);
} }

MyBaitsUtil.java

7.在src下com.mapper包下创建PUserMapper.java

 package com.mapper;

 import java.util.Map;

 public interface PUserMapper {
/**
* 统计某个性别的数据
* @param paramMap
* @return
*/
int getCountBySex(Map<String, Integer> paramMap); }

PUserMapper.java

8.在src下com.mapper包下创建PUserMapper.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.mapper.PUserMapper">
<!--parameterMap表示参数是一个集合,
statementType="CALLABLE" 表示该节点下写的是调用存储过程的语句 -->
<select id="getCountBySex" parameterMap="paramMap"
statementType="CALLABLE">
CALL holly.get_user_count(?,?)
</select>
<!-- 配置参数集合 -->
<parameterMap id="paramMap" type="java.util.Map" >
<!-- 配置集合的输入参数 -->
<parameter property="sexid" mode="IN" jdbcType="INTEGER"/>
<!-- 配置集合的输出参数 -->
<parameter property="usercount" mode="OUT" jdbcType="INTEGER"/>
</parameterMap> </mapper>

PUserMapper.xml

9.在src下com.mapper.impl包下创建PUserMapperImpl.java

 package com.mapper.impl;

 import java.util.Map;

 import org.apache.ibatis.session.SqlSession;

 import com.mapper.PUserMapper;
import com.util.MyBaitsUtil; public class PUserMapperImpl implements PUserMapper { public int getCountBySex(Map<String, Integer> paramMap) {
SqlSession sqlSession=MyBaitsUtil.getSqlSession(false);
String statement="com.mapper.PUserMapper.getCountBySex";
//调用存储过程,输出参数参数给usercount
sqlSession.selectOne( statement, paramMap);
//通过key获取value
int count=paramMap.get("usercount");
sqlSession.close();
return count;
} }

PUserMapperImpl.java

10.在src下com.test包下创建Test.java

 package com.test;

 import java.util.HashMap;
import java.util.Map; import com.mapper.PUserMapper;
import com.mapper.impl.PUserMapperImpl; public class Test { /**
* @param args
*/
public static void main(String[] args) {
PUserMapper mapper=new PUserMapperImpl(); Map<String, Integer> paramMap=new HashMap<String, Integer>();
paramMap.put("sexid", 0);//0女 1男
paramMap.put("usercount", -1); int count=mapper.getCountBySex(paramMap); if(count>0){
System.out.println("男员工的数目为:"+count);
} } }

Test.java

5.MyBaits调用存储过程的更多相关文章

  1. java mybaits 调用存储过程

    @Override public BaseResultMessage saveOrderConfirm(String billNo) { BaseResultMessage rm = Utils.re ...

  2. mybaits使用存储过程

    如何使用Mybaits调用数据库存储过程,按以下顺序Oracle案例库: 1.在数据库中创建以下存储过程: create or replace procedure pro_hello(p_result ...

  3. MyBatis中调用存储过程和函数

    一.调用存储过程 1.首先在数据库中定义存储过程,定义的存储过程的代码如下: //定义存储过程 create or replace procedure pag_add(p1 varchar2,p2 v ...

  4. spring data jpa 调用存储过程

    网上这方面的例子不是很多,研究了一下,列出几个调用的方法. 假如我们有一个mysql的存储过程 CREATE DEFINER=`root`@`localhost` PROCEDURE `plus1in ...

  5. myabatis oracle 调用存储过程返回list结果集

    Mapper.xml 配置 <resultMap type="emp" id="empMap"> <id property="emp ...

  6. IBatis.Net使用总结(四)-- IBatis 调用存储过程

    IBatis 调用存储过程 http://www.cnblogs.com/jeffwongishandsome/archive/2010/01/10/1543219.html http://www.c ...

  7. SQL SERVER使用ODBC 驱动建立的链接服务器调用存储过程时参数不能为NULL值

    我们知道SQL SERVER建立链接服务器(Linked Server)可以选择的驱动程序非常多,最近发现使用ODBC 的 Microsoft OLE DB 驱动程序建立的链接服务器(Linked S ...

  8. 【Java EE 学习 29 下】【JDBC编程中操作Oracle数据库】【调用存储过程的方法】

    疑问:怎样判断存储过程执行之后返回值是否为空. 一.连接oracle数据库 1.需要的jar包:在安装的oracle中就有,所以不需要到官网下载,我的oracle11g下:D:\app\kdyzm\p ...

  9. MyBatis学习总结(六)——调用存储过程(转载)

    本文转载自:http://www.cnblogs.com/jpf-java/p/6013518.html 一.提出需求 查询得到男性或女性的数量, 如果传入的是0就女性否则是男性 二.准备数据库表和存 ...

随机推荐

  1. Redis系统学习 三、使用数据结构

    前言:上一章,简单介绍了5种数据结构,并给出了一些用例.现在是时候来看看一些高级的,但依然很常见的主题和设计模式 一.大O表示法(Big O Notation ) 常用时间复杂度O(1)被认为是最快速 ...

  2. SpringMVC入门笔记一

    SpringMVC优势    性能比struts2好    简单 便捷 易学    和Spring无缝集成(使用spring ioc aop)    约定优于配置    能够简单进行Junit测试   ...

  3. WP自定义字体

    IOS7的数字真的很好看啊,于是想放在自己的应用中.在网上找了下,发现这个字体叫HelveticaNeueLTPro-UltLt,于是随便在某个字体网站下了这个字体.拖到项目里换字体,但是,悲剧开始了 ...

  4. C# BackgroundWorker详解,图例,原理分析

    先声明,大部分资料均参考网上,进行了整理. 1. 在 VS 中添加了 BackgroundWorker 组件, 该组件在多线程编程方面使用起来非常 方便,然而在开始时由于没有搞清楚它的使用机制, 走了 ...

  5. IP:网际协议

    IP:网际协议 1.概述      IP是TCP/IP协议族中最为核心的协议.所有的TCP,UDP,ICMP,IGMP数据都以IP数据报格式传输.      IP提供不可靠,无连接的数据报传送服务. ...

  6. OpenCV 4 Python高级配置—安装setuptools,matplotlib,six,dateutil,pyparsing 完整过程

    Matplotib 是python 的一个绘图库,里头有各种各样的绘图方法,可以用Matplotib 显示图像,放大图像,保存图像等等,对于OpenCV处理图像具有非常大的帮助.但是,安装Matplo ...

  7. Google论文之三----MapReduce

    Google论文之三----MapReduce MapReduce:大型集群上的简单数据处理 摘要 MapReduce是一个设计模型,也是一个处理和产生海量数据的一个相关实现.用户指定一个用于处理一个 ...

  8. HashMap完全解读

    一.什么是HashMap 基于哈希表的 Map 接口的实现.此实现提供所有可选的映射操作,并允许使用 null 值和 null 键.(除了非同步和允许使用 null 之外,HashMap 类与 Has ...

  9. nginx错误:unknown directive "锘? in F:\nginx/conf/nginx.conf:3

    C:\Users\Administrator>d: D:\>cd D:\nginx-1.4.7 D:\nginx-1.4.7>start nginx.exe D:\nginx-1.4 ...

  10. 使用unity创建塔防游戏(原译)(part1)

    塔防游戏非常地受欢迎,木有什么能比看着自己的防御毁灭邪恶的入侵者更爽的事了. 在这个包含两部分的教程中,你将使用Unity创建一个塔防游戏. 你将会学到如何: 创建一波一波的敌人 使敌人随着路标移动 ...