MyBatis Plus 的使用之入门
发布日期:2021-05-14 06:36:39 浏览次数:21 分类:精选文章

本文共 4310 字,大约阅读时间需要 14 分钟。

MyBatis Plus 开源框架介绍

MyBatis Plus 是一个由国内开发人员基于 MyBatis 框架开发的开源工具框架。它的核心理念是“在 MyBatis 的基础上只做增强不做改变”,旨在简化开发流程,提高开发效率。与传统的 ORM 工具(如 JPA)类似,MyBatis Plus 提供了通用的 CRUD 方法和灵活的条件构造能力,使得开发者能够以更高效的方式处理数据库操作。

核心功能概述

MyBatis Plus 的主要功能可以分为以下几个方面:

  • 支持通用 CRUD 操作

    MyBatis Plus 提供了一个通用的 CRUD 操作接口,开发者只需定义 Mapper 接口并继承 BaseMapper 即可无需编写任何接口方法或配置文件,直接调用通用的增删改查方法。

  • 灵活的条件构造器

    通过 EntityWrapper 类,开发者可以轻松构造复杂的 SQL 语句,支持排序、分组、条件拼接等高级查询功能。

  • 强大的代码生成器

    MyBatis Plus 提供了灵活的代码生成功能,支持策略配置和全局配置,能够根据需求自定义生成 Mapper 接口和实体类。

  • Spring Boot 与 MyBatis Plus 整合

    Spring Boot 与 MyBatis Plus 的整合非常简单,因为 MyBatis Plus 是基于 MyBatis 框架设计的。以下是整合的主要步骤:

  • 修改 pom.xml 文件

    在项目依赖管理中添加 MyBatis Plus 的相关依赖。以下是一个示例:

    com.baomidou
    mybatis-plus
    2.3
  • 配置 application.properties

    开启 MyBatis Plus 的驼峰到下划线映射功能,确保属性名和字段名能够正确对应:

    mybatis-plus.configuration.map-underscore-to-camel-case = true
  • 创建数据库表

    定义一个用户表,例如:

    CREATE TABLE user (
    id BIGINT(20) PRIMARY KEY NOT NULL COMMENT '主键',
    name VARCHAR(30) DEFAULT NULL COMMENT '姓名',
    age INT(11) DEFAULT NULL COMMENT '年龄',
    address_id BIGINT(20) DEFAULT NULL COMMENT '家庭住址id',
    create_time DATETIME DEFAULT NULL COMMENT '创建时间'
    ) ENGINE=INNODB CHARSET=UTF8;
  • 创建实体类

    使用 Lombok 的 @Data 注解生成 getter 和 setter 方法,并定义对应的字段:

    @Data
    public class User {
    private Long id;
    private String name;
    private Integer age;
    private Long addressId;
    private Date createTime;
    }
  • 定义 Mapper 接口

    在 DAO 层创建与 User 表对应的 Mapper 接口,并继承 MyBatis Plus 的 BaseMapper

    public interface UserMapper extends BaseMapper
    {
    }
  • 启用扫描注解

    在主应用类中添加 @MapperScan 注解,配置 Mapper 接口的扫描路径:

    @MapperScan("org.example.dao")
    @SpringBootApplication
    public class MyBatisPlusApplication {
    public static void main(String[] args) {
    SpringApplication.run(MyBatisPlusApplication.class, args);
    }
    }
  • 编写测试类

    编写一个测试类,验证 MyBatis Plus 的 CRUD 和条件构造功能是否正常:

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class MyBatisPlusDemoApplicationTests {
    @Resource
    private UserMapper userMapper;
    @Test
    public void selectTest() {
    List
    users = userMapper.selectList(null);
    users.forEach(System.out::println);
    }
    }
  • 常用 CRUD 操作示例

    MyBatis Plus 提供了丰富的 CRUD 操作方法,以下是常用操作的示例:

  • 插入操作

    通过 insert 方法插入新记录:

    User user = new User();
    user.setAge(3);
    user.setAddressId(10L);
    user.setCreateTime(new Date());
    userMapper.insert(user);
    System.out.println("用户id为:" + user.getId());
  • 更新操作

    使用 updateById 方法按 ID 更新记录:

    User user = new User();
    user.setId(1L);
    user.setAge(13);
    userMapper.updateById(user);
  • 查询操作

    • 根据 ID 查询单条记录:

      User user = userMapper.selectById(1L);
    • 根据条件查询单条记录:

      User user = new User();
      user.setId(1L);
      userMapper.selectOne(user);
    • 根据条件查询多条记录:

      Map
      columnMap = new HashMap<>();
      columnMap.put("age", 13);
      List
      users = userMapper.selectByMap(columnMap);
    • 批量查询多条记录:

      List
      idList = new ArrayList<>();
      idList.add(1L);
      idList.add(2L);
      List
      users = userMapper.selectBatchIds(idList);
  • 删除操作

    • 根据 ID 删除记录:

      userMapper.deleteById(1L);
    • 根据条件删除记录:

      Map
      columnMap = new HashMap<>();
      columnMap.put("age", 18);
      userMapper.deleteByMap(columnMap);
    • 批量删除记录:

      List
      idList = new ArrayList<>();
      idList.add(1);
      idList.add(2);
      userMapper.deleteBatchIds(idList);
  • 条件构造器功能示例

    MyBatis Plus 提供了丰富的条件构造器,能够满足多种复杂查询需求。以下是常用条件构造器的示例:

  • allEq 方法

    • 全部等于指定值:

      allEq({ id: 1, name: "老王", age: null })
    • 可选参数控制是否包含 IS NULL:

      allEq({ id: 1, name: "老王", age: null }, false)
  • eq、ne、gt 等基本条件

    • 等于:

      eq("name", "老王")
    • 不等于:

      ne("name", "老王")
    • 大于:

      gt("age", 18)
    • 大于等于:

      ge("age", 18)
  • 范围条件

    • BETWEEN:

      between("age", 18, 30)
    • NOT BETWEEN:

      notBetween("age", 18, 30)
  • LIKE 和 NOT LIKE

    • LIKE:

      like("name", "王")
    • NOT LIKE:

      notLike("name", "王")
  • 高级条件组合

    • OR 和 AND 的嵌套使用:

      eq("id", 1).or().eq("name", "老王")
    • 条件组合:

      and(i -> i.eq("name", "李白").ne("status", "活着"))
  • 排序和分组

    • 分组:

      groupBy("id", "name")
    • 排序:

      orderByAsc("id", "name")
  • SQL 语句拼接

    • 自定义 SQL:

      mysqlMapper.getAllList(Wrappers.
      lambdaQuery().eq(MysqlData::getGroup, 1));
    • 使用注解方式:

      @Select("select * from mysql_data ${ew.customSqlSegment}")
      List
      getAllList(@Param(Constants.WRAPPER) Wrapper wrapper);
    • XML 配置:

  • 注意事项

    • 条件构造器的使用需要谨慎,尤其是 last 方法,避免多次调用导致 SQL 注入风险。
    • MyBatis Plus 提供了灵活的配置方式,开发者可以根据项目需求进行定制和优化。
    上一篇:IDEA插件开发之基础篇
    下一篇:Mysql学习专栏之八(从删除操作分析Mysql中的表收缩)

    发表评论

    最新留言

    做的很好,不错不错
    [***.243.131.199]2025年04月18日 18时16分34秒