springboot+mybatis调用oracle存储过程
1 存储过程参数为VARCHAR
代码逻辑:controller层定义实体类对象entity,并entity.set给存储过程的输入参数赋值,把赋值后的实体类通过service层传到dao层,然后通过dao层调用存储过程
1-1 存储过程参数
IN_STR IN VARCHAR,
OUT_STR OUT VARCHAR
1-2 controller层
@RequestMapping("/TESTPRO")
@ResponseBody
public String TESTPRO() {
// 执行oracle存储过程
// 实体类中把输入参数输出参数都写上
//少写参数会报错:(wrong number or types of arguments in call to '存储过程')
HelloProEntity entity = new HelloProEntity();
entity.setIN_STR("1");// 配置输入参数
controllerService.GetTestPro(entity);// 把带输入参数的实体传到Service层,Service层调用Dao层,Dao层寻找实体对应的sql
try {
String str = entity.getOUT_STR();
return str;
} catch (Exception e) {
return "null";
}
}
1-3 service层
public HelloProEntity GetTestPro(HelloProEntity testproentity) {
return dao.GetTestPro(testproentity);
}
1-4 dao层
public HelloProEntity GetTestPro(HelloProEntity testproentity);
1-5 实体类
public class HelloProEntity implements Serializable {
private static final long serialVersionUID = -6556793741331167103L;
private String IN_STR;
private String OUT_STR;
public String getIN_STR() {
return IN_STR;
}
public void setIN_STR(String iN_STR) {
IN_STR = iN_STR;
}
public String getOUT_STR() {
return OUT_STR;
}
public void setOUT_STR(String oUT_STR) {
OUT_STR = oUT_STR;
}
}
1-6 mapper
<select id="GetTestPro" parameterType="com.kh.zzkanban1.Entyties.HelloProEntity" useCache="false"
statementType="CALLABLE">
<![CDATA[
{call JCG_TEST(
#{IN_STR,mode=IN,jdbcType=VARCHAR},
#{OUT_STR,mode=OUT,jdbcType=VARCHAR}
)}
]]>
</select>
2 存储过程参数为DATE
基于第1点的配置,service层与dao层不需要改动,改动controller、实体类、mapper
主要注意的是:存储过程输入参数输出参数为DATE格式时,mapper定义jdbcType为DATE,实体类要用Timestamp格式定义属性,否则时分秒会变成00:00:00。
输出得到时间戳后,再用new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(entity.getM_GROUP_END())转成字符串格式的时间。
2-1 存储过程参数
M_DATETIME IN DATE,
M_SEGMENT_BEGIN OUT DATE,
M_SEGMENT_END OUT DATE,
M_GROUP_BEGIN OUT DATE,
M_GROUP_END OUT DATE,
M_SEGMENT_NO OUT INTEGER,
M_GROUP_CODE OUT VARCHAR2,
RES OUT VARCHAR2
2-1 controller层
@RequestMapping("/GETPRO")
@ResponseBody
public PGetTimeSlotInfoEntity TESTPRO() throws SQLException {
PGetTimeSlotInfoEntity entity = new PGetTimeSlotInfoEntity();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = df.format(new Date());
Timestamp ts = Timestamp.valueOf(time);//获取当前时间的时间戳
entity.setM_DATETIME(ts);//以时间戳给输入的DATE参数赋值
service.GetPro(entity);
return entity;
}
2-2 实体类
public class PGetTimeSlotInfoEntity implements Serializable {
private static final long serialVersionUID = -6556793741331167103L;
private Timestamp M_DATETIME;
private Timestamp M_SEGMENT_BEGIN;// 这里不用Date,应为传不了时分秒
private Timestamp M_SEGMENT_END;
private Timestamp M_GROUP_BEGIN;
private Timestamp M_GROUP_END;
private String M_SEGMENT_NO;
private String M_GROUP_CODE;
private String RES;
public Timestamp getM_DATETIME() {
return M_DATETIME;
}
public void setM_DATETIME(Timestamp m_DATETIME) {
M_DATETIME = m_DATETIME;
}
public Date getM_SEGMENT_BEGIN() {
return M_SEGMENT_BEGIN;
}
public void setM_SEGMENT_BEGIN(Timestamp m_SEGMENT_BEGIN) {
M_SEGMENT_BEGIN = m_SEGMENT_BEGIN;
}
public Date getM_SEGMENT_END() {
return M_SEGMENT_END;
}
public void setM_SEGMENT_END(Timestamp m_SEGMENT_END) {
M_SEGMENT_END = m_SEGMENT_END;
}
public Timestamp getM_GROUP_BEGIN() {
return M_GROUP_BEGIN;
}
public void setM_GROUP_BEGIN(Timestamp m_GROUP_BEGIN) {
M_GROUP_BEGIN = m_GROUP_BEGIN;
}
public Timestamp getM_GROUP_END() {
return M_GROUP_END;
}
public void setM_GROUP_END(Timestamp m_GROUP_END) {
M_GROUP_END = m_GROUP_END;
}
public String getM_SEGMENT_NO() {
return M_SEGMENT_NO;
}
public void setM_SEGMENT_NO(String m_SEGMENT_NO) {
M_SEGMENT_NO = m_SEGMENT_NO;
}
public String getM_GROUP_CODE() {
return M_GROUP_CODE;
}
public void setM_GROUP_CODE(String m_GROUP_CODE) {
M_GROUP_CODE = m_GROUP_CODE;
}
public String getRES() {
return RES;
}
public void setRES(String rES) {
RES = rES;
}
}
2-3 mapper
<select id="GetPro" parameterType="com.kh.zzkanban1.Entyties.PGetTimeSlotInfoEntity" useCache="false"
statementType="CALLABLE">
<![CDATA[
{call P_GET_TIME_SLOT_INFO(
#{M_DATETIME,mode=IN,jdbcType=DATE},
#{M_SEGMENT_BEGIN,mode=OUT,jdbcType=DATE},
#{M_SEGMENT_END,mode=OUT,jdbcType=DATE},
#{M_GROUP_BEGIN,mode=OUT,jdbcType=DATE},
#{M_GROUP_END,mode=OUT,jdbcType=DATE},
#{M_SEGMENT_NO,mode=OUT,jdbcType=INTEGER},
#{M_GROUP_CODE,mode=OUT,jdbcType=VARCHAR},
#{RES,mode=OUT,jdbcType=VARCHAR}
)}
]]>
</select>
springboot+mybatis调用oracle存储过程的更多相关文章
- MyBatis调用Oracle存储过程
MyBatis调用Oracle存储过程 1.无输入和输出参数的存储过程 2.带有输入和输出参数的存储过程 3.返回游标的存储过程 mybatis中的配置文件代码 <resultMap type= ...
- mybatis 调用 oracle 存储过程 select into 无记录时NO_DATA_FOUND异常处理分析
首先根据这篇文章:http://www.cnblogs.com/coolzdp/p/7717332.html 我们知道存储过程中 SELECT * INTO 如果没有记录是不会往下执行的,直接抛出NO ...
- mybatis调用oracle存储过程的几个参考例子
首先写一个存储过程: create or replace procedure p_syn_equipment_20161205 is sqlstr ); begin --清空表 sqlstr := ' ...
- mybatis 调用oracle存储过程如何返回out参数值
调试了半天,其实整体用map传入传出也挺简单, 主要是调用存储过程 select标签里平时习惯不写 statementType="CALLABLE",调用没有out参数时也能正常用 ...
- mybatis调用oracle存储过程例子.
1.MYBATIS方法: <select id="getFlowNum" statementType="CALLABLE"> <![CDATA ...
- mybatis调用oracle存储过程 out游标类型参数 如何赋给java map
<resultMap id="ticketInfosResultMap" type="Map"> <!--result要是默认用列名的话完全不 ...
- Java调用oracle存储过程通过游标返回临时表数据
注:本文来源于 < Java调用oracle存储过程通过游标返回临时表数据 > Java调用oracle存储过程通过游标返回临时表数据 项目开发过程中,不可避免的会用到存储过程返回结 ...
- Mybatis调用PostgreSQL存储过程实现数组入参传递
注:本文来源于 < Mybatis调用PostgreSQL存储过程实现数组入参传递 > 前言 项目中用到了Mybatis调用PostgreSQL存储过程(自定义函数)相关操作,由于Pos ...
- C#调用Oracle存储过程
C#调用Oracle存储过程的代码如下所示: using System; using System.Collections.Generic; using System.Collections.Obje ...
随机推荐
- Oracle JDBC 标准连接实例
Oracle JDBC 标准连接实例 // 创建一个数据库连接 Connection con = null; // 创建预编译语句对象,一般用PreparedStatement不用Statement ...
- Oracle JDBC 连接池
1.简介 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据 ...
- js的 break 和 continue 计算问题
break和continue: 代码如下: var count=0; outermost: for(var i=0;i<10;i++){ for(var j=0;j&l ...
- [MyBatis]浅谈如何实现事务处理
要实现事务处理,就得从SqlSession中取出connection来,然后对connection采用setAutoCommit,commit,rollback等操作,最后的时候,不能像JDBC一样关 ...
- WinCE 开发问题:不支持 Open Generic 方法的 GetParameters。
WinCE中用的是Newtonsoft.Json.Compact.dll序列化Json的, 今天用Json解析类的时候, 提示异常:不支持 Open Generic 方法的 GetParameters ...
- linux之i2c子系统维护者源码仓库地址
仓库地址: git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git
- vsCode多选多个元素进行统一修改
如果你没有修改过vsCode的快捷键那么你可以按住"ctrl+d",然后逐个选中你要修改的元素,选完之后松开,你就可以敲击键盘愉快的修改了...如果你使用了ecliplse快捷键插 ...
- CDH集群部署hive建表中文乱码
背景:部署CDH集群的 hive 服务,选用 mysql 作为 hive 元数据的存储数据库,通过 hive cli 建表时发现中文注释均乱码. 现象:hive端建表中文注释乱码. 定位: 已经确认过 ...
- 【转】TCP/IP网络协议各层首部
数据包封装流程(逐层封装,逐层解封) 二层帧(二层帧中目的地址6个字节,源地址6个字节,长度/类型2个字节,二层帧共18个字节) ip头部(ip头部20字节) tcp头部(tcp头部20个字节): ...
- Docker存储容易忽略的使用细节
一.Docker容器使用前其实有个非常重要的步骤就是规划好部署的磁盘区域,因为docker容器默认存储的路径是在/var/lib/docker的根目录内,随着使用时间越长部署的内容越多,基本的根目录的 ...