Springboot整合Mybatis-plus,进行数据库操作

		Springboot整合Mybatis-plus,进行数据库操作

一:引入相关jar包

 <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.27</version>
    </dependency>

    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.5.0</version>
    </dependency>

二、application.yml配置:

在这里插入图片描述

mybatis-plus:
  configuration:
    map-underscore-to-camel-case: true # 开启驼峰命名
    auto-mapping-behavior: full
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句
  type-aliases-package: com.iflytek.product.productservice.modules.entity #实体类包
  mapper-locations: classpath*:/com/iflytek/product/productservice/modules/mapper/xml/*Mapper.xml
  global-config:
    # 逻辑删除配置
    db-config:
      # 删除前
      logic-not-delete-value: 1
      # 删除后
      logic-delete-value: 0

难点:mapper-locations的配置
classpath指目录到java或者resource

2.1. xml放在java目录下的,项目结构如图所示:
在这里插入图片描述

mapper-locations: classpath*:/com/iflytek/product/productservice/modules/mapper/xml/*Mapper.xml

2.2 xml放在resource目录下,项目结构如下图所示:
在这里插入图片描述
则:
mapper-locations: classpath*:mapper/xml/*Mapper.xm

三 、SpringBoot启动类上增加@MapperScan注解
在这里插入图片描述
备注:
@MapperScan 注解和 mybatis.mapper-locations 配置两者缺一不可
@MapperScan(basePackages=“xxx.xxx.xxx”) 这个注解是用户扫描 mapper 接口的,也就是dao类;
mybatis.mapper-locations 配置是用于扫描 mapper.xml 的;
两者用途不同,故缺一不可

四、Mybatis-plus简单使用

项目截图如图所示:
在这里插入图片描述
Mybatis-plus封装了单表的增删改查,因此单表可以用java代码简化操作,xml中不用写sql,service层和mapper层都可以,但xml文件还是要有的,如果是多表操作,就需要在xml中写sql
在这里插入图片描述
service层:

接口:
在这里插入图片描述
实现类:
在这里插入图片描述
dao层
Mapper接口

在这里插入图片描述
实体类:

  1. 实体类上不使用@TableName注解
    这种情况,就需要实体类使用驼峰命名,表名由驼峰转化为中间加个横线命名,例如实体类ProductInfo, 数据库表名product_info,这种情况下mypatis-plus能进行单表的增删改查

eg:
数据库表名: product_info
在这里插入图片描述
实体类:
在这里插入图片描述
postman调用
在这里插入图片描述
在这里插入图片描述
当数据表名不是实体类中间加横线转化的,则不行,如图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
mybatis-plus就会找不到对应的表,此时实体类就需要使用@TableName注解

4.2 当数据库表名与实体类驼峰转化中间加横线对应获取的表名不一致时,使用@TableName注解使用
例如: 实体类ProductInfo,默认对应的表名product_info,而实际数据库表名为t_product_info

数据库表:
在这里插入图片描述
实体类:
在这里插入图片描述
postman调用:
在这里插入图片描述
4.2 数据库主键注解 @TableId
自增:

postman调试
在这里插入图片描述
在这里插入图片描述
4.3 实体类变量不是按照数据库字段驼峰命名时
主键:
在这里插入图片描述
非主键:
在这里插入图片描述
4.4 exist 表示是否为是数据库字段
在VO DTO的时候,经常会查询一些数据库中没有的字段,如果没有打上标签

那么查询会报错(如果实体类中的成员变脸在数据库中没有对应字段,可以视同)

需要设置为false
在这里插入图片描述
select 表示是否查询该字段
加上不参与查询,并且返回null
在这里插入图片描述
fill 表示是否自动填充
将对象存入数据的时候,由mybatisplus自动给某些字段赋值

应用场景

create_time update_time

比如说注册的时间和修改时间是基本上每个表都会用到的,实现起来就是获取时间存入,

但是就是烦

那么就交给mp来做 (采取以下配置,并且需要创建处理器)
在这里插入图片描述
DEFAULT --默认不处理

INSERT --插入时填充字段(第一次添加的时候)

INSERT_UPDATE --插入和更新时填充字段

(最近一次更新的时候,也就是插入和更新都满足)

UPDATE --更新时填充字段
在这里插入图片描述
创建自动填充处理器
在这里插入图片描述
在这里插入图片描述
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

/**
 * 在插入的时候响应相关操作
 * @param metaObject
 */
