mybatisPlus 常见用法

文章目录

  • 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>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/240214.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ps】新手 学 PS一本通

第一章 添加图像边框 1. 导入一张图片 2.选择 图像-画布大小 例&#xff1a;原图&#xff1a;720x820 填写画布大小&#xff1a;820x920 可以增加一个100x100的边框。 画布扩展颜色是扩展的颜色。 标尺工具 视图>标尺 或者使用 CTRL R 网格工具 视图-显示-网格 …

Linus命令总结:

ps aux 查看当前运行的所有的进行 解压&#xff1a;unzip FileName.zip 压缩&#xff1a;zip FileName.zip DirName 各种压缩和解压缩命令https://blog.csdn.net/m0_61925586/article/details/127824778 开启一个名为test的终端&#xff1a; screen -S test ②查看所有的scr…

机器视觉系统选型-图像对比度

对于一个视觉系统来说&#xff0c;“黑白分明”的图像才是好图像。 选择适合的灯源&#xff0c; 使图像中待测特征反差最大化。

Pytorch项目,肺癌检测项目之一

项目目的&#xff1a;输入人体躯干的三维CT扫描作为输入数据&#xff0c;如果存在肿瘤&#xff0c;希望输出疑似恶性肿瘤的位置。 项目背景&#xff1a;发现处于早期的肺癌对病人生存率有巨大影响&#xff0c;但很难大规模进行。审查CT数据的工作必须由训练有素的专家进行&…

第22课 SQL入门之高级SQL特性

文章目录 22.1 约束22.1.1 主键22.1.2 外键22.1.3 唯一约束22.1.4 检查约束 22.2 索引22.3 触发器22.4 数据库安全 这一课介绍SQL所涉及的几个高级数据处理特性&#xff1a;约束、索引和触发器。 22.1 约束 SQL已经改进过多个版本&#xff0c;成为非常完善和强大的语言。许多强…

C# NPOI导出dataset----Excel绘制Chart图表

仅限XLSX 2007以后版本&#xff08;2007之前版本不支持&#xff09; 1、判断文件夹是否存在&#xff0c;不存在则创建 //Application.StartupPath当前项目根目录 if (!Directory.Exists(Application.StartupPath "\Excel")) { …

如何解决接口幂等的问题(防止优惠券有人重复刷)

文章目录 解决接口幂等性问题&#xff0c;可以采取以下措施&#xff1a;你怎么防止优惠券有人重复刷 解决接口幂等性问题需要综合考虑多个方面&#xff0c;包括接口设计、参数校验、状态码和返回值设计、乐观锁、分布式锁、数据库事务、缓存一致性、限流和熔断以及幂等性设计原…

点击筛选框动态增加 多条可输入Table列 以及通过操作数组改造数据

点击筛选框动态增加 多条可输入Table列 以及通过操作数组改造数据 <el-col :span"8" class"tab_group"><el-form-item label"动态筛选"><el-select v-model.trim"ruleForm.flowType" placeholder"请选择" …

实战:使用 OpenCV 和 PyTesseract 对文档进行 OCR

随着世界各地的组织都希望将其运营数字化&#xff0c;将物理文档转换为数字格式是非常常见的。这通常通过光学字符识别 (OCR) 完成&#xff0c;其中文本图像&#xff08;扫描的物理文档&#xff09;通过几种成熟的文本识别算法之一转换为机器文本。当在干净的背景下处理打印文本…

麒麟信安日志轮询分割操作说明

1、背景介绍 由于模块上面硬盘容量有限&#xff0c;需要定时清理系统日志。为了方便用户使用&#xff0c;在系统中设定自动日志轮询操作&#xff0c;让日志占用容量由操作系统自动管理&#xff0c;用户无需担心日志太多把硬盘容量占满。 2、操作说明 新建需要分割的日志logr…

【大数据HA】HAProxy实现thrift协议HMS服务的高可用-附Chatgpt协助截图

背景 之前安装了HMS(Hive metastore service)&#xff0c;独立于hive运行&#xff0c;安装部署过程见我下面列出的另一篇文章&#xff0c;需要为它建立HA高可用功能。防止在访问时出现单点故障问题。 【大数据】Docker部署HMS(Hive Metastore Service)并使用Trino访问Minio-C…

学校和老师如何制作自己免费的成绩查询系统

在当今数字化的时代&#xff0c;许多学校都采用信息技术来管理和提高工作效率。其中&#xff0c;成绩查询系统是一个非常实用的工具&#xff0c;它可以让老师和学生们快速、方便地查询成绩。那么&#xff0c;学校和老师如何制作自己免费的成绩查询系统呢&#xff1f;本文将为你…

RK3568开发板,开机后一直不断重启【Bug已解决-鸿蒙】

文章目录 项目场景:原因分析:解决方案:附解决参数详情概览:此Bug解决方案总结项目场景: 在进行鸿蒙应用开发时,自己遇到过这个问题,也看到了网上大佬的解决方案,现在在这篇文章里总结一下解决方案。 问题如下: 【问题描述】 RK3568开发板,开机后一直不断重启,这是啥…

微软官方镜像下载大全(windows iso 官方镜像)

原本只是想下一个Windows Server 2022中文版的镜像&#xff0c;后面发现要么就是慢得一批的某盘&#xff0c;要么就是磁力&#xff0c;我想直接下载简简单单&#xff0c;找了一圈没有找到。官网下载需要注册、登录乱七八糟&#xff0c;最终终于找到下载方法了&#xff0c;适用于…

关于新发现的ThirdEye基于Windows恶意软件窃取敏感数据动态情报

一、基本内容 近期&#xff0c;Fortinet FortiGuard Labs发现了一款名为ThirdEye的先前未记录的基于Windows的信息窃取程序。该恶意软件伪装成PDF文件&#xff0c;其俄语名称为“CMK Правила оформления больничных листов.pdf.exe”&#x…

c语言:输出一个正方形|练习题

一、题目 输入长度num&#xff0c;输出一个边长为num的正方形 二、思路分析 1、输出的正方形分为三部分&#xff0c;包括&#xff1a; 2、第一行、中间的num-2行&#xff0c;以及最后一行 三、代码图片【带注释】 四、源代码【带注释】 #include <stdio.h> //思路&#…

字符设备驱动开发-注册-设备文件创建

一、字符设备驱动 linux系统中一切皆文件 1、应用层&#xff1a; APP1 APP2 ... fd open("led驱动的文件"&#xff0c;O_RDWR); read(fd); write(); close(); 2、内核层&#xff1a; 对灯写一个驱动 led_driver.c driver_open(); driver_read(); driver_write(…

JVM常见面试题

基础题 能不能给我讲一下JVM完整的GC流程 我们先从Minor GC说起吧&#xff0c;当对象分配到Eden区发现Eden区空间满了&#xff0c;此时就会触发Minor GC&#xff0c;将非存活对象回收&#xff0c;再将存活对象放到From区(S1区)&#xff0c;再将新创建的对象放到Eden区。 随着…

基于ssm重庆理工大学心理咨询管理子系统的分析与实现论文

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;心理咨询预约信息因为其管理内容繁杂&#xff0c;管理数量繁多导致手工进行处理不能…

Java_集合进阶Map实现类

一、Map集合 已经学习了Map集合的常用方法&#xff0c;以及遍历方式。 下面学习的是Map接口下面的是三个实现类HashMap、LinkedHashMap、TreeMap。实际上这三个实现类并没有什么特有方法需要我们学习&#xff0c;它们的方法就是前面学习Map的方法。这里我们主要学习它们的底层…