主页 > 手机  > 

MybatisPlus的简单应用与常见功能

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的。

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

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

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

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

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

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

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

INPUT:手动生成id

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

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

成员变量名与数据库字段名不一致成员变量是以isXXX命名,按照JavaBean的规范,MybatisPlus识别字段时会把is去除,这就导致与数据库不符。成员变量名与数据库一致,但是与数据库的关键字冲突。使用@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

性能将大大提升

标签:

MybatisPlus的简单应用与常见功能由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“MybatisPlus的简单应用与常见功能