MybatisPlus学习笔记:MybatisPlus中相关细节

MybatisPlus中相关细节


1、Mybatisplus特性:
(1)无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
(2)损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
(3)强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
(4)支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
(5)支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
(6)支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
(7)支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
(8)内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
(9)内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
(10)分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
(11)内置性能分析插件:可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
(12)内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

2、快速开始
①创建springboot 项目,然后导入三个依赖:

<!--mybatis-plus启动器-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1<ersion>
        </dependency>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!--lombok 依赖:用于简化实体类开发-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

②配置yml文件:

spring:
  #配置数据源信息
  datasource:
    #配置数据源类型
    type: com.zaxxer.hikari.HikariDataSource
    #配置连接数据库的各个信息
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybaits_plus?characterEncoding=utf-8&useSSL=false 
    #如果是8版本的驱动还需要加上时区的配置
    username: root
    password: 981015

③创建实体类,Mapper接口、MapperScan扫描器
alt
alt
alt
④测试:queryWrapper 是用来指定查询条件的,如果没有查询条件则填null
alt
3、添加日志功能
①yml中添加配置:
alt
②效果:
alt
4、继承BaseMapper<T> 中所能够使用的sql方法:
alt
5、自定义 sql 方式
①在mapper 接口中写出要自定义方法。
②在resource 下创建mapper 文件夹,并创建相对应的mapper.xml文件
③在mapper.xml 文件中namespace绑定mapper接口,实现自定义sql。

6、service CRUD 接口:
①说明:
(1)通用 Service CRUD 封装IService (opens new window)接口,进一步封装 CRUD 采用 get 查询单行 remove 删除 list 查询集合 page 分页前缀命名方式区分 Mapper 层避免混淆、
(2)泛型 T 为任意实体对象
(3)建议如果存在自定义通用 Service 方法的可能,请创建自己的 IBaseService 继承 Mybatis-Plus 提供的基类
(4)对象 Wrapper 为 条件构造器
②IService 中的部分方法:
alt
③具体实现:
alt
alt
alt
7、MybatisPlus 是根据Mapper 接口中 BaseMapper<T> 中的泛型T ,来找到数据库中相对应的表来进行自动映射的。如果数据库中的表名为 t_user ,而basemapper 中的泛型T 为 User,则MybatisPlus 并不能将其关联映射起来。

8、将实体类与 数据库表 建立 关联的两种方式:
①在实体类上加 @TableName 注解。

@TableName("t_user")

②如果数据库中的表都用一个统一的前缀 tbl_。 则可以在yml全局配置文件中指明,指明后各个实体类中不需要再加注解。

#设置实体类所对应的表的统一前缀
mybatis-plus:
	global-config:
		db-config:
			table-prefix: tbl_

9、MybatisPlus 插件是默认将 id 作为主键,如果表中的主键不叫 id ,而叫 uid ,则并不会建立起主键映射。可以在实体类的主键属性,用 @TableId 来标识。这样MybatisPlus则会把 这个属性所对应的字段指定为主键。

10、 @TableId 注解的 value 属性用于指定主键的字段。(当实体类中的属性与 数据库中的字段不匹配的时候用到),而 @TableId 注解的 type 属性用于设置主键的生成策略(默认是 type=IdType.ASSIGN_ID 雪花策略)。

11、MybatisPlus 主键 默认使用 雪花算法 自动递增。如果不需要用,则需要声明 @TableId( type = IdType.AUTO ),或者在全局配置yml中设置:

#设置实体类所对应的表的统一前缀
mybatis-plus:
	global-config:
		db-config:
			id-type:auto

12、雪花算法(非常适用于分布式的架构)
①背景:需要选择合适的方案去应对数据规模的增长,以应对逐渐增长的访问压力和数据量。数据库的扩展方式主要包括:业务分库、主从复制,数据库分表。
②雪花算法是由Twitter公布的分布式主键生成算法,它能够保证不同表的主键的不重复性,以及相同表的主键的有序性(后添加的数据id 值肯定比之前添加数据的 id 值要大)。
③优点:整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞,并且效率较高。

