5.MyBaits调用存储过程
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调用存储过程的更多相关文章
- java mybaits 调用存储过程
@Override public BaseResultMessage saveOrderConfirm(String billNo) { BaseResultMessage rm = Utils.re ...
- mybaits使用存储过程
如何使用Mybaits调用数据库存储过程,按以下顺序Oracle案例库: 1.在数据库中创建以下存储过程: create or replace procedure pro_hello(p_result ...
- MyBatis中调用存储过程和函数
一.调用存储过程 1.首先在数据库中定义存储过程,定义的存储过程的代码如下: //定义存储过程 create or replace procedure pag_add(p1 varchar2,p2 v ...
- spring data jpa 调用存储过程
网上这方面的例子不是很多,研究了一下,列出几个调用的方法. 假如我们有一个mysql的存储过程 CREATE DEFINER=`root`@`localhost` PROCEDURE `plus1in ...
- myabatis oracle 调用存储过程返回list结果集
Mapper.xml 配置 <resultMap type="emp" id="empMap"> <id property="emp ...
- IBatis.Net使用总结(四)-- IBatis 调用存储过程
IBatis 调用存储过程 http://www.cnblogs.com/jeffwongishandsome/archive/2010/01/10/1543219.html http://www.c ...
- SQL SERVER使用ODBC 驱动建立的链接服务器调用存储过程时参数不能为NULL值
我们知道SQL SERVER建立链接服务器(Linked Server)可以选择的驱动程序非常多,最近发现使用ODBC 的 Microsoft OLE DB 驱动程序建立的链接服务器(Linked S ...
- 【Java EE 学习 29 下】【JDBC编程中操作Oracle数据库】【调用存储过程的方法】
疑问:怎样判断存储过程执行之后返回值是否为空. 一.连接oracle数据库 1.需要的jar包:在安装的oracle中就有,所以不需要到官网下载,我的oracle11g下:D:\app\kdyzm\p ...
- MyBatis学习总结(六)——调用存储过程(转载)
本文转载自:http://www.cnblogs.com/jpf-java/p/6013518.html 一.提出需求 查询得到男性或女性的数量, 如果传入的是0就女性否则是男性 二.准备数据库表和存 ...
随机推荐
- 企业架构与建模之ArchiMate的由来和详述(上)
终于完成了关于企业架构框架理论的总结,谢谢各位看官的支持,能挺过之前过于理论化的叙述而坚持到现在着实不易,笔者也自愧没有实践经验可以分享,希望日后有兴趣的看官能够不吝赐教.在本系列后面的也是最后一个大 ...
- Tomcat中Context的配置
Tomcat直接ip地址访问不用加端口和项目名 当我们开发完一个WEB项目 然后部署到tomcat下,正常情况下应该是这样访问:http://localhost:端口号/项目名 如果我们想让用户仅仅输 ...
- 我的Emacs折腾经验谈(四) 也谈Yasnippet
又是好久没更新了,不过还好,现在慢慢有点感觉了,好长时间不写博客会心里有点感觉欠一点什么东西.觉得每次写了东西都往主页推搞得压力好大,以后就不往网站首页推了,纯留下来供参考,另外就是主要方便从搜索找过 ...
- txt文件保存问题
今天终于解决了文件的保存问题,之前删除文件,再保存,发现删除的内容还是在文件中. 这是因为保存内容时,是将数组内容一行一行覆盖原来的内容,没有覆盖到的还是保存在文件内. 我用的是CFile类 所以直接 ...
- wordpress开启用户注册
很多人想用wordpress打造多用户博客平台 首先想到的是用户注册 今天搞了好长时间,找了好多资料总算找到了 首先开启用户注册 后台 ----设置----常规设置 在成员资格选项中选择任何人都可以 ...
- zoj 1610 Count the Colors(线段树延迟更新)
所谓的懒操作模板题. 学好acm,英语很重要.做题的时候看不明白题目的意思,我还拉着队友一块儿帮忙分析题意.最后确定了是线段树延迟更新果题.我就欣欣然上手敲了出来. 然后是漫长的段错误.... 第一次 ...
- Android 点击桌面快捷方式和Notifycation跳转到Task栈顶Activity
我们一般下载的应用在第一次启动应用的时候都会给我创建一个桌面快捷方式,然后我在网上找了些资料整理下了,写了一个快捷方式的工具类,这样我们以后要创建快捷方式的时候直接拷贝这个类,里面提供了一些静态方法, ...
- 基于libgdx游戏引擎开发的飞天猫
闲来没事学学游戏,这是鄙人第一个小游戏——飞天猫 1,基于Android开发的小游戏,至少Android2.2以上的系统. 2,界面简洁,美观,游戏易操作,上手快. 3,可以左右摇摆手机来改变飞天猫的 ...
- 黑马程序员:Java基础总结----反射
黑马程序员:Java基础总结 反射 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 反射 反射的基石:Class类 Class类代表Java类,它的各个实例对象又分别 ...
- java调用存储过程超时及DBCP参数配置说明
问题: 生产环境实时打标超时: 分析原因: “实时打标java服务中,只创建数据库Connection,没有关闭数据库Connection,导致数据库连接池耗尽,无 ...