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

数据库Mybatis基础操作

目录

基础操作

删除

预编译SQL

增、改、查

自动封装


基础操作

环境准备

删除

根据主键动态删除数据:使用了mybatis中的参数占位符#{ },里面是传进去的参数。

单元测试:

另外,这个方法是有返回值的,返回这次操作的数据数量,比如删除了一条记录,就返回1,以此类推。但一般没什么用,所以使用void不返回值。可以通过添加配置信息,输出mybatis的日志进行观察。

以下是mybatis的输出日志:?是参数占位符(替代了#{ }),传进参数(16),这里实际上并没有16这条数据,因此操作数据的数量updatas为0。

这条SQL语句叫做预编译SQL,那为什么不直接将16拼接在sql语句中呢?

预编译SQL

因为采用预编译SQL有两大优势:

  1. 性能提升:预编译SQL语句在第一次执行时会被编译,之后如果再次使用相同的SQL语句,就不需要重新编译,可以直接执行,这可以显著提高执行效率。

  2. 安全性增强:使用预编译SQL可以有效防止SQL注入攻击,因为SQL语句和参数是分开处理的。参数在执行时被传递给预编译的语句,而不是作为SQL语句的一部分,这样可以避免恶意用户通过修改参数来执行非法SQL操作。

SQL注入是通过操作输入的数据来修改事先定义好的SQL语句,以达到执行代码对服务器进行攻击的方法。以下为例子:

实际上,登录功能的账户密码校验就是查询操作,查询数据库中是否有账号和密码的数据存在,如果都存在就可以登录,如果不存在就返回错误信息。

存在账号张无忌zhangwuji并且密码为111,可以登录,反之就不能登录。

神奇的是以下的账号是随便输入的,但密码需要刻意写成这种形式。也可以成功登录

因为这段密码把sql语句的语义改写了,此时登录只需要‘1’=‘1’,而这是始终成立的。如下:

这种拼接的形式就有可能导致被SQL注入,因此就要采用预编译传参的形式进行规避。

参数占位符的区别:(面试题:#和$的占位符区别)

增、改、查

和删除一模一样,只是需要传递的参数太多,而这些参数都封装在Emp对象中,直接传递这个对象就行了。该方法也有返回值,和删除一样,就void不返回即可。

主键返回:在数据添加成功后,如果需要立即获取插入这条数据的主键,需要添加@options注解

更新:

数据一般不会更新主键,因此我们根据主键去修改数据。尾部增加一个id条件,对这个id的数据进行修改,其他的和删除新增一样。

查询:

同样根据id查询员工

条件查询:这里用了like模糊搜索和concat函数进行字符拼接,以避免SQL注入。

自动封装

绿色部分会自动封装到emp对象,而红色不能自动封装

三个解决方法:

相关文章:

数据库Mybatis基础操作

目录 基础操作 删除 预编译SQL 增、改、查 自动封装 基础操作 环境准备 删除 根据主键动态删除数据:使用了mybatis中的参数占位符#{ },里面是传进去的参数。 单元测试: 另外,这个方法是有返回值的,返回这次操作…...

人物形象设计:塑造独特角色的指南

引言 人物形象设计是一种创意过程,它利用强大的设计工具,通过视觉和叙述元素塑造角色的外在特征和内在性格。这种设计不仅赋予角色以生命,还帮助观众或读者在心理层面上与角色建立联系。人物形象设计的重要性在于它能够增强故事的吸引力和说…...

网络安全-安全策略初认识

文章目录 前言理论介绍1. 安全策略1.1 定义:1.2 关键术语: 2. 防火墙状态监测 实战步骤1:实验环境搭建步骤2:配置实现 总结1. 默认安全策略2. 自定义安全策略3. 防火墙状态会话表 前言 who:本文主要写给入门防火墙的技…...

python import相对导入与绝对导入

文章目录 相对导入与绝对导入绝对导入相对导入何时使用相对导入何时使用绝对导入示例 相对导入与绝对导入 在Python中,from .file_manager import SomeFunction 和 from file_manager import SomeFunction 两种导入方式看似相似,但在模块寻找机制上存在…...

深入理解 Go 语言原子内存操作

原子内存操作提供了实现其他同步原语所需的低级基础。一般来说,你可以用互斥体和通道替换并发算法的所有原子操作。然而,它们是有趣且有时令人困惑的结构,应该深入了解它们是如何工作的。如果你能够谨慎地使用它们,那么它们完全可以成为代码优化的好工具,而不会增加复杂性…...

PostgreSQL几个扩展可以帮助实现数据的分词和快速查询

在 PostgreSQL 数据库中,有几个扩展可以帮助实现数据的分词和快速查询,特别是在处理全文搜索和文本分析时。以下是几个常用的扩展: 1. pg_trgm pg_trgm(Trigram)扩展是 PostgreSQL 中的一个强大的工具,它可以通过计算字符串之间的相似度来实现快速文本搜索。它支持基于…...

C盘满了怎么办?教你清理C盘的20个大招,值得收藏备用

C盘满了怎么办?教你清理C盘的20个大招,值得收藏备用 今天给大家介绍20种C盘清理的方法,下次遇到C盘满了红了就知道怎么做了,喜欢请点赞收藏关注点评。 清理更新缓存 清理微信缓存 查找大文件清理或者迁移 磁盘缓存清理 系统还…...

原生js实现下滑到当前模块进度条填充

<div style"height: 1500px;"></div> <div class"progress-container"><div class"progress-bar" data-progress"90%"><p class"progress-text">Google Ads在Google搜索引擎上覆盖超过90%的互…...

显示弹出式窗口的方法

文章目录 1. 概念介绍2. 使用方法3. 示例代码 我们在上一章回中介绍了Sliver综合示例相关的内容&#xff0c;本章回中将介绍PopupMenuButton组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中介绍的PopupMenuButton组件位于AppBar右侧&#xf…...

Java-什么是缓存线程池?

什么是缓存线程池? 缓存线程池 (CachedThreadPool) 是一种特殊的线程池,它能够动态地调整线程的数量,以适应任 务的需求。这种线程池非常适合处理大量短暂的任务,因为它会根据任务的数量自动增加或减少线 程的数量。 缓存线程池的特点: 线程数量动态调整:缓存线程池…...

esbuild中的Binary Loader:处理二进制文件

在前端或Node.js项目中&#xff0c;有时需要处理二进制文件&#xff0c;如图片、音频、视频或其他非文本资源。esbuild提供了一款名为Binary Loader的插件&#xff0c;它能够在构建时将二进制文件加载为二进制缓冲区&#xff0c;并使用Base64编码将其嵌入到打包文件中。在运行时…...

深度好文:从《黑神话:悟空》看未来游戏趋势:高互动性、个性化与全球化

引言 在数字时代的浪潮中&#xff0c;游戏产业以其独特的魅力和无限的可能性&#xff0c;成为了全球娱乐文化的重要组成部分。随着科技的飞速发展&#xff0c;特别是高性能计算和人工智能技术的突破&#xff0c;游戏的世界变得越来越真实、细腻且富有深度。而在这股技术洪流中…...

【中项第三版】系统集成项目管理工程师 | 第 12 章 执行过程组

前言 本章属于10大管理的内容&#xff0c;上午题预计会考8-10分&#xff0c;下午案例分析也会进行考查。学习要以教材为主。 目录 12.1 指导与管理项目工作 12.1.1 主要输入 12.1.2 主要输出 12.2 管理项目知识 12.2.1 主要输入 12.2.2 主要输出 12.3 管理质量 12.3.…...

C语言自动生成宏定义枚举类型和字符串

#include <stdio.h>// 定义错误枚举 #define ERROR_LIST(e) \e(SUCCESS) \e(FAILURE) \e(NOT_FOUND) \e(TIMEOUT)// 使用宏生成枚举 #define GENERATE_ENUM(ENUM) ENUM, typedef enum {ERROR_LIST(GENERATE_ENUM) } ErrorCode;// 使用宏生成字符串数组…...

C#单例模式

&#xfeff;using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace _3._3._6_单例模式 {public class Singleton{private static Singleton s_instance;private int _state;private Singleton(int …...

10-使用sentinel流控

本文介绍sentinel的直接流控的使用。 0、环境 jdk 1.8sentinel 1.8.2springboot 2.4.2 1、sentinel环境搭建 从官方发布的网站上下载: sentinel Jar&#xff0c;下载对应版本。 下载完成后&#xff0c;进入刚才下载的Jar文件所在的目录&#xff0c;执行如下命令&#xff1a…...

redis AOF机制

在redis运行期间&#xff0c;不断将redis执行的写命令写到文件中&#xff0c;redis重启之后&#xff0c;只要将这些命令重复执行一遍就可以恢复数据。因为AOF只是将少量的写命令写入AOF文件中&#xff0c;因此其执行效率高于RDB&#xff0c;开启AOF即使Redis发生故障&#xff0…...

Day 21代码|随想录| 二叉树完结撒花,今日刷题669.修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.吧二叉搜索树转换为累加树

提示&#xff1a;DDU&#xff0c;供自己复习使用。欢迎大家前来讨论~ 文章目录 二叉树 Part06二、题目题目一&#xff1a;669.修剪二叉搜索树解题思路&#xff1a;递归法迭代法&#xff1a; 题目二&#xff1a; 108.将有序数组转换为二叉搜索树解题思路递归法&#xff1a;迭代…...

cmake教程一

1. Start 1.1 构建简单工程 cmake_minimum_required(VERSION 3.0) project(Step1) add_executable(Step1 main.cpp)设置cmake最低版本要求设置工程名字设置工程生成可执行程序 2. 声明 C Standard set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED True)如果我…...

3D场景标注标签信息,three.js CSS 2D渲染器CSS2DRenderer、CSS 3D渲染器CSS3DRenderer(结合react)

如果你想用HTML元素作为标签标注三维场景中模型信息&#xff0c;需要考虑定位的问题。比如一个模型&#xff0c;在代码中你可以知道它的局部坐标或世界坐标xyz&#xff0c;但是你并不知道渲染后在canvas画布上位置&#xff0c;距离web页面顶部top和左侧的像素px值。自己写代码把…...

CosyVoice多语言语音合成体验:支持中英日韩粤,一键生成

CosyVoice多语言语音合成体验&#xff1a;支持中英日韩粤&#xff0c;一键生成 1. 开篇&#xff1a;语音合成新体验 想象一下&#xff0c;你正在制作一个面向全球市场的产品宣传视频&#xff0c;需要中文、英文、日语、韩语和粤语五种语言的配音。传统方式需要找五位不同语种…...

Windows 10/11防火墙设置:如何快速开启ICMP协议实现Ping功能(详细图文)

Windows系统ICMP协议配置全指南&#xff1a;从基础原理到高阶应用 在IT运维和开发工作中&#xff0c;网络连通性测试是最基础却又最频繁的需求之一。想象一下这样的场景&#xff1a;你正在部署一个关键服务&#xff0c;却发现客户端无法连接到服务器&#xff1b;或是远程协助同…...

不用反向传播也能攻击AI模型?手把手教你用ZOO算法实现黑盒对抗攻击

零阶优化实战&#xff1a;无需反向传播的黑盒对抗攻击指南 当你在网络安全竞赛中遇到一个闭源的图像识别API&#xff0c;或是需要测试自家电商平台商品分类模型的鲁棒性时&#xff0c;传统基于梯度反向传播的白盒攻击方法立刻变得束手无策。这就是ZOO&#xff08;Zeroth Order …...

告别第三方工具:用Cloudflare官方测速文件快速检测你的网络性能

告别第三方工具&#xff1a;用Cloudflare官方测速文件快速检测你的网络性能 你是否遇到过这样的场景&#xff1a;视频缓冲转圈、文件下载龟速、在线会议卡顿&#xff0c;却不知道是网络问题还是服务商的问题&#xff1f;传统的测速工具要么需要安装软件&#xff0c;要么广告满天…...

PCB布局设计规范与工程实践要点

PCB布局设计思路与工程实践指南1. 布局设计基本原则1.1 结构约束优先原则在PCB布局初期&#xff0c;必须优先考虑机械结构约束条件&#xff1a;定位安装孔、连接器等结构件需严格按照外壳设计文件放置连接器1脚方向必须与结构设计匹配&#xff0c;避免装配错误元件高度不得超过…...

海尔智能家居无缝接入HomeAssistant:打破品牌壁垒的终极指南

海尔智能家居无缝接入HomeAssistant&#xff1a;打破品牌壁垒的终极指南 【免费下载链接】haier 项目地址: https://gitcode.com/gh_mirrors/ha/haier 还在为家中海尔设备无法与其他智能设备联动而烦恼吗&#xff1f;想象一下&#xff0c;炎热的夏天回家前就能远程开启…...

LeetCode知识点总结 - 524

LeetCode 524. Longest Word in Dictionary through Deleting考点难度ArrayMedium题目 Given a string s and a string array dictionary, return the longest string in the dictionary that can be formed by deleting some of the given string characters. If there is mor…...

安路PH1A180 FPGA实战:用米联客FDMA IP搞定DDR视频缓存,附源码调试心得

安路PH1A180 FPGA实战&#xff1a;FDMA IP与DDR视频缓存深度优化指南 在视频处理系统中&#xff0c;FPGADDR架构已成为实时高清视频流处理的标准方案。安路PH1A180凭借其高性能特性&#xff0c;配合米联客FDMA IP核&#xff0c;能够构建稳定高效的视频缓存系统。但在实际工程落…...

Fast-LIO2 + Lidar_IMU_Init:提升机器人定位精度的完整数据流与标定实战

Fast-LIO2与Lidar_IMU_Init融合实践&#xff1a;从标定到部署的机器人定位优化全流程 在机器人自主导航领域&#xff0c;激光雷达与IMU的融合定位系统已成为工业级应用的主流选择。然而&#xff0c;许多开发者在实际部署时会发现&#xff1a;即使采用了Fast-LIO2这样先进的激光…...

3个简单步骤,用SMUDebugTool彻底解决AMD Ryzen系统稳定性问题

3个简单步骤&#xff0c;用SMUDebugTool彻底解决AMD Ryzen系统稳定性问题 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: htt…...