文章目录
- mybatisPlus 常见用法
- 一、自动填充
- 1.1 处理类
- 1.2 自动填充抽象类
- 二、枚举
- 1.1 注解方式
- 1.2 实现接口方式
- 三、分页
- 3.1 配置 config
- 3.2 定义统一分页接口
- 3.3 实现分页接口
- 3.4 使用
- 四、读写分离
- 4.1 方式一
- 4.1.1 application.yml
- 4.1.2 pom.xml
- 4.2 方式二
- 4.2.1 application.yml
- 4.2.2 pom.xml
- 4.3 方式三
- 4.3.1 application.yml
- 4.3.2 pom.xml
- 4.4 方式四
- 4.4.1 application.yml
- 4.4.2 pom.xml
mybatisPlus 常见用法
一、自动填充
1.1 处理类
@Slf4j
@Component // 不使用@Component,也可在 config 中,将该类注册为 Bean
public class AutoFillHandler implements MetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {log.info("created log");String username = "测试";// createBy 为 当前用户名this.setFieldValByName("createdBy", username, metaObject);// createTime 为 当前时间this.strictInsertFill(metaObject, "createdTime", LocalDateTime::now, LocalDateTime.class); // 起始版本 3.3.3(推荐)// updateBy 为 当前用户名this.setFieldValByName("updatedBy", username, metaObject);// updateTime 为 当前时间this.strictInsertFill(metaObject, "updatedTime", LocalDateTime::now, LocalDateTime.class); // 起始版本 3.3.3(推荐)}@Overridepublic void updateFill(MetaObject metaObject) {log.info("updated log");String username = "测试";// updateBy 为 当前用户名this.setFieldValByName("updatedBy", username, metaObject);// updateTime 为 当前时间this.strictUpdateFill(metaObject, "updatedTime", LocalDateTime::now, LocalDateTime.class); // 起始版本 3.3.3(推荐)}
}
1.2 自动填充抽象类
@Data
public abstract class BaseEntity implements Serializable {// 创建人@TableField(fill = FieldFill.INSERT)private String createdBy;// 创建时间@TableField(fill = FieldFill.INSERT)private LocalDateTime createdTime;// 更新人@TableField(fill = FieldFill.INSERT_UPDATE)private String updatedBy;// 更新时间@TableField(fill = FieldFill.INSERT_UPDATE)private LocalDateTime updatedTime;
}
二、枚举
1.1 注解方式
-
枚举类
@Getter @AllArgsConstructor public enum GradeEnum{UNKNOWN(0, "未知"),SECONDARY(2, "中学"),PRIMARY(1, "小学"),HIGH(3, "高中");@EnumValueprivate final Integer code;@JsonValueprivate final String name; }
-
使用
@Data @EqualsAndHashCode(callSuper = false) @TableName("t_product") public class Product extends BaseEntity {@TableId(type = IdType.AUTO)private Integer id;private GradeEnum grade; }
1.2 实现接口方式
-
枚举类
@AllArgsConstructor public enum SexEnum implements IEnum<Integer> {MALE(0,"男"),FEMALE(1,"女");private final int value;@JsonValueprivate final String label;@Overridepublic Integer getValue() {return this.value;} }
-
使用
@Data @TableName("t_student") public class Student {@TableId(type = IdType.AUTO)private Integer id;private SexEnum sex; }
三、分页
3.1 配置 config
@Configuration
public class PageConfig {/*** 分页插件* @return*/@Bean@Primarypublic MybatisPlusInterceptor paginationInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;}
}
3.2 定义统一分页接口
public interface AppPage<T> {/*** 当前页页码*/long getPageNum();/*** 每页条数*/long getPageSize();/*** 总条数*/long getTotal();/*** 总页数*/long getTotalPages();/*** 分页对象记录*/List<T> getItems();
}
3.3 实现分页接口
@AllArgsConstructor
public class MybatisPageImpl<T> implements AppPage<T> {private IPage<T> iPage;@Overridepublic long getPageNum() {return iPage.getCurrent();}@Overridepublic long getPageSize() {return iPage.getSize();}@Overridepublic long getTotal() {return iPage.getTotal();}@Overridepublic long getTotalPages() {return iPage.getPages();}@Overridepublic List<T> getItems() {return iPage.getRecords();}
}
3.4 使用
- 直接使用 Mapper
@RestController
public class ProductController {@Autowiredprivate ProductMapper productMapper;@Autowiredprivate ProductService productService;@GetMapping("page")public MybatisPageImpl<Product> page() {Page<Product> productPage = new Page<>(1, 2);IPage<Product> page = productMapper.selectPage(productPage, null);// Service 实现 ServiceImpl 接口// IPage<Product> page = productService.page(productPage, null);return new MybatisPageImpl<>(page);}
}
四、读写分离
4.1 方式一
MyBatis-Plus 开发参与者,依赖如下:
dynamic-datasource-spring-boot3-starter
4.1.1 application.yml
server:port: 8888spring:datasource:dynamic:primary: master #设置默认的数据源或者数据源组,默认值即为masterstrict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源datasource:master: # 数据库 master-0, 包含连接池、驱动、地址、用户名、密码driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3336/test?serverTimezone=UTCusername: rootpassword: 123456slave-0: # 数据库 slave-0, 包含连接池、驱动、地址、用户名、密码driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3337/test?serverTimezone=UTCusername: rootpassword: 123456mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
4.1.2 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.4</version><relativePath/> <!-- lookup parent from repository --></parent><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.31</version></dependency><!-- mybatisPlus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.2</version></dependency><!-- mybatisPlus 分表分库--><dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot3-starter</artifactId><version>4.2.0</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.6</version></dependency></dependencies>
</project>
4.2 方式二
sharding-jdbc 4
4.2.1 application.yml
server:port: 8889
spring:sharding-sphere:props:sql:show: truedatasource:names: master-0,slave-0master-0: # 数据库 master-0, 包含连接池、驱动、地址、用户名、密码type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3336/test?serverTimezone=UTCusername: rootpassword: 123456slave-0: # 数据库 slave-0, 包含连接池、驱动、地址、用户名、密码type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3337/test?serverTimezone=UTCusername: rootpassword: 123456# 指定数据库分布情况,数据库里面表分布情况sharding:master-slave-rules:ds0: # 主从关系, 读写分离master-data-source-name: master-0slave-data-source-names:- slave-0tables: # 分表规则dict:actual-data-nodes: ds0.dict # 这里使用主从关系key-generator: # 表中主键生成策略column: id # 分库依赖的列type: UUIDtable-strategy: # 分片策略inline: # 不支持范围查询sharding-column: idalgorithm-expression: dict
4.2.2 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.5.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- shardingJDBC--><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-spring-boot-starter</artifactId><version>4.1.1</version></dependency><!-- 阿里数据连接池 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.13-SNSAPSHOT</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!-- mybatisPlus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.2</version></dependency></dependencies>
</project>
4.3 方式三
shardingsphere 5
4.3.1 application.yml
server:port: 8888spring:sharding-sphere:props:sql:show: truedatasource:names: master,slave-0master:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3336/test?serverTimezone=UTCusername: rootpassword: 123456slave-0:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3337/test?serverTimezone=UTCusername: rootpassword: 123456rules:readwrite-splitting:data-sources:ds:load-balancer-name: round-robinstatic-strategy:# 注意,如果接口有事务,读写分离不生效,默认全部使用主库,为了保证数据一致性write-data-source-name: masterread-data-source-names:- slave0load-balancers:round-robin:type: RANDOM #一共三种一种是 RANDOM(随机),一种是 ROUND_ROBIN(轮询),一种是 WEIGHT(权重)sharding:tables:user: # 拥有几个分片表0-3actual-data-nodes: ds.user_$->{0..1}table-strategy:standard:sharding-column: idsharding-algorithm-name: table-inline # 配置算法default-database-strategy:standard:sharding-column: idsharding-algorithm-name: database-inlinesharding-algorithms:table-inline:type: HASH_MODprops:sharding-count: 2database-inline:type: HASH_MODprops:sharding-count: 3
4.3.2 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.5.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.2</version></dependency><!-- 阿里数据连接池 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.13-SNSAPSHOT</version></dependency><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId><version>5.2.1</version></dependency><dependency><groupId>org.yaml</groupId><artifactId>snakeyaml</artifactId><version>1.32</version></dependency></dependencies>
</project>
4.4 方式四
mybatis-plus 原生开发,商用 mybatis-mate-starter
4.4.1 application.yml
server:port: 8888
spring:main:allow-bean-definition-overriding: truemybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplmybatis-mate:cert:grant: 授予单位license: 证书sharding:health: true # 健康检查primary: mysql # 默认数据源datasource:mysql:- key: master0cluster: masterdriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3336/test?serverTimezone=UTCusername: rootpassword: 123456- key: slave01cluster: slavedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3337/test?serverTimezone=UTCusername: rootpassword: 123456
4.4.2 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.4</version><relativePath/> <!-- lookup parent from repository --></parent><properties><java.version>17</java.version><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.31</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.2</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.16</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-mate-starter</artifactId><version>1.3.2</version></dependency></dependencies>
</project>