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

MybatisPlus学习要点记录(更新中)

一、MybatisPlus是什么?

MybatisPlus官网:https://baomidou.com/

由官网定义可知:

1、MP不是为了取代Mybatis,是Mybatis的搭档,是协作完成需求;

2、MP是为了简化Mybatis的开发,提高效率。

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

二、快速入门

(一)创建一个SpringBoot项目MPDemo

(二)导入MP的起步依赖

注:引入MP的起步依赖,实则已经包含了Mybatis的起步依赖。

        <!-- 导入MybatisPlus的起步依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.10.1</version>
        </dependency>
        <!-- 导入lombook起步依赖-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
            <scope>provided</scope>
        </dependency>
        <!-- 导入mysql的起步依赖-->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>

(三)创建测试数据库

数据库脚本如下:

# 创建数据库mpdemo
create database mpdemo;

# 使用数据库mpdemo
use mpdemo;

DROP TABLE IF EXISTS `user`;

# 创建表user
CREATE TABLE `user`
(
    id BIGINT NOT NULL COMMENT '主键ID',
    name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
    age INT NULL DEFAULT NULL COMMENT '年龄',
    email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
    PRIMARY KEY (id)
);

# 为user表插入数据
INSERT INTO `user` (id, name, age, email) VALUES
                                              (1, 'Jone', 18, 'test1@baomidou.com'),
                                              (2, 'Jack', 20, 'test2@baomidou.com'),
                                              (3, 'Tom', 28, 'test3@baomidou.com'),
                                              (4, 'Sandy', 21, 'test4@baomidou.com'),
                                              (5, 'Billie', 24, 'test5@baomidou.com');

(四)配置application.yml

数据库连接配置

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mpdemo
    username: root
    password: root

(五)创建实体类User

@Data
@TableName("`user`")
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

(六)创建数据访问层UserMapper

@Mapper
public interface UserMapper extends BaseMapper<User> {

}

(七)创建测试类SampleTest

@SpringBootTest
public class SampleTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testSelect() {
        System.out.println(("----- selectAll method test ------"));
        List<User> userList = userMapper.selectList(null);
        Assert.isTrue(5 == userList.size(), "");
        userList.forEach(System.out::println);
    }

}

(八)MP结果验证

三、MP常见注解

MP的原理:MP通过扫描实体类,并基于反射获取实体类信息作为数据库表信息。

(1)实体类名驼峰转下划线作为表名;

(2)名为id的字段作为主键;

(3)变量名驼峰转下划线作为表的字段名。

(一)@TableName注解

@TableName注解,用来指定表名。

(二)@TableId注解

@TableId注解,用来指定表中的主键字段信息。

@TableId(value = "id", type = ""),value为命名,type的类型有:

(1)IdType.AUTO:数据库自增长。

(2)IdType.INPUT:通过set方法自定输入。

(3)IdType.ASSIGN_ID:分配ID,接口IdentifierGenerator的方法nextId来生成id,默认实现类为DefaultIndentifierGenerator雪花算法。

(三)@TableFiled注解

@TableFiled注解,用来指定表中的普通字段信息。

常见的场景有:

(1)成员变量名与数据库字段名不一致;

(2)成员变量名以is开头,且是布尔值;

(3)成员变量名与数据库关键字冲突;

(4)成员变量不是数据库字段。

(四)示例

数据库表信息

实体类信息

/**
 * MP常用注解示例
 */
@TableName("tb_user")
public class User {

    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    @TableField("username")
    private String name;

    @TableField("is_married")
    private Boolean isMarried;

    @TableField("'order'")
    private Integer order;

    @TableField(exist = false)
    private String address;

}

(五)常见配置

MP的配置项继承了Mybatis原生配置,当然也有自身的新特性配置,例如:

# myabtis-plus信息配置
mybatis-plus:
  type-aliases-package: com.yassels.mpdemo.pojo # 别名扫描包
  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 # 更新策略,值更新非空字段

四、MP使用的基本流程

(1)导入MP的地步依赖;

(2)Mapper继承BaseMapper<User>;

(3)通过注解处理实体类与数据库表信息保持一致;

(4)Application.yml配置MP信息。

五、核心功能

(一)条件构造器

MP支持各种复杂的where条件:

 条件构造器的用法: 

(1)QueryWrapper和LambdaQueryWrapper通常用来构建select、delete、update的where条件部分;

(2)UpdateWrapper和LambdaUpdateWrapper通常只有在set语句比较特殊时才使用;

(3)尽量使用LambdaUpdateWrapper和LambdaQueryWrapper,避免硬编码。

(二)自定义SQL

利用MP的Wrapper来构建复杂的Where条件,然后自己定义SQL语句中剩下的部分。

(三)Service接口

相关文章:

  • 在使用 npm link 进行本地 npm 包调试时,是否需要删除项目中已安装的依赖包取决于你的调试场景和依赖管理方式
  • leetcode209------长度最小的子数组、滑动窗口
  • TCP/IP 5层协议簇:数据链路层(交换机工作原理)
  • nacos升级2.3.0-2.4.1
  • 【MySql】EXPLAIN执行计划全解析:15个字段深度解读与调优指南
  • 【深度学习】PyTorch v2.6 Overview
  • 设计后端返回给前端的返回体
  • 钉钉MAKE AI生态大会思考
  • C++ | 高级教程 | 泛型模板
  • 数据结构秘籍(一)线性数据结构
  • 注意力机制有哪些,原理是什么
  • 细说STM32F407单片机RS485收发通信实例及调试方法
  • wordpress使用CorePress主题设置项总结
  • Elasticsearch:使用经过训练的 ML 模型理解稀疏向量嵌入
  • Python Pandas带多组参数和标签的Oracle数据库批量数据导出程序
  • MySQL-MATCH ... AGAINST工具
  • linux--多进程开发(5)--进程间通信(IPC)、linux间通信的方式、管道
  • 全价值链数字化转型:以美的集团为例,探索开源AI大模型与S2B2C商城小程序源码的融合应用
  • MySQL之Redo Log:确保数据持久性和崩溃恢复
  • MySql 获取表结构的4中方法
  • 阿里巴巴怎么做网站/sem优化和seo的区别
  • 网站建设 面试/网络链接推广
  • 梅州建站联系方式/优化疫情防控
  • 没有公网ip做网站/北京网站优化平台
  • flash网站教程/单页网站seo优化
  • 深圳网站建设 公司元/网页设计网站建设