标签:框架 tar id生成策略 集合 批量 input bat 增强 his
目的:对mybatis进行增强,不进行改变
简单Demo编写
创建数据库并插入资料
创建springboot工程
引入相关依赖和npm
安装lombox等插件
设置application.properties
编写代码
新建entity实体
新建mapper,继承BaseMapper<实体类>
启动类添加@MapperScan(mapper包全名),也可以添加到Config类
@EnableTransactionManagement @Configuration @MapperScan(mapper包全名) public class MybatisPlusConfig{ }
编写测试代码
配置中添加mybatis日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
简单Demo
XXXMapper.insert(实体对象);
特点
- 不需要设置ID值(主键)
ID生成策略
- ID生成策略类别
AUTO INCREMENT: 自动增长策略
缺点:每次需要获取最近一次的ID
UUID: 每次生成随机唯一值
缺点:排序困难
Redis生成ID
Twitter的snowflake算法(Mapper默认)
- 配置ID生成策略样例
@TableId(type = IdType.AUTO)
private Long Id;
- 配置ID生成策略类别
- AUTO:自动增长
- ID WORER:mp自带,生成19位值,数字类型使用,比如long类型
- ID WORKER STR:mp自带,生成19位值,字符串类型使用
- INPUT:自身输入
- NONE:没有策略,自身输入
- UUID:随机唯一值
简单操作
//物理删除
xxxMapper.deleteById(Id);//单个删除
xxxMapper.deleteBatchIds(Id);//批量删除
逻辑删除
添加逻辑删除字段,对应实体类添加属性,属性添加注解
@TableLogic
private Integer deleted;
配置逻辑删除插件到Config类
@Bean
public ISqlInjector sqlInjector(){
return new LogicSqlInjector();
}
在配置文件中设定
mybatis-plus.global-config.db-config.logic-delete-value=1 //删除时设置为0
mybatis-plus.global-config.db-config.logic-not-delete-value=0 //非删除时设置为1
简单样例
XXXMapper.selectAll(null);//查询所有资料
XXXMapper.selectById(id);//通过单个ID查询
XXXMapper.selectBatchIds(idList);//通过多个ID查询
分页查询
配置分页插件到Config类
@Bean
public PaginationInterceptor paginationInterceptor(){
return new PaginationInterceptor();
}
编写分页查询代码
Page<实体> page = new Page<>(当前页,每页记录数);
xxxMapper.selectPage(page,null);
page.getCurrent();//当前页
page.getRecords();//每页数据list集合
page.getSize();//每页显示记录数
page.getTotal();//总记录数
page.getPages();//总页数
page.hasNext();//是否有下一页
page.hasPrevious();//是否有上一页
复杂条件查询
使用QueryWrapper
//创建QueryWrapper对象
QueryWrapper<实体> wrapper = new QueryWrapper();
//ge,gt,le,lt(>=,>,<=,<)
//查询age>=30记录
//第一个参数名称,第二个设置值
wrapper.ge("age",30);
//eq,ne(=,!=)
//between
//查询年龄20-30
wrapper.between("age",20,30);
//like 模糊查询
//orderByDesc/Asc 排序
//last 拼接sql语句
wrapper.last("limit 1");
//指定查询的列(id,name)
wrapper.select("id","name");
简单样例
XXXMapper.updateById(实体对象);
自动填充
在需要自动填充的属性上加注解
样例
@TableField(fill=FieldFill.INSERT) private Date createTime; @TableField(fill=FieldFill.INSERT_UPDATE) private Date updateTime;
新建Hander类继承MetaObjectHandler
需添加@Component注解交由springboot控管
样例
@Overrid public void insertFill(MetaObject metaObject){ this.setFieldValByName("createTime",new Date(),metaObject);//将该属性填充为当前时间 this.setFieldValByName("updateTime",new Date(),metaObject);//将该属性填充为当前时间 }
目的
解决丢失更新问题
悲观锁:串行
乐观锁:使用版本号确定能否进行更改操作
乐观锁具体实现
表添加字段,作为乐观锁版本号
对应实体类添加版本号属性
在实体类版本号属性添加注解@Version
配置乐观锁插件到Config类
@Bean
public OptimisticLockerInterceptor optimistickLockerInterceptor(){
return new OptimisticLockerInterceptor();
}
配置插件到Config类
/**
* SQL执行效率插件
* @return
*/
@Bean
@Profile({"dev"}) // 指定环境为dev生效
public PerformanceInterceptor performanceInterceptor() {
PerformanceInterceptor interceptor = new PerformanceInterceptor();
// sql美化打印
interceptor.setFormat(true);
// 设置SQL超时时间5s
interceptor.setMaxTime(5000L);
return interceptor;
}
标签:框架 tar id生成策略 集合 批量 input bat 增强 his
原文地址:https://www.cnblogs.com/HymanWesteros/p/14719306.html