1. 注解使用
mybatis-plus提供了 ·@TableName·, @TableId, @TableField, @TableLogic 四种注解,其含义分别为:
@TableName("SPF_Require_Vehicle") 用于声明当前class所对应数据库中的表,如果class的名字和表的名字完全相同,则不需要添加该注解,如果不一样,则需要用该注解进行声明。
@TableId(value = "SPF_UID", type = IdType.AUTO) 用于声明主键, value指定数据库中主键的名称,type为主键的生成类型,支持 Assign(雪花算法,java字段需要是Long)、Auto(数据库字段需要声明为auto_increment), uuid
@TableField("SPF_Name") 用于声明当前字段对应的表中的字段
@TableLogic(value = "0", delval = "1") 用于软删除,value是默认值,delval表示软删除后的值。
@TableName("SPF_Require_Vehicle")
@Data
public class Employee {/*** 指定主键名称为SPF_uid, 类型为自增,即数据库的字段必须是auto_increment*/@TableId(value = "SPF_UID", type = IdType.AUTO)private Long id;/*** 指定数据库中对应的字段是 Part_PartSap*/@TableField("Part_PartSap")private String partSap;@TableField("Part_PlateSap")private String plateSap;@TableField("SPF_Name")private String name;/*** 逻辑删除*/@TableLogic(value = "0", delval = "1")@TableField("IsActvie")private Boolean active;
}
2. IService使用
2.1 批量插入
boolean saveBatch(Collection<T> entityList, int batchSize);
@Testpublic void baseBatchInsertTest() {List<Employee> list = new ArrayList<>();for (int i = 20; i < 30; i++) {Employee employee = new Employee();employee.setName("zhagnsan" + i);employee.setPartSap("123425-" + i);employee.setPlateSap("312342-" + i);list.add(employee);}// 批量插入,service提供了两个函数,可以带第二个参数,也可以不带,不带的情况下默认是1000// 批量插入实际也是一条一条的插入,不同的是底层启动了同一个session,插入完成后关闭,不需要每次都开启关闭this.service.saveBatch(list, 10);}
2.2 批量修改插入
如果主键Id已经在表中存在则修改,如果不存在则插入一条新数据
@Testpublic void testBatchInsertOrUpdate() {List<Employee> list = new ArrayList<>();Employee e1 = new Employee();// 1L已经存在,会指定updatee1.setId(1L);// 只添加了一个字段,也就是只修改一个字段e1.setName("车轱辘");Employee e2 = new Employee();// id在表中不存在,则新增e2.setId(50L);e2.setName("车顶");e2.setPartSap("123142314-00");e2.setPlateSap("423414-09");list.add(e1);list.add(e2);this.service.saveOrUpdateBatch(list,2);}