学习要求
良好的java基础, 熟悉SpringBoot框架,熟悉Mybatis框架
教程目标
了解并掌握MyBatis-Plus常用注解的使用
视频教程
常用注解
@TableName
作用:默认情况下,实体名与表名一致,当不一致时,使用该注解显示指定表名
核心属性:value
案例:
@TableName("t_employee")
public class Employee {
//.....
}
@TableField
作用:默认情况下,实体属性名与列名一致,当不一致时,使用该注解显示指定列名
核心属性:value, exist
案例:
public class Employee {
@TableField(value="employename")
private String name;
}
如果实体类中有多余的属性,且没有跟表中某一列映射,此时需要使用exist属性进行排除,这样mybatis-plus在拼接SQL时,放弃这个属性的解析
public class Employee {
@TableField(exist = false)
private Department dept;
}
@TableId
作用:默认情况下,没有明确指定表的主键,使用雪花算法生成一个唯一的long类型的id
核心属性:value, type
案例:
public class Employee {
@TableId(value="id", type=IdType.AUTO)
private Long id;
}
IdType的类型有:
IdType.AUTO :数据库ID自增
IdType.NONE :无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)
IdType.INPUT :insert前自行set主键值
IdType.ASSIGN_ID :分配ID(主键类型为Number(Long和Integer)或String)(since 3.3.0),使用接口IdentifierGenerator的方法nextId(默认实现类为DefaultIdentifierGenerator雪花算法)
IdType.ASSIGN_UUID :分配UUID,主键类型为String(since 3.3.0),使用接口IdentifierGenerator的方法nextUUID(默认default方法)
@Version
作用:只有涉及到乐观锁操作时使用
核心属性:value
案例:
1>在实体类上定义一个作为乐观锁操作的version字段
public class Employee {
@Version
private int version;
}
此时表中应该有一个与之对应的列,version
2>配置类中配置支持拦截器乐观锁
@Bean
public MybatisPlusInterceptor optimisticLockerInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return interceptor;
}
3>正常执行更新方法
@Test
public void testUpdate(){
Employee employee = new Employee();
employee.setId(1418059280658907137L);
employee.setAdmin(1);
employee.setAge(18);
employee.setDeptId(1L);
employee.setEmail("zhangsan@163.com");
employee.setName("zhangxiaosan");
employee.setPassword("111");
employeeMapper.updateById(employee);
}
观察打印出来的SQL
UPDATE employee SET name=?, password=?, email=?, age=?, admin=?, dept_id=?, version=? WHERE id=? AND version=?
mybatis-plus会自动讲乐观锁逻辑加载到sql中
@TableLogic
作用:逻辑删除注解,一般开发不建议硬删除数据(从数据库删除),建议使用软删除(数据不删除仅仅改数据状态,列表时做数据过滤)
核心属性:value, delval
案例:
1>在实体类中定义一个控制删除的属性
public class Employee {
@TableLogic(value = "1", delval = "0")
private int del;
}
value:表示未删除的数据状态
delval:表示删除之后的数据状态
此时表中应该有一个与之对应的列,del
2>正常执行删除方法
@Test
public void testDelete(){
employeeMapper.deleteById(1L);
}
原先删除语法被转行成更新语法:
UPDATE employee SET del=0 WHERE id=? AND del=1
除了上的几个常用的注解,还有几个不常用:@EnumValue @OrderBy @KeySequence @InterceptorIgnore 等,这些大家可以研究一下。
到这,MyBatis-Plus2-常用注解就介绍完了