找回密码
 立即注册
首页 业界区 业界 Mybatis使用简述

Mybatis使用简述

澹台吉星 2025-11-9 21:45:00
什么是 MyBatis?

MyBatis 是一款优秀的 Java 持久层框架,它通过 XML 或注解的方式将 Java 对象与数据库中的记录进行映射。与传统的 JDBC 相比,MyBatis 极大地简化了数据库操作代码,让开发者能够更专注于业务逻辑而不是繁琐的数据访问细节。
MyBatis 的核心特点:
简化了 JDBC 的复杂操作
支持动态 SQL,能够根据条件灵活构建查询语句
提供了强大的映射机制,支持复杂的对象关系映射
与 Spring 等主流框架无缝集成
学习曲线平缓,配置灵活
 
为什么选择 MyBatis?

与其它持久层框架的对比

相比于 Hibernate 这样的全自动 ORM 框架,MyBatis 提供了更多的灵活性。MyBatis 允许你直接编写原生 SQL,这在处理复杂查询或需要优化 SQL 性能时具有明显优势。
主要优势:
灵活性:可以编写原生 SQL,灵活控制查询逻辑
性能优化:直接控制 SQL 语句,便于性能调优
简化开发:减少了大量 JDBC 模板代码
易于学习:学习曲线平缓,上手快速
与 Spring 集成良好:可以无缝集成到 Spring 框架中
 
 
环境搭建

创建springboot项目
1.png

 导入mybatis起步依赖、mysql驱动及其他需求(首次使用下载时间会较长)
2.png

 连接数据源
3.png

 
4.png

 建立数据库
范例代码:
  1. -- 创建数据库
  2. CREATE DATABASE IF NOT EXISTS demo;
  3. USE demo;
  4. -- 创建员工表
  5. CREATE TABLE employees (
  6.                            id INT PRIMARY KEY AUTO_INCREMENT,
  7.                            employee_id VARCHAR(20) UNIQUE NOT NULL,
  8.                            name VARCHAR(50) NOT NULL,
  9.                            gender ENUM('男', '女') NOT NULL,
  10.                            age INT,
  11.                            department VARCHAR(50) NOT NULL,
  12.                            position VARCHAR(50) NOT NULL,
  13.                            salary DECIMAL(10,2),
  14.                            hire_date DATE NOT NULL,
  15.                            email VARCHAR(100),
  16.                            phone VARCHAR(20),
  17.                            address VARCHAR(200),
  18.                            created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  19. );
  20. -- 插入示例数据
  21. INSERT INTO employees (employee_id, name, gender, age, department, position, salary, hire_date, email, phone, address)
  22. VALUES
  23. ('EMP001', '张三', '男', 28, '技术部', '软件工程师', 15000.00, '2020-03-15', 'zhangsan@company.com', '13800138001', '北京市海淀区'),
  24. ('EMP002', '李四', '女', 32, '人力资源部', 'HR经理', 12000.00, '2018-06-20', 'lisi@company.com', '13800138002', '北京市朝阳区'),
  25. ('EMP003', '王五', '男', 35, '财务部', '财务主管', 18000.00, '2016-09-10', 'wangwu@company.com', '13800138003', '北京市西城区'),
  26. ('EMP004', '赵六', '女', 26, '市场部', '市场专员', 8000.00, '2021-01-08', 'zhaoliu@company.com', '13800138004', '北京市东城区'),
  27. ('EMP005', '钱七', '男', 30, '技术部', '高级工程师', 20000.00, '2019-11-25', 'qianqi@company.com', '13800138005', '北京市丰台区'),
  28. ('EMP006', '孙八', '女', 29, '销售部', '销售经理', 16000.00, '2020-07-30', 'sunba@company.com', '13800138006', '北京市石景山区'),
  29. ('EMP007', '周九', '男', 27, '技术部', '前端开发', 13000.00, '2021-03-12', 'zhoujiu@company.com', '13800138007', '北京市通州区'),
  30. ('EMP008', '吴十', '女', 33, '行政部', '行政主管', 11000.00, '2017-05-18', 'wushi@company.com', '13800138008', '北京市昌平区'),
  31. ('EMP009', '郑十一', '男', 31, '财务部', '会计', 10000.00, '2019-08-22', 'zhengshiyi@company.com', '13800138009', '北京市大兴区'),
  32. ('EMP010', '王芳', '女', 25, '市场部', '市场助理', 7000.00, '2022-02-14', 'wangfang@company.com', '13800138010', '北京市房山区');
复制代码
范例效果:
5.png

 若已有数据库,则直接连接
6.png

 在application.properties文件中配置数据库连接信息:
7.png
  1. spring.application.name=demo
  2. #驱动类名称
  3. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  4. #数据库连接的url
  5. spring.datasource.url=jdbc:mysql://localhost:3306/demo
  6. #连接数据库的用户名
  7. spring.datasource.username=root
  8. #连接数据库的密码
  9. spring.datasource.password=1234
复制代码
实体类设计

