什么是 MyBatisMyBatis 是一款优秀的 Java 持久层框架它通过 XML 或注解的方式将 Java 对象与数据库中的记录进行映射。与传统的 JDBC 相比MyBatis 极大地简化了数据库操作代码让开发者能够更专注于业务逻辑而不是繁琐的数据访问细节。MyBatis 的核心特点简化了 JDBC 的复杂操作支持动态 SQL能够根据条件灵活构建查询语句提供了强大的映射机制支持复杂的对象关系映射与 Spring 等主流框架无缝集成学习曲线平缓配置灵活为什么选择 MyBatis与其它持久层框架的对比相比于 Hibernate 这样的全自动 ORM 框架MyBatis 提供了更多的灵活性。MyBatis 允许你直接编写原生 SQL这在处理复杂查询或需要优化 SQL 性能时具有明显优势。主要优势灵活性可以编写原生 SQL灵活控制查询逻辑性能优化直接控制 SQL 语句便于性能调优简化开发减少了大量 JDBC 模板代码易于学习学习曲线平缓上手快速与 Spring 集成良好可以无缝集成到 Spring 框架中环境搭建创建springboot项目导入mybatis起步依赖、mysql驱动及其他需求首次使用下载时间会较长连接数据源建立数据库范例代码-- 创建数据库 CREATE DATABASE IF NOT EXISTS demo; USE demo; -- 创建员工表 CREATE TABLE employees ( id INT PRIMARY KEY AUTO_INCREMENT, employee_id VARCHAR(20) UNIQUE NOT NULL, name VARCHAR(50) NOT NULL, gender ENUM(男, 女) NOT NULL, age INT, department VARCHAR(50) NOT NULL, position VARCHAR(50) NOT NULL, salary DECIMAL(10,2), hire_date DATE NOT NULL, email VARCHAR(100), phone VARCHAR(20), address VARCHAR(200), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- 插入示例数据 INSERT INTO employees (employee_id, name, gender, age, department, position, salary, hire_date, email, phone, address) VALUES (EMP001, 张三, 男, 28, 技术部, 软件工程师, 15000.00, 2020-03-15, zhangsancompany.com, 13800138001, 北京市海淀区), (EMP002, 李四, 女, 32, 人力资源部, HR经理, 12000.00, 2018-06-20, lisicompany.com, 13800138002, 北京市朝阳区), (EMP003, 王五, 男, 35, 财务部, 财务主管, 18000.00, 2016-09-10, wangwucompany.com, 13800138003, 北京市西城区), (EMP004, 赵六, 女, 26, 市场部, 市场专员, 8000.00, 2021-01-08, zhaoliucompany.com, 13800138004, 北京市东城区), (EMP005, 钱七, 男, 30, 技术部, 高级工程师, 20000.00, 2019-11-25, qianqicompany.com, 13800138005, 北京市丰台区), (EMP006, 孙八, 女, 29, 销售部, 销售经理, 16000.00, 2020-07-30, sunbacompany.com, 13800138006, 北京市石景山区), (EMP007, 周九, 男, 27, 技术部, 前端开发, 13000.00, 2021-03-12, zhoujiucompany.com, 13800138007, 北京市通州区), (EMP008, 吴十, 女, 33, 行政部, 行政主管, 11000.00, 2017-05-18, wushicompany.com, 13800138008, 北京市昌平区), (EMP009, 郑十一, 男, 31, 财务部, 会计, 10000.00, 2019-08-22, zhengshiyicompany.com, 13800138009, 北京市大兴区), (EMP010, 王芳, 女, 25, 市场部, 市场助理, 7000.00, 2022-02-14, wangfangcompany.com, 13800138010, 北京市房山区);范例效果若已有数据库则直接连接在application.properties文件中配置数据库连接信息spring.application.namedemo #驱动类名称 spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver #数据库连接的url spring.datasource.urljdbc:mysql://localhost:3306/demo #连接数据库的用户名 spring.datasource.usernameroot #连接数据库的密码 spring.datasource.password1234实体类设计在 MyBatis 中实体类对应数据库中的表结构。良好的实体类设计是使用 MyBatis 的基础。Data NoArgsConstructor AllArgsConstructor public class Emp { private Integer id; //ID private String username; //用户名 private String password; //密码 private String name; //姓名 private Short gender; //性别 , 1 男, 2 女 private String image; //图像url private Short job; //职位 , 1 班主任 , 2 讲师 , 3 学工主管 , 4 教研主管 , 5 咨询师 private LocalDate entrydate; //入职日期 private Integer deptId; //部门ID private LocalDateTime createTime; //创建时间 private LocalDateTime updateTime; //修改时间 }Mapper 接口设计Mapper 接口定义了数据访问的方法可以使用注解完成接口的实现。例如实例代码中“分页查询”“查询数据总数”“新增员工”“根据id查询员工信息”这些功能的实现Mapper public interface EmpMapper { //分页查询 Select(select * from emp limit #{start},#{pageSize}) ListEmp page(Integer start, Integer pageSize); //条件分页查询 ListEmp list(Integer start, Integer pageSize,String name, Short gender, LocalDate begin, LocalDate end); //查询数据总数 Select(select count(*) from emp) Long count(); //批量删除员工 void delete(ListInteger ids); //新增员工 Insert(insert into emp(username, name, gender, image, job, entrydate, dept_id, create_time, update_time) value(#{username},#{name},#{gender},#{image},#{job},#{entrydate},#{deptId},#{createTime},#{updateTime})) void save(Emp emp); //根据id更新员工信息 void update(Emp emp); //根据id查询员工信息 Select(select * from emp where id #{id}) Emp getById(Integer id); }Mapper XML 映射文件XML 映射文件是 MyBatis 的核心它定义了 SQL 语句和结果映射。在sql语句较复杂的情况下不建议使用注解实现mapper接口这样会使得代码显得杂乱不易阅读而是在XML映射文件中编写sql语句。需要注意的是XML映射文件的路径名称必须于mapper接口路径名称相同。EmpMapper接口文件路径名称为cn.nuist.tlias.mapper.EmpMapper,XML映射文件路径名称也为cn.nuist.tlias.mapper.EmpMappermapper接口中的“分页条件查询”“批量删除员工信息”和“根据id更新员工信息”功能在XML映射文件中实现?xml version1.0 encodingUTF-8 ? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecn.nuist.tlias.mapper.EmpMapper select idlist resultTypecn.nuist.tlias.pojp.Emp select * from emp where if testname ! null and name ! name like concat(%,#{name},%) /if if testgender ! null and gender #{gender} /if if testbegin ! null and end ! null and entrydate between #{begin} and #{end} /if /where order by update_time desc limit #{start},#{pageSize} /select delete iddelete delete from emp where id in foreach collectionids itemid open( separator, close) #{id} /foreach /delete update idupdate update emp set if testusername ! null and username ! username #{username} /if if testname ! null and name ! name #{name} /if if testgender ! null gender #{gender} /if if testimage ! null and image ! image #{image} /if if testjob ! null job #{job} /if if testentrydate ! null entrydate #{entrydate} /if if testdeptId ! null dept_id #{deptId} /if if testupdateTime ! null update_time #{updateTime} /if /set where id #{id} /update /mapper动态 SQL灵活构建查询