SpringBoot中整合MybatisPlus快速实现Mysql增删改查和条件构造器

场景

Mybatis-Plus(简称MP)是一个Mybatis的增强工具,只是在Mybatis的基础上做了增强却不做改变,MyBatis-Plus支持所有Mybatis原生的特性,

所以引入Mybatis-Plus不会对现有的Mybatis构架产生任何影响。MyBatis 增强工具包,简化 CRUD 操作。

启动加载 XML 配置时注入单表 SQL 操作 ,为简化开发工作、提高生产率而生。

MybatisPlus

MyBatis-Plus

特性

无侵入: 只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑

损耗小: 启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作强大的 CRUD 操作:

内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求

支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错

支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题

支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作

支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )

内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,

更有超多自定义配置等您来使用内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,

写分页等同于普通 List 查询

分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库

内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询

内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

注:

博客:
霸道流氓气质-CSDN博客

实现

1、新建SpringBoot项目,引入mybatisplus的依赖

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

注意这里不再需要引入Mybatis的依赖,mp已经包含。

这里还需要连接mysql,所以添加mysql的驱动

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

其它使用的依赖完整如下

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!--MySQL驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>

2、在application.yml配置文件中添加mp的配置项

mybatis-plus:# 指定 Mapper XML 文件的位置,使用 classpath 通配符指定路径mapper-locations: classpath:/mapper/**/*.xml# 指定实体类的包路径,用于自动扫描并注册类型别名type-aliases-package: com.badao.demo.entityglobal-config:db-config:id-type: input# 驼峰下划线转换(将数据库字段的下划线命名规则转换为 Java 实体类属性的驼峰命名规则)db-column-underline: true# 刷新 mapperrefresh-mapper: trueconfiguration:# 将 Java 实体类属性的驼峰命名规则转换为数据库字段的下划线命名规则map-underscore-to-camel-case: true# 查询结果中包含空值的列,在映射的时候,不会映射这个字段call-setters-on-nulls: true# 开启 sql 日志log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

这里着重修改mapper文件的位置以及实体类的包路径修改为对应。

更多配置参考官网说明:

使用配置 | MyBatis-Plus

3、添加插件配置文件

mp支持很多插件,比如这里引入分页插件,新建配置类

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MybatisPlusConfig {/*** 加载分页插件*/@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;}}

更多配置见官方文档

插件主体 | MyBatis-Plus

4、新建表t_user

DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user`  (`id` int NOT NULL AUTO_INCREMENT,`user_id` int NOT NULL,`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`age` int NOT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;SET FOREIGN_KEY_CHECKS = 1;

5、新建实体类User

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "t_user")
public class User implements Serializable {private static final long serialVersionUID = -5514139686858156155L;private Integer id;private Integer userId;private String name;private Integer age;@TableField(exist = false)private String address;}

这里让实体类与表名不一致,通过注解@TableName(value = "t_user")对应。

并且实体类新增一个表中没有的字段address,通过注解@TableField(exist = false)来声明。

更多注解使用方法参考官方文档

注解 | MyBatis-Plus

6、 Mapper层

BaseMapper<T>是mybatis-plus设计的一个接口,里面包含了单表的CRUD。

新建mapper并使其继承BaseMapper,则可直接调用CRUD的方法。

@Repository
public interface UserMapper extends BaseMapper<User> {}

那么可以直接调用

如果需要在Service层可以这样声明

import com.badao.demo.entity.User;
import com.baomidou.mybatisplus.extension.service.IService;public interface UserService extends IService<User> {}

Service实现

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements UserService {@AutowiredUserMapper userMapper;
}

调用示例

    @Autowiredprivate UserService userService;@Testvoid test1() {User byId = userService.getById(5);System.out.println(byId);}

这块可具体参考官方文档说明

CRUD 接口 | MyBatis-Plus

7、如果要实现条件构造器查询和更新

        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper();wrapper.eq(User::getName,"222");List<User> users = userMapper.selectList(wrapper);System.out.println(users);

具体参考官方文档说明

条件构造器 | MyBatis-Plus

8、要实现自定义sql

通过xml方式

mapper中新建方法

@Repository
public interface UserMapper extends BaseMapper<User> {Integer insertOne(User u);}

新建xml,xml中新建方法

