数据库Mybatis基础操作
目录
基础操作
删除
预编译SQL
增、改、查
自动封装
基础操作
环境准备

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

单元测试:

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

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

这条SQL语句叫做预编译SQL,那为什么不直接将16拼接在sql语句中呢?
预编译SQL
因为采用预编译SQL有两大优势:
-
性能提升:预编译SQL语句在第一次执行时会被编译,之后如果再次使用相同的SQL语句,就不需要重新编译,可以直接执行,这可以显著提高执行效率。
-
安全性增强:使用预编译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综合示例相关的内容,本章回中将介绍PopupMenuButton组件.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中介绍的PopupMenuButton组件位于AppBar右侧…...
Java-什么是缓存线程池?
什么是缓存线程池? 缓存线程池 (CachedThreadPool) 是一种特殊的线程池,它能够动态地调整线程的数量,以适应任 务的需求。这种线程池非常适合处理大量短暂的任务,因为它会根据任务的数量自动增加或减少线 程的数量。 缓存线程池的特点: 线程数量动态调整:缓存线程池…...
esbuild中的Binary Loader:处理二进制文件
在前端或Node.js项目中,有时需要处理二进制文件,如图片、音频、视频或其他非文本资源。esbuild提供了一款名为Binary Loader的插件,它能够在构建时将二进制文件加载为二进制缓冲区,并使用Base64编码将其嵌入到打包文件中。在运行时…...
深度好文:从《黑神话:悟空》看未来游戏趋势:高互动性、个性化与全球化
引言 在数字时代的浪潮中,游戏产业以其独特的魅力和无限的可能性,成为了全球娱乐文化的重要组成部分。随着科技的飞速发展,特别是高性能计算和人工智能技术的突破,游戏的世界变得越来越真实、细腻且富有深度。而在这股技术洪流中…...
【中项第三版】系统集成项目管理工程师 | 第 12 章 执行过程组
前言 本章属于10大管理的内容,上午题预计会考8-10分,下午案例分析也会进行考查。学习要以教材为主。 目录 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#单例模式
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,下载对应版本。 下载完成后,进入刚才下载的Jar文件所在的目录,执行如下命令:…...
redis AOF机制
在redis运行期间,不断将redis执行的写命令写到文件中,redis重启之后,只要将这些命令重复执行一遍就可以恢复数据。因为AOF只是将少量的写命令写入AOF文件中,因此其执行效率高于RDB,开启AOF即使Redis发生故障࿰…...
Day 21代码|随想录| 二叉树完结撒花,今日刷题669.修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.吧二叉搜索树转换为累加树
提示:DDU,供自己复习使用。欢迎大家前来讨论~ 文章目录 二叉树 Part06二、题目题目一:669.修剪二叉搜索树解题思路:递归法迭代法: 题目二: 108.将有序数组转换为二叉搜索树解题思路递归法:迭代…...
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元素作为标签标注三维场景中模型信息,需要考虑定位的问题。比如一个模型,在代码中你可以知道它的局部坐标或世界坐标xyz,但是你并不知道渲染后在canvas画布上位置,距离web页面顶部top和左侧的像素px值。自己写代码把…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
相关类相关的可视化图像总结
目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系,可直观判断线性相关、非线性相关或无相关关系,点的分布密…...
React父子组件通信:Props怎么用?如何从父组件向子组件传递数据?
系列回顾: 在上一篇《React核心概念:State是什么?》中,我们学习了如何使用useState让一个组件拥有自己的内部数据(State),并通过一个计数器案例,实现了组件的自我更新。这很棒&#…...
GeoServer发布PostgreSQL图层后WFS查询无主键字段
在使用 GeoServer(版本 2.22.2) 发布 PostgreSQL(PostGIS)中的表为地图服务时,常常会遇到一个小问题: WFS 查询中,主键字段(如 id)莫名其妙地消失了! 即使你在…...
