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