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 自增;
然后重启执行测试方法,发现已经插入成功了;
这种方式对代码是具有侵入性的;不建议使用;
全局配置主键策略
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
mybatis-plus视频教程
感谢各位兄弟姐妹关注,锋哥为了大伙能更深刻的掌握mybatis-plus的原理和应用,专门录制了一期视频教程。主要以IDEA开发工具,springboot主流框架,mysql数据库,来讲解mybatis-plus,希望小伙伴们快速的掌握。
纸上得来终觉浅,绝知此事要躬行。
需要多实战,多思考
B站视频教程在线地址:
https://www.bilibili.com/video/BV1KV411U7pH
关于锋哥
【作者】:锋哥 【微信号】:java9568 (加好友,请备注CSDN)
【公众号】:java1234。欢迎大家关注~
【作者简介】:江苏师范大学计算机系,Java资深老司机,先后国网电力,一线很多家小公司撸码过;目前老家南通开工作室创业,目前房子,车子,老婆,孩子都搞定;希望和各位读者成为朋友;一起探讨java技术和java创业;