2.7.Mybatis-基础操作-删除

Mybatis2:基础操作 Mybatis2:基础操作 增删查改语句 阅读详情

一.删除操作:用准备工作里的案例

1.EmpMapper接口里:源代码

package com.itheima.mapper;
​
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
​
@Mapper
public interface EmpMapper {
​
    //根据ID删除数据-->需要注解@Delete
    /* 删除的id不确定,因此需要定义为动态的,在调用接口里的delete方法时要用到id,
       所以要传递一个参数表示id。由于是动态的,还需要
     Mybatis里提供的参数占位符即#{参数名字}
     */
    @Delete("delete from emp where id = #{id}")
    public void delete(Integer id);
​
}

​
图片:


2.测试类里:源代码

package com.itheima;
​
import com.itheima.mapper.EmpMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
​
@SpringBootTest
class SpringbootMybatisCrudApplicationTests {
​
    //注入接口对象
    @Autowired
    private EmpMapper empMapper;
​
    @Test
    public void testDelete(){
        empMapper.delete(17);
    }
​
}

​
图片:


3.运行结果:id为17的员工被删除


4.扩展:

a. EmpMapper接口里的delete方法有返回值时:源代码
package com.itheima.mapper;
​
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
​
@Mapper
public interface EmpMapper {
​
    //根据ID删除数据-->需要注解@Delete
    /* 删除的id不确定,因此需要定义为动态的,在调用接口里的方法时要用到id,
       所以要传递一个参数表示id。由于是动态的,还需要
     Mybatis里提供的参数占位符即#{参数名字}-->建议该参数名字和方法形参保持一致,因为这样可读性强
     */
    @Delete("delete from emp where id = #{id}")
    public int delete(Integer id); //有返回值时代表一共操作了几条记录
​
}

​
图片:


b.测试类里:源代码
package com.itheima;
​
import com.itheima.mapper.EmpMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
​
@SpringBootTest
class SpringbootMybatisCrudApplicationTests {
​
    //注入接口对象
    @Autowired
    private EmpMapper empMapper;
​
    @Test
    public void testDelete(){
        int delete = empMapper.delete(17);
        System.out.println(delete);//运行结果为0
        /* 因为刚才已经把id为17的员工删除了,此时就无法删除了,
           故操作了0条数据
           如果删除id为16的员工的话,delete结果为1,因为刚才没删除id为16的员工
         */
    }
​
}

​
图片:


二.总结:


三.预编译SQL:

a.无需记住,记住关键字即可,剩下的让idea提示即可:


b.源代码:

spring.application.name=springboot-mybatis-crud
​
#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
​
#数据库连接的url
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_practice
​
#连接数据库的用户名
spring.datasource.username=root
​
#连接数据库的密码
spring.datasource.password=1234
​
​
#配置mybatis的日志,指定输出到控制台
 # 记住关键字即可
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
​

c.运行结果:出现了执行的SQL语句

?代表参数占位符:最终在运行时会用下面的参数替换掉上面的?(本例中是16替换?)

Updates录入的是操作了几条记录。


四.预编译SQL的优势:


登录界面攻击:

未攻击前:密码或者用户名输入错误都会攻击失败

攻击后:

此时条件始终为true,用户名怎么输都是对的,密码输入'or'1'='1-->运行结果就是所有用户都被查询出来

因此用预编译SQL可以防止被攻击。

-->#{参数名称}这个占位符最终生成的就是预编译SQL

五.参数占位符:

第二个参数占位符在运行时不会被?替代,而是直接拼接:此时不是预编译SQL-->性能低,也可能被攻击


【Mybatis小白从0到90%精讲】12:Mybatis删除 delete, 推荐使用主键删除! 在实际开发中,我们经常需要删除数据库中的数据,MyBatis可以使用XML映射文件或注解来编写删除(delete)语句,下面是两种方法的示例。 阅读详情

相关推荐

Docker 与容器技术的未来:从 OCI 标准到 eBPF 的演进

OCI 的核心目标是创建一个开放的、厂商中立的容器技术标准。这意味着,只要一个容器镜像符合 OCI 镜像格式规范,它就可以在任何符合 OCI 运行时规范的容器运行时上运行。eBPF 是一种革命性的技术,它允许在 Linux 内核中安全地运行沙盒程序,而无需修改内核源代码或加载内核模块。这些程序可以注册到内核中的各种事件点(如网络包到达、系统调用、函数调用/返回),并在事件发生时执行自定义逻辑。核心思想是:在不将数据复制到用户空间的情况下,程序可以直接在内核中处理数据,极大地提高了效率和性能。

专栏 1383

MyBatis实现删除操作

MyBatis实现删除操作 1 删除一个 2 批量删除

希望可以给你点帮助 4409

BDD测试之Behave使用入门

BDD测试(Behavior-Driven Development Testing)是一种基于“行为驱动开发”(BDD)理念。