@Override
public void insertFill(org.apache.ibatis.reflection.MetaObject metaObject) {

/**

  • 大意是将当前的时间赋值给字段名 也就是参数2 赋值给参数1 metaObject 可理解为当前传入对象

  • 人话:就是给当前传入对象赋值
    */
    setFieldValByName(“createTime”,new Date(),metaObject);
    setFieldValByName(“updateTime”,new Date(),metaObject);
    }

    /**

    • 在插入的时候响应相关操作
    • @param metaObject
      */
      @Override
      public void updateFill(org.apache.ibatis.reflection.MetaObject metaObject) {
      setFieldValByName(“updateTime”,new Date(),metaObject);
      }
      }
      在这里插入图片描述
      在这里插入图片描述
      @Version
      标记乐观锁 -主修改操作

-防止数据被重复操作

-防止两个线程同时操作同一个数据,保证数据的安全性

原理:

标记乐观锁,通过version字段来保证数据的安全性,当修改数据的时候,

会以version作为条件,当条件成立的时候才会修改成功。

version=1

线程1: update … set version = 2 where version= 1

线程2: update … set version = 2 where version= 1

解释:

随便一条线程操作成功version 改为2 那么另一条线程就执行失败

环境搭建:

1.数据库添加version字段 默认值1
在这里插入图片描述
2.实体类添加version成员变量 天且添加@version
在这里插入图片描述
3.编写配置类
@Configuration
public class MyBatisPlusConfig {
/**
* @Configuration 加上就是配置类了
*
* @Bean 返回一个乐观锁拦截器的对象
*
* 大意就是会自动掉一个方法,然后通bean注解实例化对线,添加对象到IOC容器中
*/

@Bean
public OptimisticLockerInterceptor lockerInterceptor(){
    return new OptimisticLockerInterceptor();
}

}
在这里插入图片描述
测试
在这里插入图片描述
在这里插入图片描述
同时修改情况 -感兴趣的可以试一下
在这里插入图片描述
@EnumValue
通用的枚举类注解,将数据库字段映射成实体类的枚举类型成员变量

意识:将枚举改成成员变量和数据库的字段映射起来,根据数据库字段的值找到对应枚举的对象

—第一种通过注解的方式

1.数据库添加状态字段
在这里插入图片描述
2.新建枚举类
在这里插入图片描述
加入字段 -需要注意,一定要和数据库字段映射起
在这里插入图片描述
在配置文件中配置枚举包扫描
在这里插入图片描述
测试查询
在这里插入图片描述
第二种通过实现接口的方式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
插入操作变更
在这里插入图片描述
@TableLogic
映射逻辑删除

  1. 条件构造器
    LambdaQueryWrapper使用
    示例:
    在这里插入图片描述
    public ProductInfo selectByCode(String productCode) {
    LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
    queryWrapper.eq(ProductInfo::getProductCode,productCode);
    return productInfoMapper.selectOne(queryWrapper);
    }
    在这里插入图片描述
    LambdaUpdateWrapper在这里插入图片描述
    在这里插入图片描述
    LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>();
    updateWrapper.eq(PreInvestment::getId, id);
    updateWrapper.eq(PreInvestment::getInvestmentState, CommonConstant.REVIEW_FLOW_STAGE_7).or().eq(PreInvestment::getInvestmentState, CommonConstant.REVIEW_FLOW_STAGE_9);
    updateWrapper.eq(PreInvestment::getPrincipalCode, user.getUsername());
    updateWrapper.set(PreInvestment::getDelFlag, CommonConstant.STATUS_0);
    preInvestmentService.update(updateWrapper);

  2. Mybatis-plus分页配置
    //Spring boot方式
    @Configuration
    @MapperScan(“com.baomidou.cloud.service..mapper”)
    public class MybatisPlusConfig {

    // 旧版
    @Bean
    public PaginationInterceptor paginationInterceptor() {
    PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
    // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false
    // paginationInterceptor.setOverflow(false);
    // 设置最大单页限制数量,默认 500 条,-1 不受限制
    // paginationInterceptor.setLimit(500);
    // 开启 count 的 join 优化,只针对部分 left join
    paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
    return paginationInterceptor;
    }

    // 最新版
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
    return interceptor;
    }

}

参考文章:
Mybatis-plus官网:https://baomidou.com/pages/24112f/
Maven仓库地址: https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter/3.5.0
Mybatis-plus实体类注解使用:
https://blog.csdn.net/weixin_42526068/article/details/113039510
Mybatis-plus条件构造器
https://www.cnblogs.com/code-duck/p/13433809.html

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

懒羊羊--搞点小技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值