栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring-Boot整合MyBatis-Plus

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring-Boot整合MyBatis-Plus

搭建环境 引入依赖
 
     com.baomidou
     mybatis-plus-boot-starter
     3.5.1
 
添加配置文件

在.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 {

    
    @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();


    }
}

添加依赖

 
        
            com.baomidou
            mybatis-plus-boot-starter
            3.5.2
        

        
        
            com.baomidou
            mybatis-plus-generator
            3.5.2
        
        
            org.apache.velocity
            velocity-engine-core
            2.3
        
        
            org.freemarker
            freemarker
            2.3.30
        

        
            com.spring4all
            swagger-spring-boot-starter
            1.9.1.RELEASE
        

结果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1027665.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号