当前位置: 首页 > 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值。自己写代码把…...

微信网页版访问终极指南:wechat-need-web插件完整教程

微信网页版访问终极指南&#xff1a;wechat-need-web插件完整教程 【免费下载链接】wechat-need-web 让微信网页版可用 / Allow the use of WeChat via webpage access 项目地址: https://gitcode.com/gh_mirrors/we/wechat-need-web 还在为无法在浏览器中使用微信网页版…...

使用git filter-repo删除已提交到git中的敏感信息,api key,配置文件等

使用git filter-repo删除已提交到git中的敏感信息&#xff0c;api key&#xff0c;配置文件等 前提条件 Python 3.5 git > 2.22.0通过 pip 安装&#xff1a;pip install git-filter-repo 注意事项 官方推荐在fresh clone上修改&#xff0c;即clone一份远程的再做修改 操作后…...

Bash脚本集成AI:实现智能运维自动化与决策增强

1. 项目概述&#xff1a;当Bash脚本遇见AI&#xff0c;自动化运维的“智能大脑”如果你和我一样&#xff0c;是个常年和Linux服务器、运维脚本打交道的“老运维”或开发者&#xff0c;那你肯定对Bash脚本又爱又恨。爱的是它的直接、高效&#xff0c;几行命令就能串联起复杂的系…...

Blender到Unity模型导出的终极解决方案:免费插件完整指南

Blender到Unity模型导出的终极解决方案&#xff1a;免费插件完整指南 【免费下载链接】blender-to-unity-fbx-exporter FBX exporter addon for Blender compatible with Unitys coordinate and scaling system. 项目地址: https://gitcode.com/gh_mirrors/bl/blender-to-uni…...

基于Gemini CLI的深度研究工具:命令行AI助手的架构与实战

1. 项目概述&#xff1a;当命令行遇上深度研究如果你和我一样&#xff0c;是个常年泡在终端里的开发者或研究者&#xff0c;那么“allenhutchison/gemini-cli-deep-research”这个项目标题&#xff0c;光是扫一眼&#xff0c;就能让人心跳加速。它精准地戳中了我们这类人的两个…...

基于RAG与向量数据库的智能代码搜索工具设计与实现

1. 项目概述&#xff1a;一个面向开发者的智能代码搜索与理解工具 最近在GitHub上看到一个挺有意思的项目&#xff0c;叫 holasoymalva/perplexity-code 。乍一看这个标题&#xff0c;可能会有点困惑——“perplexity”在机器学习里通常指“困惑度”&#xff0c;是衡量语言模…...

自托管链接管理工具LinkPress:从技术栈到部署实战

1. 项目概述&#xff1a;从“LinkPress”看开源链接聚合工具的演进最近在折腾个人知识库和内容管理时&#xff0c;发现了一个挺有意思的开源项目——mindori/linkpress。乍一看这个名字&#xff0c;你可能会联想到WordPress&#xff0c;没错&#xff0c;它的灵感确实来源于此&a…...

免费解锁B站大会员4K视频:Python下载器完整使用指南

免费解锁B站大会员4K视频&#xff1a;Python下载器完整使用指南 【免费下载链接】bilibili-downloader B站视频下载&#xff0c;支持下载大会员清晰度4K&#xff0c;持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 还在为B站上的精彩视频…...

时间序列分类的能效优化与剪枝策略实践

1. 时间序列分类的能效挑战与剪枝策略概述时间序列分类&#xff08;Time Series Classification, TSC&#xff09;作为机器学习的重要分支&#xff0c;在医疗监测、工业设备故障诊断、金融行为分析等领域发挥着关键作用。随着应用场景的复杂化和数据规模的扩大&#xff0c;传统…...

终极指南:三分钟掌握全网盘高速下载神器LinkSwift

终极指南&#xff1a;三分钟掌握全网盘高速下载神器LinkSwift 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘…...