MyBatisPlus属性自动填充和乐观锁插件+查询删除操作+整合SpringBoot出现问题解决
属性字段自动填充
一、实体类和数据表添加两个字段(属性)
表:create_tiem/update_time
实体类:createTime/updateTime
二、实体类中属性进行注解添加
@TableField(fill=FieldFill.INSERT)
private Date createTime;@TableField(fill=FieldFill.INSERT_UPDATE)
private Date updateTime;
三、创建实现MetaObjectHandler接口的类,并实现两个方法
一个方法添加执行,另一个方法修改执行
@Component
public class MyMetaObjectHandler implements MetaObjectHandler{@Overridepublic void insertFill(MetaObject metaObject){this.setFieldValByName("createTime",new Date(),metaObject);}@Overridepublic void updateFill(MetaObject metaObject){this.setFieldValByName("updateTime",new Date(),metaObject);}
}
乐观锁
一、在表中添加version字段,在实体类中添加version字段(Integer)
二、在实体类进行版本号操作属性上添加注解
@Version
private Integer version;
三、配置乐观锁插件
在启动类,或者单独新建一个config包下创建一个配置类
@Configuration
@MapperScan("com.michael.mapper")
public class MpConfig{@Beanpublic OptimisticLockerInterceptor optimisticLockerInterceptor(){return new OptimisticLockerInterceptor();}
}
============================================================
多个id批量查询
List<User> users = userMapper.selectBatchIds(Arrays.asList(1,2,3));
简单条件查询
Map<String,Object> columnMap = new HashMap<>();
columnMap.put("name","Jack");
columnMap.put("age",20);List<User> users = userMapper.selectByMap(columnMap);
分页查询
①、配置分页插件配置类
@Bean
public PaginationInterceptor paginationInterceptor(){return new PaginationInterceptor();
}
②、编写分页代码,插件Page对象,传入两个对象,当前页和每页记录数
Page<User> page = new Page(1,3);
Page<User> userPage = userMapper.selectPage(page,null);//第二个参数为条件long pages = userPage.getPages();//总页数
long current = userPage.getCurrent();//当前页
List<User> records = userPage.getRecords();//查询数据集合
long tobal = userPage.getTotal();//总记录数
boolean b = userPage.hasNext(); //当前是否有下一页
boolean b1 = userPage.hasPrevious();//当前是否有上一页
逻辑删除
①、数据表添加一个字段boolean类型deleted,实体类添加属性Integer类型deleted
@TableLogic
private Integer deleted;
②、application.properties配置文件中添加
以下配置为默认值,所以该配置可无
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0
条件构造器
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.isNull("name").ge("age",12).isNotNull("email");//构造条件
int result = userMapper.delete(queryWrapper);
//条件查询+分页
@PostMapping("findPageHospSet/{current}/{limit}")//参数:当前页,每页数量
public Result findPageHospSet(@PathVariable long current,@PathVariable long limit,@RequestBody(required=false) HospitalSetQueryVo hospitalSetQueryVo//通过json传递
){//创建page对象Page<HospitalSet> page = new Page<>(current,limit);//构建条件QueryWrapper<HospitalSet> wrapper = new QueryWrapper<>();String hosname = hospitalSetQueryVo.getHosname();String hoscode = hospitalSetQueryVo.getHoscode();if(!StringUtils.isEmpty(hosname)){wrapper.like("hosname",hospitalSetQueryVo.getHosname());}if(!StringUtils.isEmpty(hoscode)){wrapper.eq("hoscode",hosipitalSetQueryVo.getHoscode());}Page<HospitalSet> pageHospitalSet = hospitalSetService.page(page,wrapper);
}
将控制方法的get改为post
参数添加注解@RequestBody
====================================================================
SpringBoot+MyBatisPlus常见问题
一、启动时,报出找不到mapper的问题
因为mapper包下是一个是实现了BaseMapper接口的接口,其实现类需要动态创建
方式一:需要在启动类上添加@MapperScan(“指定mapper包位置”)
方式二:配置类
@Configuration
@MapperScan("com.michael.mapper")
public class myConfig{}