一.引入
1.创建springboot项目
2.mp的依赖
com.baomidou mybatis-plus-boot-starter 3.0.5
3.在 application.properties
配置文件中添加 MySQL 数据库的相关配置:
如果mysql8以上(spring boot 2.1)
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus
spring.datasource.username=root
spring.datasource.password=123456
如果mysql5
spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/study spring.datasource.username=root spring.datasource.password=root
二.主键增加策略
https://www.cnblogs.com/haoxinyue/p/5208136.html
1.自增
2.uuid
3.reids
4.雪花算法
mp默认使用的就是雪花算法
@TableId(type = IdType.ID_WORKER) private Long id;
如果主键是string类型
@TableId(type = IdType.ID_WORKER_STR) private String id;
除此之外mp还包括:
AUTO(0), NONE(1), INPUT(2), ID_WORKER(3), UUID(4), ID_WORKER_STR(5);
三.自动填充
项目中经常会遇到一些数据,每次都使用相同的方式填充,例如记录的创建时间,更新时间等。
我们可以使用MyBatis Plus的自动填充功能,完成这些字段的赋值工作:
1.在实体类上面添加注解
@TableField(fill = FieldFill.INSERT) private Date createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime;
2.实现接口
@Component public class MyMetaObjectHandler implements MetaObjectHandler { private static final Logger logger = LoggerFactory.getLogger(MyMetaObjectHandler.class); @Override public void insertFill(MetaObject metaObject) { logger.info("新增开始"); this.setFieldValByName("age",22,metaObject); } @Override public void updateFill(MetaObject metaObject) { logger.info("修改开始"); this.setFieldValByName("age",33,metaObject); } }
四.mp实现乐观锁
主要适用场景:当要更新一条记录的时候,希望这条记录没有被别人更新,也就是说实现线程安全的数据更新
乐观锁的实现方式:
1.类里面有version这个属性,表里面有version这个字段
2.类的version属性上面添加注解:
@Version
@TableField(fill=FieldFill.INSERT)
private intversion
3.元对象处理器接口添加version的insert默认值
@Override public void insertFill(MetaObject metaObject) { this.setFieldValByName("version",1,metaObject); }
4.在 MybatisPlusConfig 中注册 Bean
//乐观锁插件 @Bean public OptimisticLockerInterceptor optimisticLockerInterceptor() { return new OptimisticLockerInterceptor(); }
注意事项:
五.crud
1.批量
//多个id批量查询 @Test public void testSelectBatch() { Listusers = userMapper.selectBatchIds(Arrays.asList(1L, 2L, 3L)); System.out.println(users); }
//批量删除 @Test public void testDeleteBatchIds() { int result = userMapper.deleteBatchIds(Arrays.asList(1,2)); System.out.println(result); }
2.分页查询
2.1.注册bean
/** * 分页插件 */ @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); }
2.2.使用
Pagepage = new Page<>(1,3); //调用mp分页查询的方法 //调用mp分页查询过程中,底层封装 //把分页所有数据封装到page对象里面 userMapper.selectMapsPage(page, null); //IPage
//通过page对象获取分页数据 System.out.println(page.getCurrent());//当前页 System.out.println(page.getRecords());//每页数据list集合 System.out.println(page.getSize());//每页显示记录数 System.out.println(page.getTotal()); //总记录数 System.out.println(page.getPages()); //总页数 System.out.println(page.hasNext()); //下一页 System.out.println(page.hasPrevious()); //上一页
六.物理删除和逻辑删除
1.数据表里面增加delete字段,类里面增加delete属性
2.类上面添加注解
@TableLogic private Integer deleted;
3.关于delete字段的值:
可以使用自动填充,也可以在数据表创建时设置默认值
可以在application.properties 加入配置
#mybatis-plus.global-config.db-config.logic-delete-value=1 ###mybatis-plus.global-config.db-config.logic-not-delete-value=0
4.注册 Bean
//逻辑删除插件 @Bean public ISqlInjector sqlInjector() { return new LogicSqlInjector(); }