1.@TableName
- 描述:表名注解,标识实体类对应的数据库表
- 使用位置:实体类
@TableName("sys_user")
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}
2.@TableId
- 描述:主键注解
- 使用位置:实体类主键字段
TableId注解的value属性用于指定主键的字段
TableId注解的type属性设置主键生成策略
@TableName("sys_user")
public class User {
@TableId
private Long id;
private String name;
private Integer age;
private String email;
}
3.@TableField
- 描述:指定属性对应的字段名
@TableName("sys_user")
public class User {
@TableId
private Long id;
@TableField("nickname")
private String name;
private Integer age;
private String email;
}
4.@Version
- 描述:乐观锁注解、标记 @Verison 在字段上
乐观锁和悲观锁的原理:
(1)乐观锁
反之,总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机制和CAS算法实现。乐观锁适用于多读的应用类型,这样可以提高吞吐量。在Java中java.util.concurrent.atomic包下面的原子变量类就是使用了乐观锁的一种实现方式CAS实现的。
(2)悲观锁
顾名思义,就是比较悲观的锁,总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Java中synchronized和ReentrantLock等独占锁就是悲观锁思想的实现。
5.@EnumValue
- 描述:普通枚举类注解(注解在枚举字段上)
6.@TableLogic
- 描述:表字段逻辑处理注解(逻辑删除)