Mybatis-Plus通用Mapper CRUD之insert添加
BaseMapper介绍
Mybatis-Plus框架的BaseMapper给我们提供了常用的CRUD接口,我们可以点进接口看下:

BaseMapper提供了我们CRUD的所有接口方法;
我们用insert方法来添加数据吧
/** * 插入一条记录 * * @param entity 实体对象 */ int insert(T entity);
这个是BaseMapper提供的insert方法,参数是实体类型,返回值是操作的记录条数(比如添加了一条数据,返回的就是1,删除了5条数据返回的就是5,更新了0条数据,返回就是0);
我们写一个测试方法:
@Test
public void insert(){
Department department=new Department();
department.setName("测试名称2");
department.setRemark("测试备注");
departmentMapper.insert(department);
}运行报错:

具体报错信息:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: Could not set property 'id' of 'class com.java1234.entity.Department' with value '1293142150845599745' Cause: java.lang.IllegalArgumentException: argument type mismatch
默认的id是 long类型 ,所以转换报错,这里的话 我们需要配置下主键策略;
@TableId注解方式配置主键策略
实体里注解配置:
@TableId(type = IdType.AUTO)
private Integer id; // 编号
这里的IdType枚举,我们点进去看看:
package com.baomidou.mybatisplus.annotation;
import lombok.Getter;
/**
* 生成ID类型枚举类
*
* @author hubin
* @since 2015-11-10
*/
@Getter
public enum IdType {
/**
* 数据库ID自增
*/
AUTO(0),
/**
* 该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)
*/
NONE(1),
/**
* 用户输入ID
* <p>该类型可以通过自己注册自动填充插件进行填充</p>
*/
INPUT(2),
/* 以下3种类型、只有当插入对象ID 为空,才自动填充。 */
/**
* 分配ID (主键类型为number或string),
* 默认实现类 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(雪花算法)
*
* @since 3.3.0
*/
ASSIGN_ID(3),
/**
* 分配UUID (主键类型为 string)
* 默认实现类 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(UUID.replace("-",""))
*/
ASSIGN_UUID(4),
/**
* @deprecated 3.3.0 please use {@link #ASSIGN_ID}
*/
@Deprecated
ID_WORKER(3),
/**
* @deprecated 3.3.0 please use {@link #ASSIGN_ID}
*/
@Deprecated
ID_WORKER_STR(3),
/**
* @deprecated 3.3.0 please use {@link #ASSIGN_UUID}
*/
@Deprecated
UUID(4);
private final int key;
IdType(int key) {
this.key = key;
}
}我们设置成AUTO也就是值是0 自增;
然后重启执行测试方法,发现已经插入成功了;
这种方式对代码是具有侵入性的;不建议使用;
全局配置主键策略
application.yml:
mybatis-plus: global-config: db-config: id-type: 0
一次配置,到处有效;省心省力;以后就用这种啦;
实体与表名映射
@TableName("t_department")
实体Department默认找的表是department,
我们前面加了@TableName("t_department")来映射,比较麻烦;
我们可以通过全局来同意配置加前缀,通过table-prefix
mybatis-plus: global-config: db-config: id-type: 0 table-prefix: t_
一次配置,到处有效;省心省力;以后就用这种啦;
insert方法返回值
insert返回的是操作的记录条数,比如添加了一条数据,返回的就是1,删除了5条数据返回的就是5,更新了0条数据,返回就是0
所以我们可以通过返回值判断执行情况:
@Test
public void insert(){
Department department=new Department();
department.setName("测试名称2");
department.setRemark("测试备注");
int affectRows=departmentMapper.insert(department);
if(affectRows>0){
System.out.println("插入成功");
}else{
System.out.println("插入失败");
}
}
执行下:
插入成功
获取插入数据的主键id值
以前用Mybatis插入后获取主键id比较麻烦,得额外配置;
mybatis-plus的话,实体id自动更新为主键值;
@Test
public void insert(){
Department department=new Department();
department.setName("测试名称2");
department.setRemark("测试备注");
int affectRows=departmentMapper.insert(department);
if(affectRows>0){
System.out.println("插入成功");
}else{
System.out.println("插入失败");
}
System.out.println("主键是:"+department.getId());
}
执行:
插入成功
主键是:9