<mapper namespace="com.badao.demo.mapper.UserMapper" ><resultMap id="resultMap" type="com.badao.demo.entity.User" ><id column="id" property="id" jdbcType="INTEGER" /><result column="user_id" property="userId" jdbcType="INTEGER" /><result column="name" property="name" jdbcType="VARCHAR" /><result column="age" property="age" jdbcType="INTEGER" /></resultMap><insert id="insertOne">insert into t_user (user_id,name,age) values (#{userId},#{name},#{age})</insert>
</mapper>

以上通过xml方法还可以传递条件,具体参考官方文档说明。

通过注解的方式并传递条件自定义sql

mapper中新建方法并添加注解@Select

@Repository
public interface UserMapper extends BaseMapper<User> {Integer insertOne(User u);@Select("SELECT * FROM t_user ${ew.customSqlSegment}")List<User> selectOver25(@Param(Constants.WRAPPER) Wrapper wrapper);
}

方法调用

        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper();wrapper.gt(User::getAge,25);List<User> users = userMapper.selectOver25(wrapper);System.out.println(users);

更多用法参考官方文档说明

9、mp还有很多其他用法,官方文档写的很清楚详细,自行阅读。


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/630921.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

强化学习入门

强化学习是指智能体通过不断试错的方式进行学习&#xff0c;利用与环境进行交互时获得的奖励或惩罚来指导行为 试错学习 尝试&#xff08;决策-decision&#xff09;错误结果&#xff1a;每次尝试无论产生什么样的结果&#xff0c;都会对下一次结果产生影响 奖励&#xff08;…

Springboot 子工程构建完后无法找到springboot依赖

问题: 构建完子工程后无法找到SpringBootTest 解决方案: 最好用这个构建 https://www.cnblogs.com/he-wen/p/16735239.html 1.先观察项目目录 是否正确 2.观察子工程目录 3.看pom.xml中是否引用springboot依赖 4.检查代码 查看父项目是否包含子模块 查看子模块的父项目是否…

vscode 中配置 python 虚拟环境

vscode 中配置 python 虚拟环境 Start 在编写代码的过程中&#xff0c;我们经常会用到一些第三方依赖&#xff0c;帮助我们快速完成功能。在 Python 中&#xff0c;默认情况都是统一安装在全局环境中&#xff0c;但是这样伴随着电脑项目越来越多&#xff0c;不同项目对依赖的…

Intel Quartus II IP之DP1.4 工程的创建与使用

前述&#xff1a; Win10电脑安装了Quartus 21.4&#xff0c;这可以满足绝大多数情况&#xff0c;但是对于创建DMI/DP IP的设计demo工程时会报错&#xff0c;因为还需要Eclipse与WSL&#xff08;Windows Subsystem for Linux&#xff09;。 具体安装方法参考&#xff1a; Int…

redis7部署集群:包含主从模式、哨兵模式、Cluster集群模式等三种模式

前言&#xff1a; redis部署集群常见的一般有三种模式&#xff1a;主从模式&#xff0c;Sentinel&#xff08;哨兵模式&#xff09;&#xff0c;Redis Cluster&#xff08;高可用Cluster集群&#xff09;&#xff0c;根据不同的需求可自定义选择部署方式。 Redis 主从模式&…

c# 视频播放之Vlc.DotNet.Forms

先说下优缺点 优点&#xff1a;与电脑无关&#xff0c;能播放主流编码格式视频。 缺点&#xff1a;只能播放本地视频&#xff0c;网络视频播放不了。 下面是具体操作和代码 1. 安装Vlc.DotNet.Forms 和 VideoLAN.LibVLC.Windows Vlc.DotNet.Forms 是播放库&#xff0c;Vid…

三网话费余额查询的API系统,基于thinkphp6.0框架,附带搭建教程

系统用的是Thinkphp6.0框架 PHP版本需要用8.2 搭建教程 1、源码上传后&#xff0c;吧运行目录改为 /public 2、然后吧 数据库文件.sql 这个文件导入到数据库内 3、打开/config/database.php目录文件&#xff0c;然后进行配置数据库信息 4、挂任务计划&#xff0c;用处&…

未来的NAS:连接您的数字生活

未来的NAS&#xff1a;连接您的数字生活 引言 网络附加存储&#xff08;Network Attached Storage&#xff0c;简称NAS&#xff09;是一种通过网络连接的存储设备&#xff0c;用于集中存储和共享数据。传统的NAS设备通常包含一个或多个硬盘驱动器&#xff0c;可以通过局域网连…

【python】学习笔记01

一、基础语法 1. 字面量 - 什么是字面量&#xff1f; 在代码中&#xff0c;被写下来的的固定的值&#xff0c;称之为字面量。 - 常用的值类型 Python中常用的有6种值&#xff08;数据&#xff09;的类型。 666 13.14 "程序员"print(666) print(13.14) print(&qu…

服务器变矿机,该如何应对?

开始 恶意的挖矿程序会导致服务器cpu的异常占用&#xff0c;很让人讨厌。起初&#xff0c;我只是使用top命令显示出占用cpu不正常的进程&#xff0c;发现其中一个进程占用了百分之九十九点几&#xff0c;然后通过kill -9 <PID>命令干掉它。但总是过不了几天&#xff0c;…

C++三剑客之std::variant(二):深入剖析

目录 1.概述 2.辅助类介绍 2.1.std::negation 2.2.std::conjunction 2.3.std::is_destructible 2.4.std::is_object 2.5.is_default_constructible 2.6.std::is_trivially_destructible 2.7.std::in_place_type和std::in_place_index 3.原理分析 3.1.存储分析 3.2.…

Jira 宣布Data Center版涨价5%-15%,6年内第8次提价

近日&#xff0c;Atlassian官方面向合作伙伴发布2024年涨价通知&#xff1a; 自2024年2月15日起&#xff0c;旗下核心产品Jira Software、Confluence、Jira Service Management的DC版本&#xff08;Data Center版本&#xff09;价格提高5%-15%&#xff08;涨幅与坐席数阶梯相关…

Django中使用MySQL的视图View

文章目录 一、MySQL创建视图二、Django模型定义 一、MySQL创建视图 首先确定好自己需要链接的两张表及其对应的字段&#xff0c;视图的意义是将两张表数据联合一起变成一张新的表方便后续查询数据。 源Django两张表模型 class ProjectTaskRange(BaseModel, TimeModel):class …

IOS-高德地图SDK接入-Swift

申请key 这个要前往高德开发平台注册成为个人开发者然后在控制台创建一个应用&#xff1a; 高德开发平台 注册步骤就不写了&#xff0c;写一下创建应用的步骤&#xff1a; 1、点击应用管理——>我的应用 2、点击右上角的创建新应用 3、输入内容&#xff1a; 4、点击添加ke…

新定义51单片机(RD8G37)实现测距测速仪

本文描述用新定义51单片机&#xff08;RD8G37&#xff09;超声波一体测距传感器实现简单的测距测速仪。 测距仪演示效果 新定义RD8G37Q48RJ开发板 超声波测距模块&#xff1a; 8位并口屏 1、main.c unsigned short timeConsuming0; unsigned int oldDistance;void rectClearS…

阿里云国外服务器价格表

阿里云国外服务器优惠活动「全球云服务器精选特惠」&#xff0c;国外服务器租用价格24元一个月起&#xff0c;免备案适合搭建网站&#xff0c;部署独立站等业务场景&#xff0c;阿里云服务器网aliyunfuwuqi.com分享阿里云国外服务器优惠活动&#xff1a; 全球云服务器精选特惠…

web terminal - 如何在mac os上运行gotty

gotty可以让你使用web terminal的方式与环境进行交互&#xff0c;实现终端效果 假设你已经配置好了go环境&#xff0c;首先使用go get github.com/yudai/gotty命令获取可执行文件&#xff0c;默认会安装在$GOPATH/bin这个目录下&#xff0c;注意如果你的go版本比较高&#xff…

大数据深度学习ResNet深度残差网络详解:网络结构解读与PyTorch实现教程

文章目录 大数据深度学习ResNet深度残差网络详解&#xff1a;网络结构解读与PyTorch实现教程一、深度残差网络&#xff08;Deep Residual Networks&#xff09;简介深度学习与网络深度的挑战残差学习的提出为什么ResNet有效&#xff1f; 二、深度学习与梯度消失问题梯度消失问题…

2024年腾讯云轻量服务器和CVM云服务器性能如何?

腾讯云轻量服务器和云服务器有什么区别&#xff1f;为什么轻量应用服务器价格便宜&#xff1f;是因为轻量服务器CPU内存性能比云服务器CVM性能差吗&#xff1f;轻量应用服务器适合中小企业或个人开发者搭建企业官网、博客论坛、微信小程序或开发测试环境&#xff0c;云服务器CV…

RaspberryPi(树莓派)配置 VNC

RaspberryPi&#xff08;树莓派&#xff09;是可以通过 VNC 来连接到机器上进行图形化操作的。 什么 VNC VNC&#xff08;Virtual Network Computing&#xff09;&#xff0c;为一种使用RFB协议的屏幕画面分享及远程操作软件。此软件借由网络&#xff0c;可发送键盘与鼠标的动…