mybatis 乐观锁 加一个注解就行 @Version
@Version
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Version {
Class<? extends NextVersion> nextVersion() default DefaultNextVersion.class;
}
说明:可被注解的字段类型为Integer、Long、Timestamp
DefaultNextVersion
public class DefaultNextVersion implements NextVersion {
public DefaultNextVersion() {
}
public Object nextVersion(Object current) throws VersionException {
if (current == null) {
throw new VersionException("当前版本号为空!");
} else if (current instanceof Integer) {
return (Integer)current + 1;
} else if (current instanceof Long) {
return (Long)current + 1L;
} else if (current instanceof Timestamp) {
return new Timestamp(System.currentTimeMillis());
} else {
throw new VersionException("默认的 NextVersion 只支持 Integer, Long 和 java.sql.Timestamp 类型的版本号,如果有需要请自行扩展!");
}
}
}
示例
pojo 层
@Table(name = "student")
public class Student implements Serializable {
@Id
@GeneratedValue(generator = "JDBC")
private Integer id;
private String name;
private Integer age;
@Version
private Integer version=0;
。。。。
}
controller 层
@RestController
public class StudentController {
@Autowired
private StudentMapper studentMapper;
@RequestMapping("/save")
public String save(){
Student student=new Student();
student.setId(1);
student.setName("瓜田李下");
student.setAge(23);
studentMapper.insert(student);
return "success";
}
@RequestMapping("/update")
public Student update(){
Student student=studentMapper.selectByPrimaryKey(1);
student.setAge(18);
System.out.println(studentMapper.updateByPrimaryKey(student));
return studentMapper.selectByPrimaryKey(1);
}
}
原文链接:https://blog.csdn.net/weixin_43931625/article/details/100876279