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. DOM处理

    DOM处理 这几天整理了一下思路,本来觉得DOM部分会有很多东西,但是忽然发现频繁使用的其实并不太多 class class处理部分主要有四个 hasClass:检查元素是否包含某个class add ...

  2. 【Lotus Notes】邮件获取

    public class LotusManager { public static int bodyMaxLength, length; public static List<Entity.Lo ...

  3. kindeditor使用方法

    一.下载编辑器 下载KindEditor最新版本(本版本为4.1.10) 下载页面:http://kindeditor.net/down.php 二.部署编辑器 解压kindeditor-x.x.x. ...

  4. 基于easyui的webform扩展

    基于easyui的webform扩展 回顾 <前端基于easyui的mvc扩展>.<前端基于easyui的mvc扩展(续)>前两篇介绍了mvc内如何基于easyui进行扩展,在 ...

  5. Python:Python学习总结

    Python:Python学习总结 背景 PHP的$和->让人输入的手疼(PHP确实非常简洁和强大,适合WEB编程),Ruby的#.@.@@也好不到哪里(OO人员最该学习的一门语言). Pyth ...

  6. 长轮询实现Chat并迁移到Azure测试

    长轮询实现Chat并迁移到Azure测试 公司的OA从零开始进行开发,继简单的单点登陆.角色与权限.消息中间件之后,轮到在线即时通信的模块需要我独立去完成.这三周除了逛网店见爱*看动漫接兼职,基本上都 ...

  7. Drupal与大型网站架构(译)- Large-Scale Web Site Infrastructure and Drupal

    Drupal与大型网站架构(译)- Large-Scale Web Site Infrastructure and Drupal Linuxjournal 网站经典文章翻译,原文地址: Large-S ...

  8. 快速提高Android开发调试的使用技巧

    留在这里备忘,同时如果对其他人有帮助,那就再好不过了. 1.过滤Android程序出现的异常和崩溃 adb logcat |grep --color=auto -E "System.err| ...

  9. 方法输出C++输出斐波那契数列的几种方法

    PS:今天上午,非常郁闷,有很多简单基础的问题搞得我有些迷茫,哎,代码几天不写就忘.目前又不当COO,还是得用心记代码哦! 定义: 斐波那契数列指的是这样一个数列:0, 1, 1, 2, 3, 5, ...

  10. 作怪的Buffer

    俗话说:人丑多作怪.在编程界里面也有很多作怪之物,其中首推buffer. 上一次聊到了tar.gz创建导出的问题,我本以为自己把相关的文件流操作都摸清楚了.没想到当我开心地去研究ip库替换方案和同事们 ...