当前位置: 首页 > news >正文

SpringCloud微服务

Mybatis-plus

快速入门

导入

mybatis-plus依赖中含有mybatis依赖 所以直接更换依赖即可 导入mybatis依赖

        <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.3</version></dependency>

定义mapper接口继承BaseMapper 其中BaseMapper对象中泛型为mapper操作的实体类泛型

常见注解

MyBatisPlus通过扫描实体类 并且基于反射得到实体类信息作为数据库表信息 而且有以下约定

  • 类名驼峰转下划线作为表名
  • 名为id字段作为主键
  • 变量名驼峰转下划线作为表字段名

MyBatis中有三个常见注解

  • @TableName 来指定表名
  • @TableId 来指定表中主键
    • value是主键名
    • type是主键的增长策略 AUTO是自增长 INPUT通过set方法注入 ASSIGN_ID通过雪花算法来生成id 默认雪花算法生成Long型id
  • @TableField 来指定普通字段名 且常见场景如下
    • 变量名和数据库名不一致
    • 变量名以is开头 且是布尔值
    • 变量名和数据库关键字冲突 比如order和order by就冲突了
    • 变量名不是数据库字段 需要使用转义字符

常用配置

MyBatisPlus继承了mybatis的基础配置和一些特有配置

mybatis-plus:type-aliases-package: com.itheima.mp.domain.po # 别名扫描包mapper-locations: "classpath*:/mapper/**/*.xml" # Mapper.xml文件地址,默认值configuration:map-underscore-to-camel-case: true # 是否开启下划线和驼峰的映射cache-enabled: false # 是否开启二级缓存global-config:db-config:id-type: assign_id # id为雪花算法生成update-strategy: not_null # 更新策略:只更新非空字段

核心功能

条件构造器

MyBatisPlus支持各种复杂where条件 都是通过Wrapper来构造的

条件构造器的用法

  • QueryWrapper和LambdaQueryWrapper通常来构建select delete update的where条件部分
  • UpdateWrapper和LambdaUpdateWrapper通常只有在set语句比较特殊才使用
  • 尽量使用LambdaQueryWrapper和LambdaUpdateWrapper 避免硬编码

自定义sql

Where条件用mp来写 剩余部分用xml自定义来写 从而组装完整的sql语句 分为以下步骤

  • 基于Wrapper构建where条件
  • 在mapper方法中调用@Param注解指定wrapper名称 必须是ew
  • 自定义sql 构建完整语句

Service接口

要需要实现分两步

  1. 自定义接口继承IService接口 从而自定义接口有所有方法声明
    public interface IUserService extends IService<User>
  2. 实现类继承IServiceImpl实现类 从而实现类有所有方法实现
    public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService

IService开发基础功能接口

首先注意的是注入的时候用构造函数来注入 可以使用lombok来注入 在类上使用@RequiredAgrsConstructor来通过注入 在类中直接@private final IUserService userService即可

  • 可以解决循环依赖的问题 循环依赖直接抛异常
  • 在测试方法里也更好用 直接用构造函数即可 而autowired还需要反射
  • 不可变性 用final定义保证变量不会被修改

使用lambdaUpdate的时候 构建完sql语句记得跟上.update() 这个才是真正执行update语句 上面全都是构建sql语句

        lambdaUpdate().set(User::getBalance, remain).set(remain < 0,User::getStatus,2).eq(User::getId,id).eq(User::getBalance,user.getBalance()).update();

批量处理

  • 普通for循环插入
    速度极差
  • IService批量插入
    使用批处理的时候采用的是预编译 比如十万条数据 每一千条发送一个sql 默认是发送一千条sql 但是这样性能还是会很慢
  • 开启rewriteBatchedStatements=true参数
    可以将一千条sql拼成一条sql语句 性能最好
    在配置文件里jdbc的配置中spring: datasource: url: jdbc:mysql://127.0.0.1:3306/mp?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
    后面拼上&rewriteBatchedStatements=true就可以
http://www.sczhlp.com/news/4213/

相关文章:

  • 快速莫比乌斯变换(FMT)与卷积
  • Redis教程-持久化(RDB) - 智慧园区
  • 开发终端神器 Cmder 使用配置教程
  • 三种软件观测方法
  • day7_vite
  • 周总结
  • 8.2随笔
  • 树形 dp
  • 武大图书馆
  • 常见的索引失效情况
  • 20250802
  • Ctorch开发日志——矩阵乘法优化及数学原理 - Ghost
  • 27天
  • 整数型赋值二进制,八进制,十六进制
  • python 文件操作
  • 暑假生活周报3
  • locate 输出为空
  • 15
  • ffmpeg 常用命令用法笔记
  • [CTSC2017] 网络
  • 英国国家审计署建议政府运用数据分析技术打击欺诈行为
  • OI集训 Day17
  • 算法随笔——线段树分治
  • 8.2总结
  • 2.2 内存管理
  • SQL Server 更改sa密码
  • 2.3 定义变量的三个特征和数据类型介绍
  • SqlServer 大数据库更名
  • 8月2日
  • (?)