百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

Spring Boot使用mybatis-plus

wptr33 2025-03-06 20:08 23 浏览

前言:

MyBatis-Plus(简称MP)是一个MyBatis的增强工具,在MyBatis的基础上进行了扩展,旨在简化MyBatis的操作并提高开发效率。适用于各种需要进行数据库操作的场景,特别是需要频繁进行CRUD操作的场景。它简化了MyBatis的使用,使得开发者可以更加专注于业务逻辑的实现,而不是过多关注底层的数据库操作。

一、主要特性

  • 无侵入性:MyBatis-Plus只做增强不做改变,引入它不会对现有工程产生影响。
  • 损耗小:启动即会自动注入基本CURD(Create、Read、Update、Delete),性能基本无损耗,直接面向对象操作。
  • 强大的CRUD操作:内置通用Mapper、通用Service,仅仅通过少量配置即可实现单表大部分CRUD操作,更有强大的条件构造器,满足各类使用需求。
  • 支持Lambda形式调用:通过Lambda表达式,方便地编写各类查询条件,无需再担心字段写错。
  • 支持主键自动生成:支持多达4种主键策略(内含分布式唯一ID生成器-Sequence),可自由配置,完美解决主键问题。
  • 支持ActiveRecord模式:实体类只需继承Model类即可进行强大的CRUD操作。
  • 支持自定义全局通用操作:支持全局通用方法注入(Write once, use anywhere)。
  • 内置代码生成器:采用代码或者Maven插件可快速生成Mapper、Model、Service、Controller层代码,支持模板引擎,还有超多自定义配置。
  • 内置分页插件:基于MyBatis物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通List查询,支持多种数据库。
  • 内置性能分析插件:可输出Sql语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询。
  • 内置全局拦截插件:提供全表delete、update操作智能分析阻断,也可自定义拦截规则,预防误操作。

二、框架结构

MyBatis-Plus的框架结构主要包括以下几个部分:

  • 核心模块:包括BaseMapper接口、BaseService接口等,提供了基础的CRUD操作。
  • 条件构造器:用于构建复杂的查询条件,包括SelectOne、SelectList、SelectPage、Update、Delete等方法。
  • 代码生成器:可以自动生成Mapper、Model、Service、Controller等层的代码,提高开发效率。
  • 插件体系:包括分页插件、性能分析插件、全局拦截插件等,提供了丰富的扩展功能。

三:使用示例

创建springboot项目,引入mvn依赖,配置....

项目结构:


  • 1.引入依赖
      
      
            org.springframework.boot
            spring-boot-starter-web
      
      
      
          mysql
          mysql-connector-java
      
      
      
            com.baomidou
            mybatis-plus-boot-starter
      
      
      
            org.projectlombok
            lombok
      
  • 2.配置yml文件
spring:
	datasource:
		driver-class-name: com.mysql.cj.jdbc.Driver
		url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
		username: root
		password: 123456

