吉林学校网站建设沈阳建信建设工程有限公司位置
目录
快速搭建环境
引入依赖
实现接口
常见注解
常见配置
核心功能
自定义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/Shanghaidriver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: 123456
logging:level:com.itheima: debugpattern:dateformat: HH:mm:ss
mybatis-plus:type-aliases-package: com.itheima.mp.domain.pomapper-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
:主要用于执行带有条件的更新操作,特别适合于那些需要根据特定条件修改记录的场合。与传统的更新方法相比,它能提供更强的灵活性和更高的安全性。
@Testvoid 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=truedriver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: MySQL123
性能将大大提升