5.MyBaits调用存储过程

1.创建一个javaweb项目MyBatis_Part4_Procedure

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

 1 --创建表
 2 create table p_user(
 3     id number primary key,
 4     name varchar2(20),
 5     sex varchar2(2)
 6 );
 7
 8 create sequence seq_puser;
 9
10 insert into p_user values(seq_puser.nextval,‘A‘,‘男‘);
11 insert into p_user values(seq_puser.nextval,‘B‘,‘女‘);
12 insert into p_user values(seq_puser.nextval,‘C‘,‘男‘);
13
14 commit;
15
16 --统计男女的数量
17 CREATE or replace PROCEDURE holly.get_user_count(sex_id IN number,user_count OUT number)
18 is
19 BEGIN
20 IF sex_id=0 THEN
21  SELECT COUNT(*) INTO user_count FROM p_user WHERE p_user.sex=‘女‘;
22 ELSE
23   SELECT COUNT(*) INTO user_count FROM p_user WHERE p_user.sex=‘男‘ ;
24 END IF;
25 END ;
26 /

procedure.sql

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

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

jdbc.properties

4.在src下创建configuration.xml配置文件

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd" >
 3 <configuration>
 4
 5   <!-- 1.引用jdbc链接数据库的属性文件 -->
 6   <properties resource="jdbc.properties"/>
 7
 8   <!-- 2.类路径的别名 --><!--
 9   <typeAliases>
10     <typeAlias type="com.entity.Classes" alias="Classes"/>
11     <typeAlias type="com.entity.Teacher" alias="Teacher"/>
12     <typeAlias type="com.entity.Student" alias="Student"/>
13   </typeAliases>
14
15   --><!-- 3.事务和数据源的配置 -->
16   <environments default="development">
17     <environment id="development">
18       <transactionManager type="jdbc"/>
19       <dataSource type="POOLED">
20         <property name="driver" value="${driver}"/>
21         <property name="url" value="${url}"/>
22         <property name="username" value="${username}"/>
23         <property name="password" value="${password}"/>
24       </dataSource>
25     </environment>
26   </environments>
27   <!-- 4.注册映射文件 -->
28   <mappers>
29   <!-- 有映射文件时resource属性=映射文件的路径 -->
30   <!-- 使用注解没有映射文件时class属性=映射文件的路径 -->
31   <mapper resource="com/mapper/PUserMapper.xml"/>
32
33   </mappers>
34
35 </configuration>

configuration.xml

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

 1 package com.entity;
 2
 3 public class PUser {
 4     private int id;
 5     private String name;
 6     private String sex;
 7
 8     public PUser() {
 9     }
10     public PUser(int id, String name, String sex) {
11         this.id = id;
12         this.name = name;
13         this.sex = sex;
14     }
15     public int getId() {
16         return id;
17     }
18     public void setId(int id) {
19         this.id = id;
20     }
21     public String getName() {
22         return name;
23     }
24     public void setName(String name) {
25         this.name = name;
26     }
27     public String getSex() {
28         return sex;
29     }
30     public void setSex(String sex) {
31         this.sex = sex;
32     }
33     @Override
34     public String toString() {
35         return "PUser [id=" + id + ", name=" + name + ", sex=" + sex + "]";
36     }
37
38
39
40 }

PUser.java

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

 1 package com.util;
 2
 3 import java.io.IOException;
 4 import java.io.Reader;
 5
 6 import org.apache.ibatis.io.Resources;
 7 import org.apache.ibatis.session.SqlSession;
 8 import org.apache.ibatis.session.SqlSessionFactory;
 9 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
10
11 public class MyBaitsUtil {
12     private static SqlSessionFactory sqlSessionFactory;
13
14     static{
15         try {
16             Reader reader=Resources.getResourceAsReader("configuration.xml");
17             sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
18         } catch (IOException e) {
19             e.printStackTrace();
20         }
21
22     }
23     /**
24      *
25      * @param isCommit true表示执行完操作提交事务,false表示执行完不自动提交事务
26      * @return
27      */
28     public static SqlSession getSqlSession(boolean isCommit){
29         return sqlSessionFactory.openSession(isCommit);
30     }
31
32 }

MyBaitsUtil.java

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

 1 package com.mapper;
 2
 3 import java.util.Map;
 4
 5 public interface PUserMapper {
 6     /**
 7      * 统计某个性别的数据
 8      * @param paramMap
 9      * @return
10      */
11     int getCountBySex(Map<String, Integer> paramMap);
12
13 }

PUserMapper.java

8.在src下com.mapper包下创建PUserMapper.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 3 <mapper namespace="com.mapper.PUserMapper">
 4    <!--parameterMap表示参数是一个集合,
 5    statementType="CALLABLE" 表示该节点下写的是调用存储过程的语句 -->
 6    <select id="getCountBySex" parameterMap="paramMap"
 7      statementType="CALLABLE">
 8       CALL holly.get_user_count(?,?)
 9    </select>
10    <!-- 配置参数集合 -->
11    <parameterMap id="paramMap" type="java.util.Map" >
12      <!-- 配置集合的输入参数 -->
13     <parameter property="sexid" mode="IN" jdbcType="INTEGER"/>
14     <!-- 配置集合的输出参数 -->
15     <parameter property="usercount" mode="OUT" jdbcType="INTEGER"/>
16    </parameterMap>
17
18 </mapper>

PUserMapper.xml

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

 1 package com.mapper.impl;
 2
 3 import java.util.Map;
 4
 5 import org.apache.ibatis.session.SqlSession;
 6
 7 import com.mapper.PUserMapper;
 8 import com.util.MyBaitsUtil;
 9
