以下内容参考尚硅谷的https://www.bilibili.com/video/BV1y7411y7am视频
ALTER TABLE USER ADD COLUMN version INT;
同时要添加@Version注解
这里同时使用了@TableField,等会在插入数据时,给其版本赋予初值
@Version
@TableField(fill = FieldFill.INSERT)
private Integer version;
注意添加 @Bean注解,否则插件不会生效
@Configuration
@MapperScan("com.nslt.mpdemo10101.mapper")
public class MyConfig {
//乐观锁插件
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor(){
return new OptimisticLockerInterceptor();
}
}
给version赋予初值1
this.setFieldValByName("version",1,metaObject);
执行下面插入语句
@Test
public void insertUser3(){
User user = new User();
user.setName("曹操");
user.setAge(42);
user.setEmail("[email protected]");
int insert = userMapper.insert(user);
if (insert>0){
System.out.println("插入成功");
}else {
System.out.println("插入失败");
}
}
可以看到数据库表中多了一条数据,版本为1
@Test
public void select(){
User user = userMapper.selectById(1280481107959287809L);
System.out.println(user);
}
@Test
public void selectBatch(){
List<User> users = userMapper.selectBatchIds(Arrays.asList(1L, 2L, 3L));
System.out.println(users);
}
@Bean
public PaginationInterceptor paginationInterceptor(){
return new PaginationInterceptor();
}
运行下面语句
@Test
public void selectPage(){
Page<User> page = new Page<>(1,3); //填写第几页和每页几条数据
userMapper.selectPage(page,null);
System.out.println(page.getCurrent()); //当前页
System.out.println(page.getRecords()); //当前页数据
System.out.println(page.getPages()); //总页数
System.out.println(page.getTotal()); //总记录数
System.out.println(page.getSize()); //当前页记录数
System.out.println(page.hasPrevious()); //上一页
System.out.println(page.hasNext()); //下一页
}
结果如下
@Test
public void delete(){
int result = userMapper.deleteById(5L);
if (result>0){
System.out.println("删除成功");
}else {
System.out.println("删除失败");
}
}
@Test
public void deleteBatch(){
int result = userMapper.deleteBatchIds(Arrays.asList(1L, 2L, 3L));
if (result>0){
System.out.println("删除成功");
}else {
System.out.println("删除失败");
}
}
deleted默认值为0,也可以在此处不设置默认值,使用自动填充在插入数据时赋予初值
ALTER TABLE USER ADD COLUMN deleted TINYINT(1) DEFAULT 0;
注意添加@TableLogic注解
@TableLogic
private Integer deleted;
如果想修改逻辑删除时的默认值,可以在application.properties文件中设置
//逻辑删除插件
//在3.1.1之后省略此步骤
@Bean
public ISqlInjector sqlInjector(){
return new LogicSqlInjector();
}
运行下面语句
@Test
public void deleteLogic(){
int result = userMapper.deleteById(1280481107959287809L);
if (result>0){
System.out.println("删除成功");
}else {
System.out.println("删除失败");
}
}
运行结果如下
可以发现deleted字段的值为1
//性能分析插件
@Bean
@Profile({"dev","test"})
public PerformanceInterceptor performanceInterceptor(){
PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
performanceInterceptor.setMaxTime(500); //ms,超过此处设置的ms则sql不执行
performanceInterceptor.setFormat(true); //SQL 是否格式化
return performanceInterceptor;
}
#环境设置:dev、test、prod
spring.profiles.active=dev
运行下面语句
@Test
public void insertUser4(){
User user = new User();
user.setName("曹休");
user.setAge(36);
user.setEmail("[email protected]");
int insert = userMapper.insert(user);
if (insert>0){
System.out.println("插入成功");
}else {
System.out.println("插入失败");
}
}
运行结果如下
可以看到运行时间为55ms
@Test
public void selectWrapper(){
QueryWrapper<User> wrapper = new QueryWrapper<>();
//ge 大于等于; gt 大于; le 小于等于; lt 小于;
wrapper.le("age",60); //表中的列,对应的值
List<User> users = userMapper.selectList(wrapper);
System.out.println(users);
}
wrapper.eq("name","曹操"); //表中的列,对应的值
wrapper.like("name","张"); //表中的列,对应的值
wrapper.orderByDesc("age"); //表中的列
wrapper.last("limit 2"); //添加要追加的sql语句
注意查询是闭区间,包含起始值和结束值
wrapper.between("age",42,70); //表中的列,起始值,结束值
wrapper.select("name","age"); //表中的列1,列2,,,
c("age"); //表中的列
wrapper.last("limit 2"); //添加要追加的sql语句
注意查询是闭区间,包含起始值和结束值
wrapper.between("age",42,70); //表中的列,起始值,结束值
wrapper.select("name","age"); //表中的列1,列2,,,