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. JS简单验证密码强度

    <input type="password" id="password" value=""/><button id=&qu ...

  2. Jquery轻量级幻灯插件-OWL Carousel--支持触屏的移动浏览器

    Jquery轻量级幻灯插件-OWL Carousel--支持触屏的移动浏览器 在项目中,需要做一个幻灯功能,领导说需要一个小清醒的啊,轻量级的.刚开始搜索到这个: CRAFTYSLIDE插件.但是用起 ...

  3. MessageBox, MessageBoxBurttons, MessageBoxIcon 详细解析

    [函数]:<整型> MessageBox(<字符串 Text, <字符串> Title, <整型> MessageBoxBurttons,MessageBox ...

  4. Javascript内存泄漏

    Javascript内存泄漏 原文:http://point.davidglasser.net/2013/06/27/surprising-javascript-memory-leak.html 本周 ...

  5. TensorFlow 入门之手写识别(MNIST) softmax算法

    TensorFlow 入门之手写识别(MNIST) softmax算法 MNIST flyu6 softmax回归 softmax回归算法 TensorFlow实现softmax softmax回归算 ...

  6. 多线程计算----pthread

    #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <pthread.h& ...

  7. (转)Tomcat 配置成https协议

    Tomcat 配置成https协议 TomcatXMLServlet  在命令提示符窗口,进入Tomcat目录,执行以下命令: keytool -genkey -alias tomcat -keyal ...

  8. NodeJS Stream 三:readable

    什么是可读流 可读流是生产数据用来供程序消费的流.我们常见的数据生产方式有读取磁盘文件.读取网络请求内容等,看一下前面介绍什么是流用的例子: const rs = fs.createReadStrea ...

  9. 驱动10.nor flash

    1 比较nor/nand flash NOR                                  NAND接口:    RAM-Like,引脚多                 引脚少, ...

  10. Angularjs通过$http与服务器通信

    angular是一个前端框架,实现了可交互式的页面,但是对于一个web应用,页面上进行展示的数据从哪里来,肯定需要服务端进行支持,那么angular是如何同服务端进行交互的呢? $http angul ...