MyBatis-plus 快速入门

提示:MyBatis-Plus(MP)是一个 MyBatis的增强版

文章目录


前言

提示:这里可以添加本文要记录的大概内容:

使用MybatisPlus的基本步骤

pom.xml文件引入依赖

1、引入MybatisPlus依赖代替Mybatis依赖

MyBatisPlus官方提供了starter,其中集成了MybatisMybatisPlus的所有功能,并且实现了自动装配效果。因此可以用MybatisPlusstarter代替Mybatisstarter

xml 复制代码
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.3.1</version>
</dependency>

2、定义Mapper接口并继承BaseMapper

自定义的Mapper继承MybatisPlus提供的BaseMapper接口:

javascript 复制代码
public interface UserMapper extends BaseMapper<User> {
    // 继承 BaseMapper 后,无需手动编写 CRUD 方法
}

单表的增删改查可以不用写SQL语句、mapper 接口

原来mapper接口:

java 复制代码
public interface UserMapper {
    void saveUser(User user); // 保存用户
    void deleteUser(Long id); // 根据 ID 删除用户
    void updateUser(User user); // 更新用户信息
    User queryUserById(@Param("id") Long id); // 根据 ID 查询用户
    List<User> queryUserByIds(@Param("ids") List<Long> ids); // 根据 ID 列表批量查询用户
}

继承后:注意泛型为实体类的类型

java 复制代码
public interface UserMapper extends BaseMapper<User> {
    						                 //实体类
    void saveUser(User user);    // 对应 BaseMapper.insert()
    void deleteUser(Long id);    // 对应 BaseMapper.deleteById()
    void updateUser(User user);  // 对应 BaseMapper.updateById()
    User queryUserById(@Param("id") Long id);          // 对应 BaseMapper.selectById()
    List<User> queryUserByIds(@Param("ids") List<Long> ids);  // 对应 BaseMapper.selectBatchIds()
}

他是怎么知道哪张表,哪些字段呢

MyBatisPlus通过扫描实体类,并基于反射获取实体类信息作为数据库表信息。

遵循MP约定:

默认以类名驼峰转下划线作为表名

默认把名为id的字段作为主键

默认把变量名驼峰转下划线作为表的字段名,不遵循约定就要用注解

不符合约定的要自己定义表名、字段名

3、实体类注解

三个注解的核心用途和区别:

注解 作用 常见场景
@TableName 指定实体类对应的数据库表名 实体类名与表名不一致时
@TableId 指定主键字段及其生成策略 主键字段名与列名不一致或需要指定生成策略
@TableField 指定普通字段的映射关系或忽略字段 字段名与列名不一致或需要忽略某些字段

通过合理使用这些注解,可以轻松实现实体类与数据库表之间的映射,同时满足各种复杂的业务需求。

java 复制代码
@TableName("tb_user") // 指定数据库表名为 "tb_user"
public class User {

    @TableId(type = IdType.ASSIGN_ID) // 雪花算法生成主键
    private Long id;

    @TableField("username") // 数据库列名为 "username",映射到实体类的 name 字段
    private String name;

    @TableField("is_married") // 数据库列名为 "is_married",映射到实体类的 isMarried 字段
    private Boolean isMarried;

    @TableField("`order`") // 数据库列名为 "order"(避免与 SQL 关键字冲突),需要使用反引号包裹
    private Integer order;

    @TableField(exist = false) // 非数据库字段,不映射到数据库
    private String address;
}

IdType 枚举

  • AUTO:数据库自增长
  • INPUT :通过 set 方法自行输入主键值,需手动指定主键。
  • ASSIGN_ID :分配 ID,通过 IdentifierGenerator 接口的 nextId 方法生成主键,默认实现类为 DefaultIdentifierGenerator,基于雪花算法生成唯一 ID。

使用 @TableField 的常见场景

  1. 成员变量名与数据库字段名不一致

    当实体类的成员变量名与数据库表中的字段名不一致时,可以使用 @TableField 注解来指定数据库字段名。

  2. 成员变量名以 is 开头,且是布尔值

    如果实体类的布尔类型字段以 is 开头,而数据库字段名通常没有 is 前缀,可以通过 @TableField 映射字段名。

  3. 成员变量名与数据库关键字冲突

    如果实体类的字段名与 SQL 关键字冲突(如 ordergroup 等),需要使用 @TableField 注解,并通过反引号包裹字段名以避免语法错误。

  4. 成员变量不是数据库字段

    如果实体类中某些字段不需要映射到数据库表(如临时字段或计算字段),可以使用 @TableField(exist = false) 忽略该字段。


IdType的常见类型有哪些?

类型 主键生成方式 适用场景
AUTO 数据库自增 数据库支持自增主键(如 MySQL)
ASSIGN_ID MyBatis-Plus 雪花算法生成 全局唯一 ID,适用于非自增主键
INPUT 手动输入 主键值由业务逻辑生成
ASSIGN_UUID MyBatis-Plus 生成 UUID 字符串类型主键,适用于分布式系统
NONE 未设置主键生成策略 主键生成逻辑由外部处理

4、根据需要添加配置

MyBatisPlus的配置项继承了MyBatis原生配置和一些自己特有的配置

相关推荐
月亮不月亮5 分钟前
月亮商场购物打折Java
java·eclipse
guozhetao15 分钟前
【ST表、倍增】P7167 [eJOI 2020] Fountain (Day1)
java·c++·python·算法·leetcode·深度优先·图论
技术思考者15 分钟前
基础很薄弱如何规划考研
java·经验分享·考研
●VON38 分钟前
重生之我在暑假学习微服务第二天《MybatisPlus-下篇》
java·学习·微服务·架构·mybatis-plus
老华带你飞39 分钟前
口腔助手|口腔挂号预约小程序|基于微信小程序的口腔门诊预约系统的设计与实现(源码+数据库+文档)
java·数据库·微信小程序·小程序·论文·毕设·口腔小程序
hqxstudying1 小时前
J2EE模式---服务层模式
java·数据库·后端·spring·oracle·java-ee
GM_8281 小时前
【最新最完整】SpringAI-1.0.0开发MCP Server,搭建MCP Client 实战笔记(进阶+详细+完整代码)
java·后端·ai编程·springai·mcp
都叫我大帅哥1 小时前
Java DelayQueue:时间管理大师的终极武器
java
秋千码途1 小时前
小架构step系列27:Hibernate提供的validator
java·spring·架构·hibernate
都叫我大帅哥1 小时前
TOGAF迁移规划阶段全解密:从菜鸟到达人的通关秘籍
java