MyBatis 基础CRUD全套实战学习笔记

发布时间:2026/7/18 20:20:10
MyBatis 基础CRUD全套实战学习笔记 前言MyBatis 是后端开发主流持久层框架用来简化 JDBC 数据库操作不用手写繁琐的连接、释放资源代码。本文按课程分段完整梳理 MyBatis 基础增删改查全套操作从环境搭建到条件查询全覆盖适合零基础入门复习。一、Day09-01 MyBatis 基础操作 - 环境准备1. 核心步骤Maven 依赖导入导入 MyBatis 核心包、对应数据库驱动MySQL8.x、单元测试 JUnit 依赖。!-- mybatis核心 -- dependency groupIdorg.mybatis/groupId artifactIdmybatis/artifactId version3.5.9/version /dependency !-- mysql驱动 -- dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId version8.0.30/version /dependency创建数据库与实体类设计业务数据表示例员工表emp编写对应实体类Emp属性与表字段一一对应提供 get/set、无参构造。编写 MyBatis 全局核心配置文件mybatis-config.xml配置数据库连接环境、开启日志打印方便查看执行 SQL、注册 Mapper 映射文件 / 注解 Mapper 接口。Mapper 两种开发方式二选一XML 映射文件方式EmpMapper.xml编写 SQL 语句注解开发方式Select/Insert/Update/Delete直接写在 Mapper 接口方法上测试环境校验通过SqlSessionFactory获取SqlSession加载配置文件验证数据库连通性。学习重点环境搭建是所有操作的基础配置文件路径、数据库账号密码、Mapper 注册位置出错会直接报找不到 SQL、连接失败等异常。二、Day09-02 MyBatis 基础操作 - 删除基础删除1. 业务场景根据主键 ID 删除单条数据。2. 两种实现方式方式 1XML 映射delete iddeleteById delete from emp where id #{id} /delete方式 2注解开发Delete(delete from emp where id #{id}) void deleteById(Integer id);3. 测试调用SqlSession sqlSession factory.openSession(true); // true自动提交事务 EmpMapper mapper sqlSession.getMapper(EmpMapper.class); mapper.deleteById(1);坑点提醒MyBatis 默认关闭自动提交若openSession()不传 true删除后必须手动sqlSession.commit()否则数据库无变化。三、Day09-03 MyBatis 基础操作 - 删除预编译 SQL1. 什么是预编译 SQL#{变量}底层会生成?占位符JDBC 预编译语句PreparedStatement从根源防止 SQL 注入。 对比危险拼接${id}直接字符串拼接存在注入漏洞删除、新增、更新、查询优先使用#{}。2. 实战演示错误写法拼接注入风险delete from emp where id ${id}标准安全写法预编译delete from emp where id #{id}核心知识点预编译是 MyBatis 安全核心特性所有传参场景统一使用#{参数名}仅动态表名、排序字段才不得已使用${}。四、Day09-04 MyBatis 基础操作 - 新增1. 新增单条数据基础语法XMLinsert idinsertEmp insert into emp(name,gender,entrydate,update_time) values(#{name},#{gender},#{entrydate},#{updateTime}) /insert注解Insert(insert into emp(name,gender,entrydate,update_time) values(#{name},#{gender},#{entrydate},#{updateTime})) void insert(Emp emp);2. 参数传递规则传入实体类对象时#{}内直接写实体类属性名MyBatis 自动通过 getter 取值。3. 事务说明新增属于 DML 修改语句和删除一样不开启自动提交时需要手动 commit。五、Day09-05 MyBatis 基础操作 - 新增主键返回业务需求插入数据后立刻拿到数据库自增的主键 id用于后续关联操作。两种实现方案方案 1XML 标签配置insert idinsertEmp useGeneratedKeystrue keyPropertyid insert into emp(name,gender) values(#{name},#{gender}) /insertuseGeneratedKeystrue开启获取自增主键keyPropertyid把主键赋值给入参 Emp 对象的 id 属性方案 2注解实现Insert(insert into emp(name,gender) values(#{name},#{gender})) Options(useGeneratedKeys true, keyProperty id) void insert(Emp emp);使用效果调用 insert 方法后传入的 Emp 对象emp.getId()就能拿到刚插入数据的主键。六、Day09-06 MyBatis 基础操作 - 更新1. 根据主键修改数据XMLupdate idupdateEmp update emp set name#{name},gender#{gender},entrydate#{entrydate} where id#{id} /update注解Update(update emp set name#{name},gender#{gender} where id#{id}) void update(Emp emp);2. 注意点更新必须携带唯一条件主键 id否则会全表更新造成数据事故实际开发中尽量限制更新范围。七、Day09-07 MyBatis 基础操作 - 查询根据 ID 查询1. 单条精准查询根据主键查询单条员工返回单个 Emp 实体对象。Select(select * from emp where id #{id}) Emp getById(Integer id);2. 自动封装原理MyBatis 查询结果集 ResultSet会自动匹配列名与实体类属性字段名和属性名完全一致直接映射下划线命名update_time与驼峰命名updateTime可在全局配置开启驼峰自动转换。3. 返回值说明确定只查 1 条数据返回Emp对象不确定条数使用集合ListEmp接收避免无数据时报空指针。八、Day09-08 MyBatis 基础操作 - 查询条件查询1. 多条件固定查询本文开篇示例代码对应知识点需求查询姓名含 “张”、性别 1、入职时间 2010-2020 之间的员工按更新时间倒序。注解完整示例//条件查询员工 Select(select * from emp where name like %张% and gender 1 and entrydate between 2010-01-01 and 2020-01-01 order by update_time desc ) ListEmp list();2. 核心 SQL 语法讲解like %张%模糊匹配包含 “张” 的姓名and多条件同时满足between A and B区间筛选包含起止日期order by 字段 desc倒序排序最新数据在前。3. 拓展动态条件进阶硬编码条件灵活性差真实开发会使用#{参数}动态传参结合 MyBatis 动态 SQL 标签if实现可选条件查询。4. 返回值多条件查询会返回多条数据统一使用ListEmp集合接收。九、Day09 整体学习总结操作顺序逻辑环境准备 → 删 / 增 / 改DML需要事务提交 → 查询DQL无需事务核心语法统一规范传参全部使用#{}预编译防 SQL 注入增删改必须注意事务提交新增自增主键通过useGeneratedKeys回写两种开发模式对比注解开发简单 CRUD 简洁直观适合小型项目XML 文件复杂多条件动态 SQL 可读性更强企业大型项目主流高频踩坑汇总忘记提交事务新增 / 删除 / 更新不生效实体类属性名和数据库字段不匹配查询字段为 null混淆#{}与${}引发 SQL 注入安全问题条件查询返回单对象多条数据抛出转换异常统一用 List 接收。