#mybatis-plus配置
mybatis-plus:
		# 不支持多包, 如有需要可在注解配置 或 提升扫包等级
		# 例如 com.**.**.mapper
		mapperPackage: com.study.mapper
		# 对应的 XML 文件位置
		mapperLocations: classpath*:mapper/*Mapper.xml
		# 实体扫描,多个package用逗号或者分号分隔
		typeAliasesPackage: com.study.domain
		global-config:
			dbConfig:
			# 主键类型
			# AUTO 自增 NONE 空 INPUT 用户输入 ASSIGN_ID 雪花 ASSIGN_UUID 唯一 UUID
			# 如需改为自增 需要将数据库表全部设置为自增
			idType: ASSIGN_ID
			configuration:
					#sql执行日志
						log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  • 3.创建实体
@Data
@TableName("t_user")
public class User {
    @TableId
    private Long id;
    private String name;
    private Integer age;
}
  • 4.创建mapper接口,继承mybatis-plus提供BaseMapper接口
@Mapper
public interface UserMapper extends BaseMapper {
}
  • 5.创建service接口,继承mybatis-plus提供IService接口
public interface IUserService extends IService {
}
  • 6.创建service实现类,继承mybatis-plus提供ServiceImpl类
@Service
public class UserServiceImpl extends ServiceImpl implements IUserService {
}
  • 7.初体验

a.controller:

@RestController
@RequiredArgsConstructor
public class UserController {

			private final IUserService userService;

      @GetMapping("/query/{id}")
      public User queryById(@PathVariable Integer id) {
      		return userService.getById(id);
			}
}

b.数据库:


c.结果:



四:其他用法

  • 1.lambda用法

a.代码示例:根据名称模糊搜索

@RestController
@RequiredArgsConstructor
public class UserController {

			private final IUserService userService;

      @GetMapping("/queryName")
      public List queryName(String name) {
          LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
          lqw.like(!StringUtils.isBlank(name), User::getName, name);
          return userService.list(lqw);
      }
}

b.结果



  • 2.分页

a.创建配置类

@Configuration
public class MybatisPlusConfig {

      @Bean
      public MybatisPlusInterceptor paginationInterceptor() {
            MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
            //分页插件
            interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
            return interceptor;
      }

}

b.代码示例

@RestController
@RequiredArgsConstructor
public class UserController {

			private final IUserService userService;

      @GetMapping("/queryPage")
      public IPage queryPage(String name) {
          LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
          lqw.like(!StringUtils.isBlank(name), User::getName, name);
          IPage page = new Page<>();
          page.setCurrent(1);
          page.setSize(10);
          IPage result = userService.page(page, lqw);
      return result;
      }
}

c.结果


还有非常多的用法 ,自行试试


相关推荐

深度剖析 MySQL 数据库索引失效场景与优化策略

在互联网软件开发领域,MySQL数据库凭借其开源、高效等特性被广泛应用。而索引,作为提升MySQL查询性能的关键利器,能大幅加速数据检索。然而,在实际开发中,即便精心创建了索引,却常常遭遇索引失...

15分钟,带你了解indexedDB,这个前端存储方案很重要!

原文来源于:程序员成长指北;作者:Django强哥如有侵权,联系删除最近在给前端班授课,在这次之前的最后一次课已经是在2年前,2年的时间,前端的变化很大,也是时候要更新课件了。整理客户端存储篇章时模糊...

MySQL 面试总被问到的那些问题,你都懂了吗?

事务的四大特性是什么?首先得提一下ACID,这可是数据库事务的灵魂所在:原子性(Atomicity):要么全部成功,要么全部失败回滚。一致性(Consistency):确保数据在事务前后都处于一致状态...

Java 字符串常见的操作_java字符串总结

在Java当中,为字符串类提供了丰富的操作方法,对于字符串,我们常见的操作就是:字符串的比较、查找、替换、拆分、截取以及其他的一些操作。在Java中,有String,StringBuffer和St...

java学习分享:Java截取(提取)子字符串(substring())

在String中提供了两个截取字符串的方法,一个是从指定位置截取到字符串结尾,另一个是截取指定范围的内容。下面对这两种方法分别进行介绍。1.substring(intbeginIndex)形...

你必须知道的 7 个杀手级 JavaScript 单行代码

1.如果你需要一个临时的唯一ID,请生成随机字符串。这个例子将为你生成一个随机字符串:constrandomString=Math.random().toString(36).slice(2)...

MySQL 索引失效:原因、场景与解决方案

在互联网软件开发领域,MySQL作为一款广泛使用的关系型数据库,其性能优化至关重要。而索引,作为提升MySQL查询性能的关键手段,一旦失效,会导致查询效率大幅下降,影响整个系统的性能。今天,就来...

Axure9 教程:可模糊搜索的多选效果

一、交互效果说明1.点击话题列表中的话题选项,上方输入框内显示选择的话题标签,最多可选择5个标签,超出将有文字提示。2.点击输入框内已选择的话题标签的删除按钮,可以删除已选择的话题标签,并且该标签返回...

JavaScript字符串操作方法大全,包含ES6方法

一、charAt()返回在指定位置的字符。...

为什么MySQL索引不生效?来看看这8个原因

在数据库优化中,最让人头疼的事情之一莫过于精心设计的索引没有发挥作用。为什么会出现这种情况?这篇文章带大家一起探讨一些常见原因,方便大家更好地理解MySQL查询优化器是如何选择索引的,以及在出现类...

Kettle实现rabbitMQ的生产与消费_rabbitmq不支持顺序消费

文章目录一、Kettle为什么可以读取流数据?...

MySQL高频函数Top10!数据分析效率翻倍,拒绝无效加班!

引言:为什么你的SQL代码又臭又长?“同事3行代码搞定的事,你写了30行?”“每次处理日期、字符串都抓狂,疯狂百度?”——不是你不努力,而是没掌握这些高频函数!本文精炼8年数据库开发经验,总结出10个...

mysql的截取函数用法详解_mysql截取指定字符

substring()函数测试数据准备:用法:以下语法是mysql自动提示的1:substirng(str,pos):从指定位置开始截取一直到数据完成str:需要截取的字段的pos:开始截取的位置。从...

MySQL函数:字符串如何截取_mysql 字符串截取函数

练习截取字符串函数(五个)mysql索引从1开始...

数据集成产品分析(一)_数据集成工具有哪些

编辑导语:数据集成产品是数据中台建设的第一环节,在构建数据中台或大数据系统时,首先要将企业内部各个业务系统的数据实现互联互通,从物理上打破数据孤岛。本文作者对数据集成产品进行了分析,一起来看一下吧。数...