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{
	
	@Override
	public void insertFill(MetaObject metaObject){
		//旧版本,字段类型为Date
		//this.setFieldValByName("createTime",new Date(),metaObject);
		
		//新版本,字段类型为LocalDateTime
		this.strictInsertFilll(metaObject,"createTime",LocalDateTime.class,LocalDateTime.now());
	
		//对于其他属性,可以通过判断是否赋值来决定是否自动填充
		Object age = this.getFieldValByName("age",metaObject);
		if(age == null){
			//说明业务层并没有手动填充,则自动填充
			this.strictInsertFill(metaObject,"age",Integer.class,24);
		}

		//判断author属性是否被业务代码设值
		boolean hasAuthor = metaObject.hasSetter("author");
		if(hasAuthor){
			this.strictInsertFill(metaObject,"author",String.class,"jordan");
		}
	}
	@Override
	public 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{
	
	@Bean
	public OptimisticLockerInterceptor optimisticLockerInterceptor(){
		return new OptimisticLockerInterceptor();
	}
}

或者将其和分页插件配置到同一个配置类下

@Configuration
@MapperScan("com.michael.mybatisplus.mapper")
public class MybatisPusConfig{
	
	@Bean
	public MybatisPlusInterceptor mybatisPlusInterceptor(){
		MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
		
		//分页插件
		interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
		//乐观锁插件
		interceptor.addInnerInterceptor(new OptimisticLockerInterceptor());
		
		return interceptor;
	}
}

============================================================

多个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);

分页查询

①、配置分页插件配置类

@Configuration
@MapperScan("com.michael.mybatisplus.mapper") //可以将此注解从启动类上移过来
public class MybatisPlusConfig{

	/**
		旧版本,已经过时!
	*/
	@Bean
	public PaginationInterceptor paginationInterceptor(){
		PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
		patinationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
		return paginationInterceptor;
	}

	/**
		新版本
	*/
	@Bean
	public MybatisPlusInterceptor mybatisPlusInterceptor(){
		MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
		interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
		return interceptor;
	}
}

②、编写分页代码,插件Page对象,传入两个对象,当前页和每页记录数

Page<User> page = new Page(1,3);
Page<User> userPage = userMapper.selectPage(page,null);//第二个参数为条件

//直接通过page变量,还可以执行如下操作
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

@TableField(value="is_deleted") //映射数据库字段
@TableLogic
private Integer deleted;

mysql数据库is_deleted字段的类型tinyint

②、application.properties配置文件中添加

以下配置为默认值,所以该配置可无

mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0

#全局设置主键生成策略
mybatis-plus.global-config.db-cofig.id-type=auto

条件构造器

在这里插入图片描述

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{

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值