当前位置: 首页 > news >正文

mybatis调用数据库存储过程

mybatis调用数据库存储过程及常见属性详解

调用mapper

String visitCode = mapper.getVisitCode(objectMap);

Dao层,xml文件代码编写

 <select id="getVisitCode" parameterType="map" resultType="string" statementType="CALLABLE"><![CDATA[{call getMinSerial_withLeft(#{tableName, jdbcType=VARCHAR, mode=IN},#{columnName, jdbcType=VARCHAR, mode=IN},#{left, jdbcType=VARCHAR, mode=IN},#{rightLength, jdbcType=INTEGER, mode=IN})}]]></select>

属性statementType的属性值有:STATEMENT,PREPARED ,CALLABLE

详解:

STATEMENT

  • 普通的不带参的查询SQL
  • 支持批量更新与批量删除
  • Statement每次执行sql语句,数据库都要执行sql语句的编译,因此在使用Statement进行查询时,最好用于仅执行一次查询并返回结果的情形,效率高于PreparedStatement。
  • 对应于Statement对象,有SQL注入的风险

PREPARED

  • 可变参数的SQL,编译一次,执行多次,效率高
  • 安全性高,有效防止了SQL注入
  • 支持批量删除,与批量更新
  • preparedStatement是预编译的,在执行可变参数的一条SQL的时候,PreparedStatement要比Statement的效率要高的,因为DBMS预编译一条SQL的效率要比多次编译一条SQL的效率要高,==另外PreparedStatement有效防止了SQL注入。==在进行多次执行重复语句的时候,PreparedStatement具有更高的运行效率,并且在这种情况下比较适合使用batch,其次就是编写的代码拥有更高的可读性与可维护性。

CALLABLE

  • 继承了PreparedStatement,支持带参数的SQL操作
  • 支持调用存储过程,提供了对输出和输入/输出参数(INOUT)的支持
  • 当使用存储过程的时候,需要指定statementType的值为CALLABLE

其他常见的属性:databaseId,flushCache,keyColumn,keyProperty,timeout,useGeneratedKeys

databaseId

  • 用于指定所配置的数据源的id,在多数据源的时候,可以使用
<bean id="vendorProperties"class="org.springframework.beans.factory.config.PropertiesFactoryBean"><property name="properties"><props><prop key="Oracle">oracle</prop><prop key="MySQL">mysql</prop></props></property>
</bean>

SQL在指定数据源的时候

<select id="qryAllUserInfo" databaseId="oracle" parameterType="****" >select * from sys_user
</select>
<select id="qryAllUserInfo" databaseId="mysql" parameterType="****" >select * from sys_user
</select>

flushCache与userCache

其主要针对二级缓存进行使用,在没有配置的情况下,mybatis的默认二级缓存如下

  • flushCache默认为false,表示任何时候语句被调用,都不会去清空二级缓存和本地缓存
  • useCache默认为true,表示将本条语句的查询结果进行二级缓存
  • 在insert、update、delete语句时:flushCache默认为true,表示任何时候语句被调用,都会导致本地缓存和二级缓存都会被清空,useCache属性在该情况下没有值。update的时候flushCache=false,则当你更新后,查询的数据还是老数据。

keyColumn,keyProperty,useGeneratedKeys

  • 在插入数据库后,还返回插入的主键如id值到相应的pojo模型中。这非常方便的在进行业务插入时,无需再次查询最后一次插入的数值id。

  • keyColumn,指定数据库的主键名是什么,比如id,对特定的数据库(PostgreSQL)若自动生成的主键不是第一个字段则必须进行设置

  • keyProperty,默认值unset,用于设置getGeneratedKeys方法或selectKey子元素返回值将赋值到领域模型中的那个属性之中

  • useGeneratedKeys,取值范围true|false(默认值),设置是否使用JDBC的getGeneratedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中。Mysql和SQLServer执行auto-generated key field,因此当数据库设置好自增主键后,可以通过JDBC的getGeneratedKeys方法或取,但像Oralce等不支持auto-generated key field的数据库就不能用这种方法获取主键了

例子

<insert id="addHuser" parameterType="com.xx.authorization.model.HUsers" useGeneratedKeys="true" keyColumn="USER_ID" keyProperty="userId">  INSERT INTO H_USERS(PHONE,PASSWORD,GENDERS,REGISTER_DATE,STATUS)  values (#{phone},#{password},  #{genders,typeHandler=org.apache.ibatis.type.EnumOrdinalTypeHandler},  #{registerDate},#{status})  
</insert> 

当执行完该条语句之后,语句会获取插入的最新一条数据的主键,及USER_ID的值,然后映射到 userId,最后在映射到实体类的HUser的userId中,所执行完你会发现HUSer的userId是最新的id数据

例子2

<mapper namespace="com.dao.EmployeeDao"><insert id="insert"><selectKey order="BEFORE" keyColumn="employeeId,employeeGender" keyProperty="employeeId,employeeGender" resultType="com.entity.Employee">select employee_id employeeId,employee_gender employeeGender from employee where employee_id=13</selectKey>insert into subtable(employee_id,employee_name,employee_gender) values (#{employeeId},"mdzz",#{employeeGender})</insert>
</mapper>

该条语句,表示从employee 中查询employee_id=13的数据,查询到employeeId和employeeGender 并映射到keyProperty中,然后再下一个insert语句中,直接注入#{employeeId},#{employeeGender},这种情况多用在表2需要表1字段信息时,减少代码和SQL的编写。提高SQL执行速度。

timeout

默认为unset(依赖jdbc驱动器的设置),设置执行该操作的最大时限,超时将抛异常

相关文章:

mybatis调用数据库存储过程

mybatis调用数据库存储过程及常见属性详解 调用mapper String visitCode mapper.getVisitCode(objectMap);Dao层&#xff0c;xml文件代码编写 <select id"getVisitCode" parameterType"map" resultType"string" statementType"CALLAB…...

【git】发生冲突后回滚提交

gerrit 冲突&#xff0c; 无法合并到主干 那么先回滚 参考这里的 reset 操作&#xff1a; 回滚 到上一个提交 $ git reset --soft HEAD~1 # 數字表示移動到 HEAD後面第幾個刚提交的会撤回&#xff0c; stash 刚刚提交的 然后去pull 最新的 修改冲突&#xff1a; 最后再…...

ISO14229 -1 UDS诊断服务记录-001:0x34\0x36\0x37\0x31\0x19\0x14服务报文格式介绍

目录 1、34服务-请求下载 1.1、诊断请求格式 1.2、正响应格式 1.3、负响应格式 1.4、工程应用分析 2、36服务-传输数据 2.1、请求报文格式 2.2、正响应格式 2.3、负响应NRC 3、37服务-退出传输 3.1、报文格式 3.2、正响应格式 3.3、负响应NRC 4、31服务-例程控制 …...

使用 MediaMTX 和 FFmpeg 推拉 RTSP 流媒体

实时流传输协议 RTSP&#xff08;Real-Time Streaming Protocol&#xff09;是 TCP/IP 协议体系中的一个应用层协议&#xff0c;由哥伦比亚大学、网景和 RealNetworks 公司提交的 IETF RFC 标准。该协议定义了一对多应用程序如何有效地通过 IP 网络传送多媒体数据。RTSP 在体系…...

Mac 电脑安装 Raptor 流程图软件的方法

0. 安装逻辑 &#xff08;1&#xff09;运行 raptor&#xff0c;本质上需要 mac 能够运行 windows 程序&#xff0c;因此需要安装 .NET Runtime 7.0&#xff0c;这是微软程序运行必须的文件。 &#xff08;2&#xff09;运行 raptor 还需要安装依赖文件 mono-libgdiplus。 &am…...

W801学习笔记二十:宋词学习应用

前三章完成了唐诗的应用&#xff0c;本章将实现宋词的学习应用。 宋词与唐诗的区别不大&#xff0c;马上开始。 1、我们需要参考前面唐诗的方式&#xff0c;把宋词文本下载下来&#xff0c;并进行格式整理。 W801学习笔记十七&#xff1a;古诗学习应用——上 2、在菜单中添加…...

EPAI手绘建模APP转换模型和坐标系

(11) 模型转换 图 273 转换工具栏 ① 实体转成曲面&#xff0c;先选择需要转成曲面的实体模型&#xff0c;再点击该按钮。将选择的实体模型转成多个曲面。 ② 曲线转成NURBS样条曲线&#xff0c;先选择需要转成NURBS样条曲线的边模型&#xff0c;修改转换参数&#xff0c;将选…...

STM32快速入门(串口传输之USART)

STM32快速入门&#xff08;串口传输之USART&#xff09; 前言 USART串口传输能实现信息在设备之间的点对点传输&#xff0c;支持单工、半双工、全全双工&#xff0c;一般是有三个引脚&#xff1a;TX、RX、SW_RX&#xff08;共地&#xff09;。不需要一根线来同步时钟。最大优…...

什么是网络安全和网络隐私?

什么是网络安全?这个是我最感兴趣的话题,网络安全说白了就是在网络上的安全,跟现实中一样,现实中为了家里的安全,我们会给家门上锁,会装监控,农村的话可能还会养一条狗,只有我们让别人进我们家,别人才能进来,对于计算机来说也是一样的,我们会设置账户的密码,会设置防火墙,会安…...

树莓派变小路由器放出热点wifi

环境 树莓派4Bubuntu20 作用 树莓派放出wifi后&#xff0c;笔记本电脑连接树莓派的wifi&#xff0c;并且ip配置在一个网段&#xff0c;就可以互相通信&#xff08;笔记本放出wifi&#xff0c;树莓派连接效果一样&#xff09;&#xff0c;这样的好处是树莓派只要一上电就会自…...

数据猎手:使用Java和Apache HttpComponents库下载Facebook图像

引言 在信息驱动的时代&#xff0c;互联网上的数据成为了无可比拟的宝藏。本文旨在探讨如何通过利用Java和Apache HttpComponents库&#xff0c;从全球最大的社交网络平台Facebook上获取图像数据。 作为全球最大的社交网络平台&#xff0c;Facebook聚集了数以亿计的用户&#…...

uniapp——阻止冒泡

点击事件阻止冒泡 click.stop"onSubmit"其他类型&#xff0c;比如视频&#xff1a; 最后加了一个 click.stop <view class"videoBox" v-if"item.video_url"><video :src"i.image(item.video_url)" :controls"true&quo…...

Jmeter性能测试(四)

一、遇到问题解决思路 1、检查请求头是否正确 2、检查请求参数是否正确 3、检查鉴权信息是否正确 4、检查变量作用域 5、检查数据提取是否正确(正则/json提取器) 二、请求头检查 1、在Http信息头管理器查看 2、注意这里的变量作用域是全局的 三、请求参数检查 1、在查看结…...

从零开始精通RTSP之传输ADPCM等音频流

概述 在上一篇文章中&#xff0c;我们详细介绍了使用RTP传输AAC音频流的打包方法。除了AAC编码算法外&#xff0c;常用的音频编码算法还有ADPCM、G711A、G711U、G726等。接下来&#xff0c;我们继续介绍RTP传输ADPCM等音频流的打包方法。 封装方法 RTP封装ADPCM等音频数据时&am…...

box-decoration-break 使用介绍

box-decoration-break属性的使用 一、定义 box-decoration-break是CSS片段模块&#xff08;CSS Fragmentation Module Level 3&#xff09;中的一个属性&#xff0c;主要用于指定背景&#xff08;background&#xff09;、内边距&#xff08;padding&#xff09;、边框&#…...

技术分享 | 京东商品API接口|京东零售数据可视化平台产品实践与思考

导读 本次分享题目为京东零售数据可视化平台产品实践与思考。 主要包括以下四个部分&#xff1a; 1.京东API接口介绍 2. 平台产品能力介绍 3. 业务赋能案例分享 01 京东API接口介绍 02 平台产品能力介绍 1. 产品矩阵 数据可视化产品是一种利用数据分析和可视化技术&…...

OpenHarmony鸿蒙蓝牙BLE调试app

OpenHarmony蓝牙模块提供了ble的功能&#xff0c;本篇提供一个简单的app供测试时使用。代码使用API10&#xff0c;对应4.0Release版本固件。 1.开启BLE 开启BLE前&#xff0c;先在设置界面中打开蓝牙开关。 openBle()函数负责打开ble扫描&#xff0c;并打印扫描结果。主要代…...

HackMyVM-VivifyTech

目录 信息收集 arp nmap nikto whatweb WEB web信息收集 wpscan feroxbuster hydra 提权 系统信息收集 横向渗透 git提权 get root 信息收集 arp ┌──(root㉿0x00)-[~/HackMyVM] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 08:00:27:9d:6d:7b, …...

将unity中相机位置保存为json 文件或者 发送给后端

将unity中相机位置保存保存到服务器 ///相机的位置public Transform cameraTransform;void Start(){// SaveCameraPosition("sd");// ("{\"name\":\"sd\",\"position\":\"(0.00, 5.00, -12.00)\",\"rotation\&qu…...

vue2-表单组件封装

创建组件 components/test/index.vue <template><el-form :model"formData">// <!-- 具名插槽 --><slot name"header" /><el-form-itemv-for"(item, index) in formItem":key"index":label"item.la…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...