概述
目录
搭建环境
引入依赖
添加配置文件
测试
创建实体类
@TableId与@TableFiled
@TableName
引入日志
添加数据
主键值
AUTO
ASSIGN_ID(3)
ASSIGN_UUID(4)
删除数据
根据主键删除
逻辑删除
表中的逻辑字段
@TableLogic
添加逻辑列后再执行查找
修改数据
自动填充功能
查询数据
查询多条记录
QueryWrapper查询条件
单条件示例
编辑
多条件拼接示例
查询指定字段
查询一条记录
分页查询
连表分页查询
@TableFileld()
MyBatisPlus代码生成器
搭建环境
引入依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
添加配置文件
在.yml文件中
spring:
datasource:
#设置数据源类型
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/student?serverTimezone=Asia/Shanghai
username: root
password: 123456
测试
创建实体类
类名要与表名一致
@TableId与@TableFiled
@TableId用在属性上表示此属性对应表中的主键,@TableFiled对应表中的列名,如果属性名与表名一致可以省去注解
继承BaseMapper,里面定义了我们单表查询的几乎所有方法,直接调用,连SQL都省了。
传入的值是我么们操作的实体类;
测试
@TableName
设置表名
引入日志
MyBatisplus已经打包了日志,我们只需引用,引入日志可以直接看到SQL语句效果
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
添加数据
可以看到虽然添加成功可是主键却很奇怪,我们没有给他主键值,mybatis自动给我们生成了主键值,因为他提供了主键生成策略,我们可以指定他生成什么样的主键值。
主键值
mybatis提供如下策略: 递增策略,使用该策略要求数据库主键也设置了递增 AUTO(0), 没有策略,必须手动输入值 NONE(1), 也是没有策略,必须手动输入值 INPUT(2), 根据雪花算法,随机生成一个Long类型的值,该值一定是唯一,而且每次生成的都不同。适合分布式主键 ASSIGN_ID(3), 随机产生一个String的值,该值也是唯一的。 ASSIGN_UUID(4);
AUTO
ASSIGN_ID(3)
使用此策略注意:主键类型必须为Long,数据库主键类型最好为varchar或者bigint,要不然会数据过大导致添加不进去。
ASSIGN_UUID(4)
注意:实体类主键类型必须为String,数据库主键类型必须为varchar。
删除数据
根据主键删除
传入值可以是字符串或数值,如果是数值,这个方法默认的是整型,而我们定义的是长整型,超过了取值范围,要加上L转型。
逻辑删除
实际开发中: 我们的删除可能是逻辑删除。所谓的逻辑删除就是修改功能。把某个列修改以删除的状态值。
注意:只对自动注入的 sql 起效(mybatisplus自带的sql方法,自己写的不行)
插入: 不作限制---
查找: 追加 where 条件过滤掉已删除数据,且使用 wrapper.entity 生成的 where 条件会忽略该字段
更新: 追加 where 条件防止更新到已删除数据,且使用 wrapper.entity 生成的 where 条件会忽略该字段
删除: 转变为 更新
* (1)增加一个逻辑字段: isdeleted 0表示未删除 1表示删除.
(2)实体类上的字段添加 @TableLogic.
表中的逻辑字段
@TableLogic
此注解表示该字段为逻辑列
添加了该注解后,删除将不再删除数据,而是将字段的逻辑列更新为删除状态
添加逻辑列后再执行查找
修改数据
添加了逻辑注解后再执行
自动填充功能
在阿里规范中规定,我们每一张表必须具备
id(主键),
create_time(添加时间),
update_time(修改时间)
这三个字段
在实体类对应的字段上添加注解
@TableField(fill = FieldFill.INSERT)
@TableField(fill =FieldFill.UPDATE )
定义一个自动填充类MyMetaObjectHandler,让自动填充去调取
官网给了很多方法,对应不同版本,选择适合自己的
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
//当添加时自动填充的值
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill ....");
// 或者
this.strictInsertFill(metaObject, "gmtCreated", () -> LocalDateTime.now(), LocalDateTime.class); // 起始版本 3.3.3(推荐)
}
//当修改时自动填充的值
@Override
public void updateFill(MetaObject metaObject) {
log.info("start update fill ....");
// 或者
this.strictUpdateFill(metaObject, "gmtUpdated", () -> LocalDateTime.now(), LocalDateTime.class); // 起始版本 3.3.3(推荐)
}
}
测试
调用修改方法
调用插入方法同理
自动填充逻辑列值
只是用来示例多条自动填充怎么定义
查询数据
Wrapper中封装了关于查询的各种条件方法,
有三个子类最常用:
QueryWrapper查询条件
UpdateWrapper修改条件
LambdaQueryWrapper查询使用lambda表达式条件
查询多条记录
QueryWrapper查询条件
QueryWrapper里面封装了查询的条件:
eq 相当于 =
gt 相当于 >
lt 相当于 <
ge 相当于 >=
le 相当于 <=
between 范围
and 多条件
or 或
like 模糊查询a
likeRight 右模糊查询 like "a%"
likeLeft 左模糊查询 like "%a"
总之只要where后能有的他全都有
单条件示例
多条件拼接示例
注意
查询指定字段
wrapper.select("name");
查询一条记录
和多条件一样,除了调用的方法
分页查询
创建分页调用类:MybatisPlusConfig
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MybatisPlusConfig {
/**
* 新的分页插件,一缓和二缓遵循mybatis的规则,
* 需要设置 MybatisConfiguration#useDeprecatedExecutor = false
* 避免缓存出现问题(该属性会在旧插件移除后一同移除)
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
测试
连表分页查询
@TableFileld()
@TableField(exist=false) 用来标识属性是否在数据表中存在,
false不存在,true存在
MyBatisPlus并没有提供连表查询的方法,需要自己写,和mybatis一样写法
定义方法
sql语句
测试
MyBatisPlus代码生成器
配置文件
public class CodeGenerator {
public static void main(String[] args) {
FastAutoGenerator.create("jdbc:mysql://localhost:3306/student?serverTimezone=Asia/Shanghai", "root", "123456")
.globalConfig(builder -> {
builder.author("ytr") // 设置作者
.enableSwagger() // 开启 swagger 模式
.fileOverride() // 覆盖已生成文件
.outputDir("./src/main/java"); // 指定输出目录
})
.packageConfig(builder -> {
builder.parent("com") // 设置父包名
.moduleName("ytr") // 设置父包模块名
.pathInfo(Collections.singletonMap(OutputFile.xml, "./src/main/resources/mapper")); // 设置mapperXml生成路径
})
.strategyConfig(builder -> {
builder.addInclude("banji")
.addInclude("account") // 设置需要生成的表名
.addTablePrefix("t_", "c_"); // 设置过滤表前缀
})
.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
.execute();
}
}
添加依赖
<!--mybatisplus依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<!--代码生成器依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.30</version>
</dependency>
<dependency>
<groupId>com.spring4all</groupId>
<artifactId>swagger-spring-boot-starter</artifactId>
<version>1.9.1.RELEASE</version>
</dependency>
结果
最后
以上就是魁梧香菇为你收集整理的Spring-Boot整合MyBatis-Plus搭建环境测试引入日志 添加数据 删除数据修改数据自动填充功能查询数据分页查询 连表分页查询MyBatisPlus代码生成器 的全部内容,希望文章能够帮你解决Spring-Boot整合MyBatis-Plus搭建环境测试引入日志 添加数据 删除数据修改数据自动填充功能查询数据分页查询 连表分页查询MyBatisPlus代码生成器 所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复