13、MybatisPlus 针对于驼峰命名法,不需要进行额外的配置,自动识别。

14、如果实体属性名与数据库字段名不一致,可以使用 @TableField( value = "字段名“ ) 注解来进行映射。

@TableField(vaule="user_name")
private String name;

15、@TableLogic 注解
①物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除的数据
②逻辑删除:假删除,将对应数据中代表是否被删除字段的状态修改为"被删除状态”,之后在数据库中仍旧能看到此条数据记录
③使用场景:可以进行数据恢复
④实现逻辑删除:
(1)数据库中添加字段 is_deleted ,int 默认为0。
(2)实体类中添加属性 isDeleted,再当前属性上添加注解 @TableLogic

16、条件构造器 Wrapper
①queryWrapper:可以使用链式法则
(1)查询条件
alt
(2)排序条件
alt
(3)删除条件
alt
(4)修改条件:update(user,queryWrapper) 方法中第一个参数user 来指明要修改的字段, 第二个参数queryWrapper 用来指明修改条件。
alt
(5)查询指定条件:
alt
(6)子查询:
alt
(7)自定义查询条件:判断用户从前台传过来的查询条件都是什么
alt
②updateWrapper:
(1)修改指定用户信息:第一个wrapper 用来指定要修改的用户条件,第二个wrapper用来说明修改哪些信息。(updateWrapper 不用像queryWrapper 那样重新new 一个实体。)
alt
③LambdaQueryWrapper
(1)条件查询:(作用:防止数据库字段名写错,用 User ::getXXX 方式代替 “XXX” 方式表示数据库字段)alt
④LambdaUpdateWrapper
alt

17、条件优先级:lambda 中的条件优先执行。
alt
18、使用condition组装条件(同test09)
第一个参数是一个boolean类型的判断,第二个参数是数据库字段、第三个参数是需要判断的前台传入数据。
alt
19、分页插件
①配置步骤:(1)创建MybatisPlusConfig 配置类 (2)创建 MybatisPlusInterceptor 拦截器方法,并添加分页拦截器,指定要进行分页的数据库类型。
alt
②效果:
alt
alt
③page 对象中封装的方法:
alt
alt
④自定义查询条件分页
(1)在mapper中先定义方法,指明自定义的条件
alt
(2)在mapper.xml中完善sql 语句
alt
(3)测试方法
alt

20、乐观锁插件
①乐观锁实现流程:
(1)数据库中添加version字段
(2)取出记录时,获取当前version
alt
(3)更新时,version+1 ,如果where 语句中version 版本不对,则更新失败。
alt
②MybatisPlus 实现乐观锁
(1)需要把数据库字段version ,所对应的实体类字段version ,上面添加注解@Version
(2)并且需要在MybatisPlusConfig 配置类中添加乐观锁拦截器。

interceptor.addInnerInterceptor(new optimisticLockerInnerInterceptor());

21、通用枚举
①数据库中添加sex字段
②创建SexEnum 类,标明枚举类型,并且在属性上添加 @EnumValue 注解。并在User 实体类中添加sex 属性。
alt
alt

③在配置类yml 开启扫描通用枚举
alt
④测试
alt

22、代码生成器
①引入依赖:

<dependency>
	<groupId>com.baomidou</groupId>
	<artifactId>mybatis-plus-generator</artifactId>
	<version>3.5.1</version>
</dependency>
<dependency>
	<groupId>org.freemarker</groupId>
	<artifactId>freemarker</artifactId>
	<version>2.3.31</version>
</dependency>

②快速生成:创建FastAutoGeneratorTest 类。复制官方代码。

23、mybatisX插件(基于IDEA 插件)
①使用mybatisX 插件生成代码之前,需要在IDEA 中连接上相应操作的数据库。
②操作:
alt

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值