想要成为酷盖但是失败的小明 580

mybatis删除

mydatis

qq_53558470的博客 1173

Dify沙箱权限配置实战:解决‘operation not permitted‘报错的完整指南

本文详细解析了Dify平台中常见的'operation not permitted'报错根源,即沙箱安全机制对系统调用的限制。通过实战步骤,指导用户定位并修改config.yaml配置文件,精准配置allowed_syscalls白名单以解决权限问题,涵盖从文件操作、进程控制到网络通信等关键系统调用的编号详解与配置示例,帮助用户在保障安全的前提下,顺利运行依赖特定库的代码工作流。

tech5的博客 1202

时序约束实战:从setup/hold到时钟路径约束的深度解析

本文深度解析数字设计中的时序约束实战,重点探讨如何从setup/hold检查的核心原理出发,理解并应用时钟路径约束。文章通过剖析Path Requirement的计算逻辑,结合同频、倍频及异步时钟域等典型场景,提供了从解读时序报告到编写、调试SDC约束的系统方法,帮助工程师有效应对复杂SoC设计中的时序收敛挑战。

weixin_29291185的博客 105

MyBatis完成删除操作

笔记

qq_45681515的博客 677

二次开发vba_CATIA VBA(VBS)二次开发:使用Search批量选择元素

在CATIA二次开发中很多在程序中进行自动交互的方法或函数都需要使用选择集作为参数,将几何元素按照要求批量添加到选择集中也是实现程序自动运行的有效方法。在前面的文章《CATIA使用VBA(VBS)二次开发时用户的交互选择》和《CATIA使用VBA(VBS)二次开发时工程图和草图位置的交互选择函数Indicate2D》中介绍了在CATIA VBA(VBS)二次开发中用户和选择集之间的交互操...

weixin_32497403的博客 1321

MyBatis的删除,修改,添加

(1)在UserMapper接口里的方法,根据主键删除数据(2)UserMapper.xml文件里的sql语句(3)测试类代码。

qq_65142821的博客 746

有限元法(Finite Element Method,FEM)原理详解

有限元法( FEM )是一种流行的方法,用于数值求解工程和数学建模中出现的微分方程。

车手只需要车和手,压力来自轮胎 7万+

74LS161/48 交通灯控制系统:30-5-20-5 时序逻辑电路 Multisim 仿真验证

本文详细解析了基于74LS161/48芯片的交通灯控制系统设计,通过Multisim仿真验证30-5-20-5时序逻辑电路。从系统架构搭建、状态机实现到波形分析,提供全流程操作指南与典型问题排查方法,助力数字电路课程设计高效完成。

weixin_26742753的博客 380

Java的Mybatis删除操作,附详细代码

家人们,今天给你们讲了这么多关于Mybatis删除操作的事儿,从为啥要学,到基础回顾,再到详细的单条和批量删除步骤,还有代码示例和常见问题解决办法。希望你们能掌握这些知识,多动手实践实践,把Mybatis的删除操作练得炉火纯青。

潜意识Java的博客 2058

STC单片机使用FatFs文件系统读取SD卡指定文件内容

STC单片机使用FatFs文件系统读取SD卡指定文件内容

perseverance51博客 2745

7、JavaWeb-Mybatis基础操作

使用mybatis除了建立连接数据库,还有使用注解或xml形式编写sql,以及动态sql的实现。 了解sql中的两种占位符;了解mybatis自动实现字段名与属性名的映射规则;插件mybatisx等;

Misnearch的博客 2100

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

MyBatis删除操作

Mapper接口方法创建:在MyBatis开发中,首先要创建Mapper接口方法,并使用@Delete注解来绑定SQL语句,以此定义删除操作。示例代码如下:@Mapper// 根据ID删除用户,SQL中的#{id}为参数占位符关键注解与参数解读@Delete注解:这是MyBatis专门用于标识删除操作的注解,其参数就是我们要执行的删除SQL语句。通过这个注解,MyBatis能够清晰地识别该方法的功能是执行数据库删除操作。#{id}参数占位符:它在SQL语句中扮演着重要角色,用于接收方法参数。

2401_86968005的博客 1141

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Javaweb之Mybatis的基础操作之删除的详细解析

预编译SQL有两个优势:性能更高更安全(防止SQL注入)性能更高:预编译SQL,编译一次之后会将编译后的SQL语句缓存起来,后面再次执行这条语句时,不会再次编译。(只是输入的参数不同)更安全(防止SQL注入):将敏感字进行转义,保障SQL的安全性。

qq_69748833的博客 1633

MyBatis-Plus删除操作知识点总结

