概述
MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。MyBatis-Plus提供了通用的mapper和service,可以在不编写任何SQL语句的情况下,快速的实现对单表的CRUD、批量、逻辑删除、分页等操作。
- 扫描pojo实体类
- 通过反射技术将实体类中的属性抽取,分析数据库表和实体类映射关系,实现表与表之间,属性与属性之间映射
- 根据调用的方法生成相对应的sql语句
- 将生成的语句注入到mybatis容器中从而实现功能
搭建
引入jar坐标
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.8</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
修改设置
server:
port: 8099
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1/mybatis_plus?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 152475
type: com.alibaba.druid.pool.DruidDataSource
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
Pojo类
- lombok:简化实体类开发
只需在实体类上添加@Data ,就可以自动生成 构造方法、get()、set()、equals()、canEqual()、hashCode()、toString() @Accessors(chain = true) ,就可以使用链式set值@TableName("t_user") :映射数据库中的表名 或者使用全局配置global-config:db-config:table-prefix: t_ @TableId :表示主键字段映射@TableId(value = "uid") :指定作为主键的字段@TableId(value = "uid", type = IdType.AUTO) :id生成策略,默认雪花算法,设置主键自增,需要数据库同时设置;或者全局设置 global-config:db-config:id-type: auto - 字段默认驼峰映射,
@TableField("user_name") 设置对应的表中字段名 @TableLogic :被标记的属性字段为逻辑删除属性字段;删除时改变此字段
雪花算法
垂直拆分
垂直分表适合将表中某些不常用且占了大量空间的列拆分出去
水平拆分
水平分表适合表行数特别大的表
- 主键自增:分段大小选取困难;分段不均匀
- hash取模:分布均匀;但表扩充困难,需要重新分布所有数据
- 雪花算法
雪花算法
能保证不同表的主键不重复性,相同表的主键有序性
整个分布式系统内ID不重复,效率高
自动生成语句
需要将mapper接口继承BaseMapper<实体类>
插入
可以自动使用雪花算法 生成主键id
删除
通过id删除:int类型,所以加L
条件删除 通过多个id批量删除
修改
通过id修改,只修改set() 的属性
查询
如果要自定义方法,如myBatis一样
Service CRUD
在service层调用方法,需要既可以使用通用功能,还可以实现自己定义的接口
- 创建
IUserService.java 接口 - 创建
UserServiceImpl 实现类 批量添加
条件构造器
queryWrapper
排序
UpdateWrapper
优先级设置 部分字段查询 子查询 给查询条件加条件(下面为简写)
分页插件
配置
@Configuration
public class MyBatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
自定义sql实现分页
- 定义dao
- 写sql
- 查询
MyBatisPlus乐观锁
innodb隔离级别默认为rr自带乐观锁;
@Version private Integer version; 标识乐观锁版本号字段;数据库也加上这个字段- 添加乐观锁插件
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
|