springboot整合mybatisplus

springboot整合mybatisplus

1.新建springboot项目 导入依赖

注:注释部分可根据自身实际情况引入

   
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.10</version>
        <relativePath/>
    </parent>

    <dependencies>
<!--时间模版注册-->
<!--        <dependency>-->
<!--            <groupId>com.fasterxml.jackson.datatype</groupId>-->
<!--            <artifactId>jackson-datatype-jsr310</artifactId>-->
<!--            <version>2.13.0</version>-->
<!--        </dependency>-->


        <!--        解决datetime转成lacaltime的映射问题-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-typehandlers-jsr310</artifactId>
            <version>1.0.1</version>
        </dependency>

<!--web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
<!--测试-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <!--<scope>test</scope>-->
        </dependency>

        <!--mybatis-plus springboot 启动器-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.18</version>
            <scope>runtime</scope>
        </dependency>
        <!--jdbc-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <!--druid连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.10</version>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


yml文件配置
application.yml:

server:
  port: 8080
spring:
#  jackson:
#    date-format: yyyy-MM-dd HH:mm:ss  #配置全局 时间格式化 不灵活 所有我不用
#    time-zone: GMT+8
  thymeleaf:
    cache: false
  # 配置mysql
  datasource:
    username: root
    password: 1234
    url: jdbc:mysql://127.0.0.1:3306/mes?useSSL=false
    driver-class-name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
mybatis-plus:
  type-aliases-package: com.dk.model #定义别名包 将实体对象的包路径进行封装
  mapper-locations: classpath:mapper/*.xml  #添加xml文件的依赖
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  #配置MyBatis日志
#    map-underscore-to-camel-case: true   #开启驼峰映射 ,默认就是true
  global-config:
    db-config:
      table-prefix: tb_ #配置MyBatis-Plus全局表前缀
#      id-type: assign_id #id为雪花算法生成
#      update-strategy: not_null #更新策略,只更新非空字段

二、配置类

配置分页插件 乐观锁插件 以及阻断器(防止意外进行全表更新、删除)

@Configuration
public class MpConfig {

//    MyBatisPlus Interceptor

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        //初始化核心插件
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();

        //攻击 SQL 阻断解析器 .加入解析 作用:阻止恶意的 全表 更新 删除
        mybatisPlusInterceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());

        //分页插件
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
//        new PaginationInnerInterceptor(DbType.MYSQL);// 可以使用这个对象设置分页上限 .setMaxLimit(1000L)
        //乐观锁插件
        mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return mybatisPlusInterceptor;
    }
}

配置时间的自动填充功能 不涉及可以不写

package com.dk.config;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.util.Date;

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

//    自动填充配置
    @Override
    public void insertFill(MetaObject metaObject) {
//        配置创建时间 注意 时间的类型  LocalDateTime
        this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
    }

//    配置修改时间
    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime",LocalDateTime.class,metaObject);
    }
}

**使用LambdaQueryWrapper构建条件 **

package com.dk.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dk.model.TbHotel;
import com.dk.mapper.TbHotelMapper;
import com.dk.service.ITbHotelService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author 张宏
 * @since 2023-11-07
 */
@Service
public class TbHotelServiceImpl extends ServiceImpl<TbHotelMapper, TbHotel> implements ITbHotelService {

    @Autowired
    private TbHotelMapper hotelMapper;

    @Override
    public List<TbHotel> findAll() {
        List<TbHotel> tbHotels = hotelMapper.selectList(null);
        return tbHotels;
    }

    @Override
    public List<TbHotel> findByNameAndPriceAndAddress(String name, Integer Maxprice, Integer Minprice,String city) {
//        构建wrapper
        LambdaQueryWrapper<TbHotel> lambdaQueryWrapper = new LambdaQueryWrapper<>();
//        如果name 不为空 构建 name条件
        if (StringUtils.isNotBlank(name)) {
            lambdaQueryWrapper.like(TbHotel::getName,name);
        }
//        用于判断一个字符串是否非空、非null,并且去除首尾空格后是否还有字符。如果字符串满足这些条件
        if (StringUtils.isNotBlank(city)){
            lambdaQueryWrapper.like(TbHotel::getCity,city);
        }
        if (Maxprice != null && Minprice != null ){
            lambdaQueryWrapper.le(TbHotel::getPrice,Maxprice)
                    .ge(TbHotel::getPrice,Minprice);
        }
//        添加分组
//        lambdaQueryWrapper.groupBy(TbHotel::getBrand);
//        添加排序 第一个参数表示清空之前的排序条件 第二个参数表示是按照价格字段升序排列 false表示降序排列
        lambdaQueryWrapper.orderBy(true,true,TbHotel::getPrice);
        List<TbHotel> tbHotels = hotelMapper.selectList(lambdaQueryWrapper);
//        加上分页
        Page<TbHotel> page = new Page<>(1,5);
        Page<TbHotel> tbHotelPage = hotelMapper.selectPage(page, lambdaQueryWrapper);
        return tbHotels;
    }

    @Override
    public List<TbHotel> findByName(String name) {
        LambdaQueryWrapper<TbHotel> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.like(TbHotel::getName,name);
        List<TbHotel> tbHotels = hotelMapper.selectList(lambdaQueryWrapper);
        return tbHotels;
    }
}

条件构造器的用法

条件构造器的用法:QueryWrapper和LambdaQueryWrapper通常用来构建select、delete、update的where条件部分UpdateWrapper和LambdaUpdateWrapper通常只有在set语句比较特殊才使用尽量使用LambdaQuerywrapper和LambdaUpdateWrapper,避免硬编码条件构造器的用法:QueryWrapper和LambdaQueryWrapper通常用来构建select、delete、update的where条件部分UpdateWrapper。LambdaUpdateWrapper句比较特殊才使用尽量使用LambdaQuerywrapper和LambdaUpdateWrapper,避免硬编码

QueryWrapper中常用的方法及说明

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值