2.7.Mybatis-基础操作-删除

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

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-->性能低,也可能被攻击


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值