在 MyBatis 中,实体类对应数据库中的表结构。良好的实体类设计是使用 MyBatis 的基础。
 
  1. @Data
  2. @NoArgsConstructor
  3. @AllArgsConstructor
  4. public class Emp {
  5.     private Integer id; //ID
  6.     private String username; //用户名
  7.     private String password; //密码
  8.     private String name; //姓名
  9.     private Short gender; //性别 , 1 男, 2 女
  10.     private String image; //图像url
  11.     private Short job; //职位 , 1 班主任 , 2 讲师 , 3 学工主管 , 4 教研主管 , 5 咨询师
  12.     private LocalDate entrydate; //入职日期
  13.     private Integer deptId; //部门ID
  14.     private LocalDateTime createTime; //创建时间
  15.     private LocalDateTime updateTime; //修改时间
  16. }
复制代码
 
Mapper 接口设计

Mapper 接口定义了数据访问的方法,可以使用注解完成接口的实现。(例如实例代码中“分页查询”“查询数据总数”“新增员工”“根据id查询员工信息”这些功能的实现)
 
  1. @Mapper
  2. public interface EmpMapper {
  3.     //分页查询
  4.     @Select("select * from emp limit #{start},#{pageSize}")
  5.     List<Emp> page(Integer start, Integer pageSize);
  6.     //条件分页查询
  7.     List<Emp> list(Integer start, Integer pageSize,String name, Short gender, LocalDate begin, LocalDate end);
  8.     //查询数据总数
  9.     @Select("select count(*) from emp")
  10.     Long count();
  11.     //批量删除员工
  12.     void delete(List<Integer> ids);
  13.     //新增员工
  14.     @Insert("insert into emp(username, name, gender, image, job, entrydate, dept_id, create_time, update_time) " +
  15.             "value(#{username},#{name},#{gender},#{image},#{job},#{entrydate},#{deptId},#{createTime},#{updateTime})")
  16.     void save(Emp emp);
  17.     //根据id更新员工信息
  18.     void update(Emp emp);
  19.     //根据id查询员工信息
  20.     @Select("select * from emp where id = #{id}")
  21.     Emp getById(Integer id);
  22. }
复制代码
 
Mapper XML 映射文件

XML 映射文件是 MyBatis 的核心,它定义了 SQL 语句和结果映射。在sql语句较复杂的情况下,不建议使用注解实现mapper接口(这样会使得代码显得杂乱不易阅读),而是在XML映射文件中编写sql语句。需要注意的是,XML映射文件的路径名称必须于mapper接口路径名称相同。(EmpMapper接口文件路径名称为:cn.nuist.tlias.mapper.EmpMapper,XML映射文件路径名称也为:cn.nuist.tlias.mapper.EmpMapper)
 
8.png

 mapper接口中的“分页条件查询”“批量删除员工信息”和“根据id更新员工信息”功能在XML映射文件中实现:
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3.         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4.         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="cn.nuist.tlias.mapper.EmpMapper">
  6.     <select id="list" resultType="cn.nuist.tlias.pojp.Emp">
  7.         select *
  8.         from emp
  9.         <where>
  10.             <if test="name != null and name != ''">
  11.                 name like concat('%',#{name},'%')
  12.             </if>
  13.             <if test="gender != null">
  14.                 and gender = #{gender}
  15.             </if>
  16.             <if test="begin != null and end != null">
  17.                 and entrydate between #{begin} and #{end}
  18.             </if>
  19.         </where>
  20.         order by update_time desc
  21.         limit #{start},#{pageSize}
  22.     </select>
  23.     <delete id="delete">
  24.         delete
  25.         from emp
  26.         where id in
  27.         <foreach collection="ids" item="id" open="(" separator="," close=")">
  28.             #{id}
  29.         </foreach>
  30.     </delete>
  31.    
  32.     <update id="update">
  33.         update emp
  34.         <set>
  35.             <if test="username != null and username != ''">
  36.                 username = #{username}
  37.             </if>
  38.             <if test="name != null and name != ''">
  39.                 name = #{name}
  40.             </if>
  41.             <if test="gender != null">
  42.                 gender = #{gender}
  43.             </if>
  44.             <if test="image != null and image != ''">
  45.                 image = #{image}
  46.             </if>
  47.             <if test="job != null">
  48.                 job = #{job}
  49.             </if>
  50.             <if test="entrydate != null">
  51.                 entrydate = #{entrydate}
  52.             </if>
  53.             <if test="deptId != null">
  54.                 dept_id = #{deptId}
  55.             </if>
  56.             <if test="updateTime != null">
  57.                 update_time = #{updateTime}
  58.             </if>
  59.         </set>
  60.         where id = #{id}
  61.     </update>
  62. </mapper>
复制代码
动态 SQL:灵活构建查询

MyBatis 的强大特性之一就是动态 SQL,它允许你根据条件动态生成 SQL 语句。
 
 :根据条件包含 SQL 片段
 
, , :实现类似 switch-case 的逻辑
 
:智能处理 WHERE 条件,自动去除多余的 AND/OR
 
:用于 UPDATE 语句,智能处理 SET 子句
 
:遍历集合,常用于 IN 条件或批量操作
 
:更灵活的字符串修剪功能
 
:创建变量并在当前上下文使用
 

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

2025-11-25 07:14:24

举报

您需要登录后才可以回帖 登录 | 立即注册