mybatis-plus 基于 Mapper接口的 insert

基于BaseMapper的crud

  • 通用 CRUD 封装 BaseMapper接口,
  • Mybatis-Plus 启动时,自动解析实体表关系映射转换为 Mybatis 内部对象注入容器,内部包含常见的单表操作

insert

java 复制代码
"插入一条记录"

T 就是要插入的实体对象

默认主键生成策略为雪花算法(后面讲解)

int insert(T entity);
类型 参数名 描述
T entity 实体对象



关键注意事项

  1. 插入时,如果实体字段值为 null
    MyBatis-Plus 会忽略该字段,
    数据库中对应列,会按默认值填充(如 null 或数据库设置的默认值);
  2. 雪花算法生成的ID是全局唯一的,适合分布式系统,无需依赖数据库自增;
  3. 若,数据库表字段 和 实体属性名 不一致,需用 @TableField(value = "数据库列名") 映射。

总结

  1. insert(T entity) 方法返回受影响的行数,插入成功返回1,失败返回0;
  2. 主键生成策略由实体类 @TableIdtype 决定,
    默认是雪花算法(IdType.ASSIGN_ID)
  3. 插入完成后,实体对象的 id 字段会被自动回填,可直接获取生成的主键值。

insert 举例详解

前置准备

已定义的 User 实体类(稍补充主键策略说明):

java 复制代码
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

@Data
@TableName("user") // 对应数据库user表
public class User {
    "主键策略:"
	    // 1. IdType.AUTO:数据库自增(需先给数据库表id字段设置自增)
	    // 2. IdType.ASSIGN_ID(默认):雪花算法生成Long型ID
	    // 3. IdType.INPUT:手动输入主键值

    @TableId(type = IdType.AUTO) 
    private Long id; // 用户ID
    private String username; // 用户名
    private Integer age; // 年龄
    private String email; // 邮箱
}

UserMapper 接口(继承 BaseMapper<User> 即可使用 insert 方法):

java 复制代码
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper extends BaseMapper<User> {
    "无需手动编写insert方法,BaseMapper已内置"
}

insert(T entity) 方法使用示例

示例1:基础使用(数据库自增主键)

适用于主键为数据库自增的场景(对应 @TableId(type = IdType.AUTO)):

java 复制代码
import org.springframework.stereotype.Service;
import javax.annotation.Resource;

@Service
public class UserService {
    @Resource
    private UserMapper userMapper;

    /**
     * 插入一条用户记录(数据库自增主键)
     */
    public void insertUser() {
        // 1. 创建实体对象,无需设置id(自增策略下会由数据库自动生成)
        User user = new User();
        user.setUsername("zhangsan"); // 设置用户名
        user.setAge(25); // 设置年龄
        user.setEmail("zhangsan@example.com"); // 设置邮箱

        // 2. 调用insert方法,返回值为「受影响的行数」(插入成功返回1,失败返回0)
        int affectedRows = userMapper.insert(user);
        
        // 3. 关键:插入后,实体对象的id会被**自动回填**
        System.out.println("插入受影响行数:" + affectedRows); // 输出:1
        System.out.println("插入后生成的主键ID:" + user.getId()); // 输出:数据库自增的ID(如1、2、3...)
    }
}
示例2:默认雪花算法主键(IdType.ASSIGN_ID)

如果将 User 实体的主键策略改为默认的雪花算法:

java 复制代码
// 修改User类的主键注解
@TableId(type = IdType.ASSIGN_ID) 
private Long id;

调用逻辑不变,但主键生成规则不同:

java 复制代码
public void insertUserWithSnowflakeId() {
    User user = new User();
    user.setUsername("lisi");
    user.setAge(30);
    user.setEmail("lisi@example.com");

    int affectedRows = userMapper.insert(user);
    System.out.println("插入受影响行数:" + affectedRows); // 输出:1
    // 雪花算法生成的Long型ID(如175689876543219876)
    System.out.println("雪花算法生成的主键ID:" + user.getId()); 
}
示例3:手动输入主键(IdType.INPUT)

适用于需要自定义主键值的场景:

java 复制代码
// 修改User类的主键注解
@TableId(type = IdType.INPUT) 
private Long id;

调用时需手动设置id:

java 复制代码
public void insertUserWithCustomId() {
    User user = new User();
    user.setId(100L); // 手动指定主键ID
    user.setUsername("wangwu");
    user.setAge(28);
    user.setEmail("wangwu@example.com");

    int affectedRows = userMapper.insert(user);
    System.out.println("插入受影响行数:" + affectedRows); // 输出:1
    System.out.println("手动设置的主键ID:" + user.getId()); // 输出:100
}
相关推荐
Csxyzj5 分钟前
kubernetes集群部署方法
java·linux·kubernetes
SQL-First布道者10 分钟前
全面解构传统持久层框架,拥抱真正的 SQL-First
java·数据库·spring boot·sql·spring·mybatis·spring jdbc
小蒜学长44 分钟前
vue旅游攻略网站(代码+数据库+LW)
java·数据库·vue.js·spring boot·后端·旅游
凤山老林1 小时前
轻量级规则引擎落地:Spring Boot 集成 LiteFlow 实现动态业务编排与热更新
java·spring boot·后端·规则引擎·liteflow
夏贰四1 小时前
管控数据加载调度如何规避任务冲突?数据加载运维监控体系该如何搭建?
java·大数据·运维
山甫aa1 小时前
JavaWeb后端开发学习手册
java·开发语言·数据库·学习·mysql·springboot·web
鱼鳞_1 小时前
热门八股-JVM
java·jvm
ly76891 小时前
XML 从入门到实践:语法、命名空间、XPath、XSD 与 Java 安全解析
xml·java·python
长谷深风1112 小时前
好的 Tool Schema,不是字段越全越好
java·大数据·人工智能·ai agent·agent工作流·智能体设计·ai产品设计
IT 行者2 小时前
用 HiddenHttpMethodFilter 解决浏览器不支持 PUT/DELETE/PATCH 的问题
java·spring