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,避免硬编码