MybatisPlus的简单应用与常见功能

目录

快速搭建环境

引入依赖

实现接口

常见注解

常见配置

核心功能

自定义SQL

批量新增


快速搭建环境

引入依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.3.1</version>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.11</version>
        </dependency>
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-openapi2-spring-boot-starter</artifactId>
            <version>4.1.0</version>
        </dependency>

实现接口

自定义的service实现MybatisPlus提供的IService接口(泛型是实体类)

自定义的ServiceImpI实现MybatisPlus提供的IServiceImpI接口(泛型是实体类)

自定义的Mapper实现MybatisPlus提供的BaseMapper接口(泛型是实体类)

在在application.yaml中修改jdbc参数为你自己的数据库参数

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mp?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456
logging:
  level:
    com.itheima: debug
  pattern:
    dateformat: HH:mm:ss
mybatis-plus:
  type-aliases-package: com.itheima.mp.domain.po
  mapper-locations: classpath*:mapper/**/*.xml

最后测试,可以成功集成MybatisPlus

常见注解

MybatisPlus是通过反射来推断出表的信息,从而生成SQL的。

  1. MybatisPlus会把PO实体的类名驼峰转下划线作为表名

  2. MybatisPlus会把PO实体的所有变量名驼峰转下划线作为表的字段名,并根据变量类型推断字段类型

  3. MybatisPlus会把名为id的字段作为主键

事实上,我们可以在建表的时候不遵循这些约定,可以通过一些注解来应用。

@TableName:表名注解,标识实体类对应的表,一般在表名和实体类名不相同下使用。

@TableId:主键注解,标识实体类中的主键字段。可以通过主键增长类型。

AUTO:利用数据库的id自增长

INPUT:手动生成id

ASSIGN_ID:雪花算法生成Long类型的全局唯一id,这是默认的ID策略

@TableField:普通字段注解。一般情况下我们并不需要给字段添加@TableField注解,一些特殊情况除外。

  1. 成员变量名与数据库字段名不一致
  2. 成员变量是以isXXX命名,按照JavaBean的规范,MybatisPlus识别字段时会把is去除,这就导致与数据库不符。
  3. 成员变量名与数据库一致,但是与数据库的关键字冲突。使用@TableField注解给字段名添加转义字符:``

常见配置

实体类的别名扫描包,全局id类型

mybatis-plus:
  type-aliases-package: com.itheima.mp.domain.po # 包下是实体类
  global-config:
    db-config:
      id-type: auto # 全局id类型为自增长

MyBatisPlus也支持手写SQL的,而mapper文件的读取地址可以自己配置

mybatis-plus:
  mapper-locations: "classpath*:/mapper/**/*.xml" # Mapper.xml文件地址,当前这个是默认值。

核心功能

MybatisPlus又提供了一套基于Lambda的Wrapper,包含两个:

LambdaQueryWrapper

LambdaUpdateWrapper

LambdaQueryWrapper:适用于需要动态构建查询条件的场景,特别是在查询条件复杂多变的情况下。利用 Lambda 表达式可以有效减少由于手写 SQL 或者条件字段字符串带来的错误风险。

LambdaUpdateWrapper:主要用于执行带有条件的更新操作,特别适合于那些需要根据特定条件修改记录的场合。与传统的更新方法相比,它能提供更强的灵活性和更高的安全性。

    @Test
    void testLambdaQueryWrapper(){
        //1.构建查询条件
        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>()
                .select(User::getId,User::getUsername,User::getInfo,User::getBalance)
                .like(User::getUsername,"o")
                .ge(User::getBalance,1000);
        //2.查询
        List<User> users = userMapper.selectList(wrapper);
        users.forEach(System.out::println);
    }

自定义SQL

利用Wrapper生成查询条件,再结合Mapper.xml编写SQL。

批量新增

IService中的批量新增功能使用起来非常方便。

@Test
void testSaveBatch() {
    // 准备10万条数据
    List<User> list = new ArrayList<>(1000);
    long b = System.currentTimeMillis();
    for (int i = 1; i <= 100000; i++) {
        list.add(buildUser(i));
        // 每1000条批量插入一次
        if (i % 1000 == 0) {
            userService.saveBatch(list);
            list.clear();
        }
    }
    long e = System.currentTimeMillis();
    System.out.println("耗时:" + (e - b));
}

MySQL的客户端连接参数中有这样的一个参数:rewriteBatchedStatements。顾名思义,就是重写批处理的statement语句。

修改项目中的application.yml文件,在jdbc的url后面添加参数&rewriteBatchedStatements=true。

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mp?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: MySQL123

性能将大大提升

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值