本次内容主要是MP中的删除操作的知识点,有通过id删除,通过条件删除(map删出,QueryWrapper删除)、批量删除。主要是MP中的删除函数的用法。虽说在以后的开发中一般不会轻易地删除数据,只是把数据进行标记后不显示到页面。但删除操作在我们的学习中还是要求掌握的,毕竟也不难,而且在我们的开发中也会去运用到。所以作为学习的我们还是很有必要掌握该知识点的~

心态的博客 1万+

Mybatis_plus删除操作

Mybatis_plus删除操作1、根据id删除记录2、批量删除3、简单的条件查询删除4、逻辑删除1、数据库中添加 deleted字段2、实体类添加deleted 字段3、元对象处理器接口添加deleted的insert默认值4、application.properties 加入配置5、在 MybatisPlusConfig 中注册 Bean6、测试逻辑删除7、测试逻辑删除后的查询 1、根据id删除记录 @Test public void testDeleteById(){ int result

weixin_51614089的博客 3083

【MyBatis】MyBatis基础操作

如何打印 MyBatis 日志,使用 MyBatis 操作数据库时候的参数传递以及注解和XML配置文件的方法实现数据库的增删改查

不能再留遗憾了的博客 2503

Mybatis基础操作

但是我们目前并不能看到Mybatis底层到底执行了什么样的sql语句,我们其实可以借助Mybatis的日志看到的,但是默认是关闭的,我们需要手动开启。但是我们的#{}是不能出现在’'之内的,因为我们的#{}生成的是占位符?我们发现我们@Data注解的toString只会打印自己的属性不会打印父类属性的信息,这里我们自己重写一下toString()方法。这样把代码写死了,所以我们需要动态的接收id来进行删除。我们发现当我们实体类属性名和数据库查询返回的字段名不一致,则不能自动封装,那么如何进行封装呢?

buhuisuanfa的博客 2490

MyBatis-Plus删除操作:逻辑删除与物理删除应用

MyBatis-Plus提供了逻辑删除和物理删除两种数据删除方式。逻辑删除通过修改标记字段保留数据,适用于需要审计追溯或数据恢复的场景,如电商订单和内容管理;物理删除直接移除数据,适用于过期日志或敏感信息等无需保留的数据。实现方面,逻辑删除需配置注解和策略文件,调用delete方法仅修改标记状态;物理删除则直接调用delete方法永久移除数据。开发者应根据业务需求选择合适方式,注意逻辑删除的配置验证和物理删除前的数据备份。

fykam的博客 2152

20MyBatis - MyBatis删除操作

MyBatis删除操作 根据用户id删除用户 使用的sql DELETE FROM `user` WHERE id = 47 映射文件 在User.xml配置文件中添加如下内容: <!-- 删除用户 --> <delete id="deleteUserById" parameterType="int"> delete from user where id=#{i...

阿甘兄 8543

Mybatis-基础(删除)

这里创建注解使用sql语句时可以直接id = 3,并把下面的形参值删除,但是这样的方法会使得代码的灵活性降低,以及性能降低。这里为了更方便理解可以先将到我的网盘中将拿取两个jar包方便演示,网址为:通过网盘分享的文件:SQL注入演示。5、这时在当前的文件中打开cmd,并使用代码:java -jar jar包名字 ,启动对应的jar包。SQL注入问题:通过操作输入的数据来修改事先定义高的SQL语句,以达到执行代码对服务进行。执行SQL时,会将#{…*:第一个jar包是没有使用预编译SQL,而第二个使用了。

weixin_68576312的博客 994

MyBatis-Plus 删除操作

MyBatis-Plus 删除操作一、删除1.1、根据ID删除记录1.2、批量删除1.3、简单条件删除二、逻辑删除2.1、物理删除与逻辑删除2.2、逻辑删除实现流程2.2.1、数据库表字段修改2.2.2、实体类修改2.3、测试2.3.1、逻辑删除测试2.3.2、逻辑删除后查询测试 一、删除 1.1、根据ID删除记录 可直接使用MP提供的deletedById() API填入字段ID即可进行删除。 //根据id删除数据 @Test public void testDeleteById

爱追剧晓三鲜的博客 1万+

【JavaWeb】Day47.Mybatis基础操作——删除

Mapper注解:表示当前接口为mybatis中的Mapper接口程序运行时会自动创建接口的实现类对象(代理对象),并交给Spring的IOC容器管理。

m0_74197695的博客 876

Mybatis的基础操作

预编译SQL有两个优势:性能更高更安全(防止SQL注入)性能更高:预编译SQL,编译一次之后会将编译后的SQL语句缓存起来,后面再次执行这条语句时,不会再次编译。(只是输入的参数不同)更安全(防止SQL注入):将敏感字进行转义,保障SQL的安全性。

一位努力搬砖的不入流程序猿 1224
上一篇: 2.6.Mybatis-基础操作-环境准备
下一篇: 2.8.Mybatis-基础操作-新增
巧克力拌面
博客等级 码龄3年 1153粉丝 282原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值