JAVA框架(SSM):MyBatisPlus
时间:2021-04-30 12:18:44
收藏:0
阅读:0
MyBatisPlus
目的:对mybatis进行增强,不进行改变
简单Demo编写
创建数据库并插入资料
创建springboot工程
引入相关依赖和npm
安装lombox等插件
设置application.properties
编写代码
新建entity实体
新建mapper,继承BaseMapper<实体类>
启动类添加@MapperScan(mapper包全名),也可以添加到Config类
@EnableTransactionManagement @Configuration @MapperScan(mapper包全名) public class MybatisPlusConfig{ }
编写测试代码
1.1 CURD操作
配置中添加mybatis日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
1.1.1 增操作
简单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:随机唯一值
1.1.2 删操作
简单操作
//物理删除
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
1.1.3 查操作
简单样例
XXXMapper.selectAll(null);//查询所有资料
XXXMapper.selectById(id);//通过单个ID查询
XXXMapper.selectBatchIds(idList);//通过多个ID查询
分页查询
-
配置分页插件到Config类
@Bean public PaginationInterceptor paginationInterceptor(){ return new PaginationInterceptor(); }
-
编写分页查询代码
- 直接new page对象,传入当前页和每页显示记录数
- 调用mp方法实现分页
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");
1.1.4 改操作
简单样例
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);//将该属性填充为当前时间 }
1.2 加锁
目的
解决丢失更新问题
悲观锁:串行
乐观锁:使用版本号确定能否进行更改操作
乐观锁具体实现
-
表添加字段,作为乐观锁版本号
-
对应实体类添加版本号属性
-
在实体类版本号属性添加注解@Version
-
配置乐观锁插件到Config类
@Bean public OptimisticLockerInterceptor optimistickLockerInterceptor(){ return new OptimisticLockerInterceptor(); }
1.3 性能分析插件
配置插件到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;
}
评论(0)