spring boot--03
·
一、MyBatis 开发准备工作
1. 基础环境搭建步骤
- 准备数据库表
emp:包含员工相关字段(id、username、name、gender、job、entrydate等) - 创建 SpringBoot 工程:引入依赖
- MyBatis Framework
- MySQL Driver
- Lombok(简化实体类开发)
- 配置数据库连接信息(
application.properties):properties
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/mybatis spring.datasource.username=root spring.datasource.password=1234 - 创建实体类
Emp(驼峰命名,配合 Lombok):java
运行
@Data public class Emp { private Integer id; private String username; private String password; private String name; private Short gender; private String image; private Short job; private LocalDate entrydate; private Integer deptId; private LocalDateTime createTime; private LocalDateTime updateTime; } - 创建 Mapper 接口
EmpMapper:java
运行
@Mapper public interface EmpMapper { // 后续编写SQL方法 }
二、SQL 注入问题与防护
1. 什么是 SQL 注入?
通过恶意构造输入数据,修改预定义 SQL 语句的逻辑,实现非法操作(如绕过登录、删除数据)。
- 示例:登录场景中,输入密码
'or '1'=',会拼接出where username='xxx' and password='' or '1'='1',条件恒为真,直接登录成功。
2. MyBatis 参数占位符对比
表格
| 占位符 | 原理 | 安全性 | 使用场景 |
|---|---|---|---|
#{...} | 预编译占位符,执行时替换为?,参数由 MyBatis 安全设置 | 安全,防止 SQL 注入 | 绝大多数参数传递场景 |
${...} | 直接将参数拼接进 SQL 语句,无预编译 | 不安全,存在 SQL 注入风险 | 动态设置表名、列名等场景 |
三、根据主键删除示例
1. SQL 语句
sql
delete from emp where id = 17;
2. Mapper 接口方法
java
运行
@Delete("delete from emp where id = #{id}")
public void delete(Integer id);
3. 注意事项
- 当 Mapper 接口方法只有一个普通类型参数时,
#{}内的属性名可以任意写(如#{id}、#{value}都可以),MyBatis 会自动识别参数。
四、MyBatis 日志配置(调试必备)
1. 开启日志输出
在 application.properties 中配置,让 SQL 执行过程打印到控制台:
properties
# 指定日志实现,输出SQL到控制台
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
2. 日志输出示例
log
==> Preparing: delete from emp where id = ?
==> Parameters: 16(Integer)
<== Updates: 1
Preparing:显示预编译后的 SQL 语句(?占位符形式)Parameters:显示实际传入的参数值Updates:显示 SQL 执行影响的行数
五、预编译 SQL 的优势
1. 性能更高
- 预编译 SQL 只需要解析一次,后续相同结构的 SQL 可以直接复用编译结果,减少数据库解析开销。
- 示例:多次执行
delete from emp where id = ?,数据库只需要解析一次,缓存执行计划,后续直接执行。
2. 更安全(防止 SQL 注入)
- 预编译时 SQL 结构已经固定,参数是后续传入的,无法通过恶意参数修改 SQL 逻辑,从根本上避免 SQL 注入攻击。
更多推荐


所有评论(0)