(五)MyBatis调用oracle存储过程

数据表Emp

在这里插入图片描述

创建存储过程(根据性别获取用户信息(游标集合))

create or replace procedure proc_emp(
    v_sex in char,
    cur_emp out sys_refcursor --定义返回类型类型是游标
) is
begin
  
   IF v_sex is null THEN  --如果性别为空则查询所有
      open cur_emp for select * from emp;
   ELSE
      open cur_emp for select * from emp where sex=v_sex;
   END IF;
   
end proc_emp;

实体类Emp

package com.train.entity;

import java.util.Date;
import java.util.List;

/**
 * @author 一宿君(CSDN : qq_52596258)
 * @date 2021-07-09 09:43:19
 */
public class Emp {
    private int empno;
    private String ename;
    private String job;
    private String mgr;
    private Date hiredate;
    private float sal;
    private float comm;
    private int deptno;
    private String sex;

    private List<Emp> cur_emp;

    @Override
    public String toString() {
        return "Emp{" +
                "empno=" + empno +
                ", ename='" + ename + '\'' +
                ", job='" + job + '\'' +
                ", mgr='" + mgr + '\'' +
                ", hiredate=" + hiredate +
                ", sal=" + sal +
                ", comm=" + comm +
                ", deptno=" + deptno +
                ", sex='" + sex + '\'' +
                ", cur_emp=" + cur_emp +
                '}';
    }

    public Emp() {
    }

    public int getEmpno() {
        return empno;
    }

    public void setEmpno(int empno) {
        this.empno = empno;
    }

    public String getEname() {
        return ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }

    public String getJob() {
        return job;
    }

    public void setJob(String job) {
        this.job = job;
    }

    public String getMgr() {
        return mgr;
    }

    public void setMgr(String mgr) {
        this.mgr = mgr;
    }

    public Date getHiredate() {
        return hiredate;
    }

    public void setHiredate(Date hiredate) {
        this.hiredate = hiredate;
    }

    public float getSal() {
        return sal;
    }

    public void setSal(float sal) {
        this.sal = sal;
    }

    public float getComm() {
        return comm;
    }

    public void setComm(float comm) {
        this.comm = comm;
    }

    public int getDeptno() {
        return deptno;
    }

    public void setDeptno(int deptno) {
        this.deptno = deptno;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public List<Emp> getCur_emp() {
        return cur_emp;
    }

    public void setCur_emp(List<Emp> cur_emp) {
        this.cur_emp = cur_emp;
    }
}

EmpDaoMapper接口

/**
 * @author 一宿君(CSDN : qq_52596258)
 * @date 2021-07-09 09:44:05
 */
public interface EmpDaoMapper {

    /**
     * 根据实体类对象的性别属性,调用存储过程
     * @param emp
     * @return
     */
    List<Emp> selectAllByEmpSex(Emp emp);

    /**
     * 根据map集合,调用存储过程
     * @param map
     * @return
     */
    List<Emp> selectAllByMap(Map map);
}

EmpDaoMapperImpl实现类

/**
 * @author 一宿君(CSDN : qq_52596258)
 * @date 2021-07-09 09:45:50
 */
public class EmpDaoMapperImpl implements EmpDaoMapper {
    SqlSession sqlSession = null;
    EmpDaoMapper empDaoMapper = null;

    @Override
    public List<Emp> selectAllByEmpSex(Emp emp) {
        sqlSession = MyBatisUtil.createSqlSession();
        empDaoMapper = sqlSession.getMapper(EmpDaoMapper.class);
        empDaoMapper.selectAllByEmpSex(emp);
        MyBatisUtil.closeSqlSession(sqlSession);
        return emp.getCur_emp();
    }

    @Override
    public List<Emp> selectAllByMap(Map map) {
        sqlSession = MyBatisUtil.createSqlSession();
        empDaoMapper = sqlSession.getMapper(EmpDaoMapper.class);
        empDaoMapper.selectAllByMap(map);
        List<Emp> empList = (List<Emp>) map.get("cur_emp");
        return empList;
    }
}

EmpDaoMapper.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">

<!--namespace是命名空间,要与对应的接口的路径保持一致(如果没有创建该接口,MyBatis在内部编译时会自动创建)-->
<mapper namespace="com.train.dao.EmpDaoMapper">

    <!--autoMapping开启自动映射-->
    <resultMap id="empMap" type="com.train.entity.Emp" autoMapping="true">

    </resultMap>

    <!--参数是实体类对象属性-->
    <select id="selectAllByEmpSex" parameterType="com.train.entity.Emp" statementType="CALLABLE">
        {call proc_emp(
            #{sex,jdbcType=VARCHAR,mode=IN},
            #{cur_emp,jdbcType=CURSOR,mode=OUT,resultMap=empMap,javaType=java.sql.ResultSet}
        )}
    </select>

    <!--参数是Map集合的键-->
    <select id="selectAllByMap" parameterType="Map" statementType="CALLABLE">
        {call proc_emp(
            #{sex,jdbcType=VARCHAR,mode=IN},
            #{cur_emp,jdbcType=CURSOR,mode=OUT,resultMap=empMap,javaType=java.sql.ResultSet}
        )}
    </select>

</mapper>

实体类参数对应的mapper映射文件

在这里插入图片描述

实体类参数测试

在这里插入图片描述

Emp emp = new Emp();
emp.setSex("男");
List<Emp> empList = new EmpDaoMapperImpl().selectAllByEmpSex(emp);
for (Emp e:empList){
    System.out.println(e);
}

map集合参数对应的mapper映射文件

在这里插入图片描述

map参数测试类

在这里插入图片描述

Map map = new HashMap();
        map.put("sex","男");
        List<Emp> empList = new EmpDaoMapperImpl().selectAllByMap(map);
        for (Emp e:empList){
            System.out.println(e);
        }

在这里插入图片描述

一起学编程,让生活更随和!如果你觉得是个同道中人,欢迎关注博主公众号:【随和的皮蛋桑】。专注于Java基础、进阶、面试以及计算机基础知识分享🐳。偶尔认知思考、日常水文🐌。

在这里插入图片描述

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一宿君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值