基于BaseMapper的crud
- 通用 CRUD 封装
BaseMapper接口, - Mybatis-Plus 启动时,自动解析
实体表关系映射转换为 Mybatis 内部对象注入容器,内部包含常见的单表操作
insert
java
"插入一条记录"
T 就是要插入的实体对象
默认主键生成策略为雪花算法(后面讲解)
int insert(T entity);
| 类型 | 参数名 | 描述 |
|---|---|---|
| T | entity | 实体对象 |
关键注意事项
- 插入时,如果实体字段值为
null,
MyBatis-Plus 会忽略该字段,
数据库中对应列,会按默认值填充(如null或数据库设置的默认值); - 雪花算法生成的ID是全局唯一的,适合分布式系统,无需依赖数据库自增;
- 若,数据库表字段 和 实体属性名 不一致,需用
@TableField(value = "数据库列名")映射。
总结
insert(T entity)方法返回受影响的行数,插入成功返回1,失败返回0;- 主键生成策略由实体类
@TableId的type决定,
默认是雪花算法(IdType.ASSIGN_ID) - 插入完成后,实体对象的
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
}