10 public class PUserMapperImpl implements PUserMapper {
11
12     public int getCountBySex(Map<String, Integer> paramMap) {
13         SqlSession sqlSession=MyBaitsUtil.getSqlSession(false);
14         String statement="com.mapper.PUserMapper.getCountBySex";
15         //调用存储过程,输出参数参数给usercount
16         sqlSession.selectOne( statement, paramMap);
17         //通过key获取value
18         int count=paramMap.get("usercount");
19         sqlSession.close();
20         return count;
21     }
22
23 }

PUserMapperImpl.java

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

 1 package com.test;
 2
 3 import java.util.HashMap;
 4 import java.util.Map;
 5
 6 import com.mapper.PUserMapper;
 7 import com.mapper.impl.PUserMapperImpl;
 8
 9 public class Test {
10
11     /**
12      * @param args
13      */
14     public static void main(String[] args) {
15         PUserMapper mapper=new PUserMapperImpl();
16
17         Map<String, Integer> paramMap=new HashMap<String, Integer>();
18         paramMap.put("sexid", 0);//0女 1男
19         paramMap.put("usercount", -1);
20
21         int count=mapper.getCountBySex(paramMap);
22
23         if(count>0){
24             System.out.println("男员工的数目为:"+count);
25         }
26
27     }
28
29 }

Test.java

时间: 2024-11-07 21:36:56

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

mybaits使用存储过程

如何使用Mybaits调用数据库存储过程,按以下顺序Oracle案例库: 1.在数据库中创建以下存储过程: create or replace procedure pro_hello(p_result out varchar2) is begin select * from 表名 where 条件=p_result end; 2.编写SQL映射文件mapper.xml: <select id="proHello" statementType="CALLABLE"

MyBatis中调用存储过程和函数

一.调用存储过程 1.首先在数据库中定义存储过程,定义的存储过程的代码如下: //定义存储过程 create or replace procedure pag_add(p1 varchar2,p2 varchar2,p3 =p1+ create or replace function fun_add(p1 number ,p2 number) return number asbegin return p1+p2;end;   2.通过接口映射Sql,定义接口 package cn.et.myba

MyBatis入门学习教程-调用存储过程

一.提出需求 查询得到男性或女性的数量, 如果传入的是0就女性否则是男性 二.准备数据库表和存储过程 1 create table p_user( 2 id int primary key auto_increment, 3 name varchar(10), 4 sex char(2) 5 ); 6 7 insert into p_user(name,sex) values('A',"男"); 8 insert into p_user(name,sex) values('B',&qu

导入Excel用户表,调用存储过程

花了一天半的时间学习了一下导入Excel用户表,调用存储过程,主要是学习存储过程.因为之前没有具体在项目中应用过. 这里我们采用导入Excel到临时表,然后存储过程中读取临时表判断数据类型和数据格式,然后保存到正式表. 导入Excel采用spring 的POI技术. 本文内容较多,请选择性阅读. controller里面的代码: /**  * Excel导入用户表,调用存储过程,先导入临时表,再在存储过程中判断,判断通过后导入正式表,错误的则记录错误日志表中. lijianbo  *   * @

FAQ系列 | Spring框架中调用存储过程失败

Spring框架中,调用存储过程同时还需要show create procedure权限,对于普通用户而言,还要授予 select on mysql.proc 权限才能正常 --------------------------------------分割线-------------------------------------- 知数堂 (http://zhishuedu.com)培训是由资深MySQL专家叶金荣.吴炳锡联合推出的专业优质培训品牌,主要有MySQL DBA实战优化和Python

jdbc中的Statement对象和Preparedstatement对象的区别,以及通过jdbc操作调用存储过程

一. java.sql.*   和  javax.sql.*的包的类结构 |- Driver接口: 表示java驱动程序接口.所有的具体的数据库厂商要来实现此接口. |- connect(url, properties):  连接数据库的方法. url: 连接数据库的URL URL语法: jdbc协议:数据库子协议://主机:端口/数据库 user: 数据库的用户名 password: 数据库用户密码 |- DriverManager类: 驱动管理器类,用于管理所有注册的驱动程序 |-regis

mybatis调用存储过程

最近在研究mybatis调用存储过程,发表一下自己的学习心得 其中最好用的就是通过map传值,结果还用这个map接收,因为map是一个非常强大的东西,有时候存储过程要操作多张表. 比如说:往多张表插入数据,用JavaBean的方式就很难做到,参数对应多个实体类不好解决,用map就能完美的解决这个问题. Map<String, Object> map=new HashMap<String, Object>把需要的参数往里面一放,就能很容易解决问题 dao层(dao接口),在dao接口

Java操作Oracle数据库以及调用存储过程

操作Oracle数据库 publicclass DBConnection {     //jdbc:oracle:thin:@localhost:1521:orcl     publicstaticfinal String url = "jdbc:oracle:thin:@localhost:1521:ORCL";     publicstatic Connection conn ;         static{         //获取数据库驱动         try {    

水晶报表 Crystal Report 调用存储过程时出错 找不到表 ,解决方法。

用 CrystalReportViewer1 控件在asp.net的网页上显示报表,如果做报表时调用数据表数据的方式调用是可以成功的,但报表是用存储过程获取数据方式会出现以下错误: 找不到表'RptOpenCheck;1' . 文件 G:\TEMP\FO-OpenCheck {6D191F06-DECF-4A25-88FC-8553E3D435AA}.rpt 内出错: 找不到表. Error: 未将对象引用设置到对象的实例. The table 'RptOpenCheck;1' could no