整合 Mybatis Plus

什么是 MyBatis Plus?

MyBatis Plus (简称 MP) 是一款持久层框架,说白话就是一款操作数据库的框架。它是一个 MyBatis 的增强工具,就像 iPhone手机一般都有个 plus 版本一样,它在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

MyBatis Plus 的愿景是成为 MyBatis 最好的搭档,就像魂斗罗中的 1P、2P,基友搭配,效率翻倍。

MyBatis Plus 的优势

  • 快速开发:MyBatis Plus 提供了一系列的便捷功能,如自动生成 SQL 语句、通用 Mapper 等,使数据库操作更加高效,能够节省开发时间。
  • 更少的配置: Spring Boot 已经为我们提供了很多默认的配置,整合 MyBatis Plus 时只需少量的配置,减少了繁琐的配置步骤。
  • 内置分页插件:MyBatis Plus 内置了分页插件,无需额外的代码,就可以轻松实现分页查询。
  • 更好的支持: MyBatis Plus 在社区中有较广泛的使用,拥有活跃的维护者和开发者,您可以轻松找到解决方案和文档。

建表

在数据库右键,新建查询:

执行如下建表语句:

CREATE TABLE `t_user` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',`username` varchar(60) NOT NULL COMMENT '用户名',`password` varchar(60) NOT NULL COMMENT '密码',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后一次更新时间',`is_deleted` tinyint(2) NOT NULL DEFAULT '0' COMMENT '逻辑删除:0:未删除 1:已删除',PRIMARY KEY (`id`) USING BTREE,UNIQUE KEY `uk_username` (`username`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';

添加依赖

在父项目 主项目 的 pom.xml 文件中,声明 MP 的依赖版本号:

<!-- 版本号统一管理 --><properties>// 省略...<mybatis-plus.version>3.5.2</mybatis-plus.version></properties><!-- 统一依赖管理 --><dependencyManagement><dependencies>// 省略...<!-- Mybatis Plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis-plus.version}</version></dependency></dependencies></dependencyManagement>

然后,在 xx-module-common 公共模块的 pom.xml 文件中,引入 MP 和 MySQL 依赖:

<!-- Mybatis Plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId></dependency><!-- mysql 依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency>

配置文件

编辑 applicaiton-dev.yml 文件,添加数据库链接相关的配置,包含连接池的配置:

spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/weblog?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNullusername: rootpassword: 123456hikari:minimum-idle: 5maximum-pool-size: 20auto-commit: trueidle-timeout: 30000pool-name: Weblog-HikariCPmax-lifetime: 1800000connection-timeout: 30000connection-test-query: SELECT 1

解释一下各个配置的含义和作用:

  • spring.datasource.driver-class-name: 指定数据库驱动类的完整类名,这里使用的是 MySQL 数据库的驱动类。
  • spring.datasource.url: 数据库连接的URL,指向本地的MySQL数据库,端口是3306,数据库名是xx,同时配置了一系列参数,如使用Unicode编码、字符编码为UTF-8、自动重连、不使用SSL、对零时间进行转换等。
  • spring.datasource.username: 数据库用户名,这里使用的是root
  • spring.datasource.password: 数据库密码,这里使用的是123456

数据库链接池这块,我们使用的 Spring Boot 默认的 HikariCP,它是一个高性能的连接池实现 , 同时,它号称是速度最快的连接池:

  • spring.datasource.hikari.minimum-idle: Hikari连接池中最小空闲连接数。
  • spring.datasource.hikari.maximum-pool-size: Hikari连接池中允许的最大连接数。
  • spring.datasource.hikari.auto-commit: 连接是否自动提交事务。
  • spring.datasource.hikari.idle-timeout: 连接在连接池中闲置的最长时间,超过这个时间会被释放。
  • spring.datasource.hikari.pool-name: 连接池的名字。
  • spring.datasource.hikari.max-lifetime: 连接在连接池中的最大存活时间,超过这个时间会被强制关闭。
  • spring.datasource.hikari.connection-timeout: 获取连接的超时时间。
  • spring.datasource.hikari.connection-test-query: 用于测试连接是否可用的SQL查询,这里使用的是SELECT 1,表示执行这个查询来测试连接。

然后,在 xx-module-common 模块中的 config 包下,新建一个 MybatisPlusConfig 配置文件,代码如下:

package com.yanxiaosheng.xx.common.config;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;/*** @author: 闫小生* @date: 2023-08-22 16:52* @description: Mybatis Plus 配置文件**/
@Configuration
@MapperScan("com.quanxiaoha.weblog.common.domain.mapper")
public class MybatisPlusConfig {
}
  • @Configuration : 此注解声明该类为配置类;

  • @MapperScan : 扫描 MP 的 mapper 接口存放位置。PS: 数据库相关的代码,我们统一放置在 /domain 这个包中,格式如下:

    • dos : 根据阿里的开发规范,统一将数据库对应的实体类命名为 xxxDO 这种形式,统一存放此包下。
    • mapper : 统一放置 mapper 接口文件;

实体类

在 /dos 包中,新建一个 UserDO 类,字段和数据库中的字段通过转驼峰的形式对应一一对应起来,MP 框架会默认通过这种规则将字段光联在一起,内容如下:

package com.yanxiaosheng.xx.common.domain.dos;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;import java.util.Date;/*** @author: 闫小生* @date: 2023-08-22 17:01* @description: TODO**/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@TableName("t_user")
public class UserDO {@TableId(type = IdType.AUTO)private Long id;private String username;private String password;private Date createTime;private Date updateTime;private Boolean isDeleted;
}

新建 Mapper 接口

在 mapper包中,创建一个 UserMapper 接口,代码如下:

package com.yanxiaosheng.xx.common.domain.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.quanxiaoha.weblog.common.domain.dos.UserDO;/*** @author: 闫小生* @date: 2023-08-22 17:06* @description: TODO**/
public interface UserMapper extends BaseMapper<UserDO> {
}

至此,用于操作数据的前置代码都搞定了。

新增一条用户记录

接下来,我们通过单元测试,往数据库中添加一个测试记录,看看能否新增成功。在 xx-web 模块中的单元测试类中,新增一个测试方法,代码如下:

  @Autowiredprivate UserMapper userMapper;@Testvoid insertTest() {// 构建数据库实体类UserDO userDO = UserDO.builder().username("闫小生").password("123456").createTime(new Date()).updateTime(new Date()).isDeleted(false).build();userMapper.insert(userDO);}

运行该测试方法,看看表中是否被成功插入一条数据:

可以看到,数据插入成功了。

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

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

相关文章

NOI大纲——普及组——编码

编码 ##ASCLL码 ASCII码&#xff08;American Standard Code for Information Interchange&#xff0c;美国信息交换标准代码&#xff09;是一种基于拉丁字母的字符编码方案&#xff0c;主要用于表示文本数据。ASCII码包含128个字符&#xff08;0-127&#xff09;&#xff0c…

2024最新boss直聘岗位数据爬虫,并进行可视化分析

前言 近年来,随着互联网的发展和就业市场的变化,数据科学与爬虫技术在招聘信息分析中的应用变得越来越重要。通过对招聘信息的爬取和可视化分析,我们可以更好地了解当前的就业市场动态、职位需求和薪资水平,从而为求职者和招聘企业提供有价值的数据支持。本文将介绍如何使…

python自动化办公之PyPDF2

用到的库&#xff1a;PyPDF2 实现效果&#xff1a;打开pdf文件&#xff0c;把每一页的内容读出来 代码&#xff1a; import PyPDF2 # 打开pdf文件 fileopen(friday.pdf,rb) # 创建pdf文件阅读器对象 readerPyPDF2.PdfReader(file) # 获取pdf文件的总页数 total_pageslen(rea…

Amazon Q——2023 re:Invent 大会的 AI 革新之星

引言 在2023年的 re:Invent 大会上&#xff0c;亚马逊云科技&#xff08;亚马逊云科技&#xff09;不仅展示了包括 Amazon Graviton3、Amazon SageMaker Studio Lab、Amazon Connect Wisdom、Amazon QuickSight Q 和 Amazon Private 5G 在内的多项创新产品&#xff0c;还发布了…

【python爬虫】豆瓣爬虫学习

文章目录 网页地址爬虫目标技术栈爬虫代码注意事项 Python爬虫学习&#xff1a;我们可以选择一个相对简单的网站进行数据抓取。这里以抓取“豆瓣电影Top250”的信息为例&#xff0c;这个网站提供了丰富的电影数据&#xff0c;包括电影名称、评分、导演、演员等信息。 网页地址…

AI大模型技术在音乐创造的应用前景

大模型技术在音乐创作领域具有广阔的应用前景&#xff0c;可以为音乐家、作曲家和音乐爱好者提供以下方面的帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 音乐创作辅助&#xff1a;大模型可以帮助音乐家和作曲家生成旋律、和声…

Win脚本开机自启ALIst和RClone

转自个人博客&#xff1a;https://www.jjy2023.cn/2024/05/23/win%e8%84%9a%e6%9c%ac%e5%bc%80%e6%9c%ba%e8%87%aa%e5%90%afalist%e5%92%8crclone/ 在配置完alist和rclone之后&#xff0c;就只需要每次开机启动两者就行了&#xff0c;所以感觉使用AListHelper没有必要&#xff…

算法金 | 协方差、方差、标准差、协方差矩阵

大侠幸会&#xff0c;在下全网同名「算法金」 0 基础转 AI 上岸&#xff0c;多个算法赛 Top 「日更万日&#xff0c;让更多人享受智能乐趣」 抱个拳&#xff0c;送个礼 1. 方差 方差是统计学中用来度量一组数据分散程度的重要指标。它反映了数据点与其均值之间的偏离程度。在…

Flask无法Debug

问题描述 Flask Debug的时候&#xff0c;可能会无法进入断点。我使用的是pycharm CE版本。 解决方案 确保pycharm安装路径不带空格。&#xff08;带空格路径导致debug程序启动报错&#xff09;Gevent compatible&#xff0c;这个东西老的pycharm版本必须勾选它&#xff0c;新…

中霖教育靠谱吗?在职备考一建好通过吗?

中霖教育靠谱吗?在职备考一建好通过吗? 课程设置&#xff1a;报名后会进行测评&#xff0c;了解学员的知识掌握情况、时间安排和记忆思维特点等&#xff0c;制定更适合的学习计划。 课程以考试通过为目标&#xff0c;去繁化简&#xff0c;只讲有用的干货&#xff0c;帮助快…

Python的GIL

Python的GIL是什么&#xff1f;它对多线程编程有什么影响&#xff1f; GIL&#xff08;全局解释器锁&#xff09;是Python解释器中的一个机制&#xff0c;它是为了保证在任何时刻只有一个线程执行Python字节码。GIL的存在主要因为Python的内存管理和垃圾回收机制是线程不安全的…

使用Vite工具创建项目,并使用Vue Router步骤

步骤 1: 安装 Vite 首先&#xff0c;确保你的电脑上已经安装了Node.js和npm。然后&#xff0c;通过以下命令全局安装Vite&#xff08;如果已经安装&#xff0c;请跳过此步骤&#xff09;&#xff1a; npm install -g create-vite步骤 2: 创建新的Vue项目 使用Vite创建一个新…

Python 学习之标准库(二)

Python标准库是指Python编程语言自带的一组模块和包&#xff0c;它们是Python语言的核心组成部分&#xff0c;为开发者提供了丰富的功能和工具&#xff0c;帮助快速实现各种功能需求。以下是对Python标准库的一些主要内容和模块的归纳&#xff1a; 1. 数学计算&#xff1a; a.…

Python驱动的智能客服系统构建实录

Python驱动的智能客服系统构建实录 作为技术领域的老将&#xff0c;今天我打算带大家深挖一个热门应用——智能客服系统&#xff0c;并且如何通过Python这门万能钥匙&#xff0c;结合前沿的深度学习技术&#xff0c;赋予其更为人性化、高效的沟通能力。同时&#xff0c;我们不…

VLOOKUP函数在表格的简单运用-两个表匹配

1.什么是VLOOKUP&#xff1f; VLOOKUP是Excel中的一个内置函数&#xff0c;主要用于在区域或表格的首列查找指定的值&#xff0c;并返回该行中其他列的值。它特别适用于跨表格数据匹配 2.函数运用 2.1.这边两个表取名a表和b表&#xff0c;做为我们的实例表。 表格a包含&…

第二十一站:Java的多彩之旅终结篇

异步编程与反应式系统&#xff1a;应对高并发挑战 随着互联网应用对响应速度和并发处理能力要求的提高&#xff0c;Java生态系统也与时俱进&#xff0c;引入了异步编程模型和反应式编程框架&#xff0c;以应对现代应用的挑战。 异步编程 Java 8引入了CompletableFuture&…

JavaScript高级程序设计(第四版)--学习记录之迭代器与生成器(上)

什么是迭代&#xff1f; 迭代的意思是按照顺序反复多次执行一段程序。循环是迭代机制的基础&#xff0c;因为它可以指定迭代的次数&#xff0c;以及每次迭代要执行的操作。 迭代器模式 迭代器模式描述了一个方案&#xff0c;可以把有些结构称为“可迭代对象” &#xff0c;这些…

基于 DJYOS 的 HMI 场景研究:探索智能生活的无限可能

引言&#xff1a; 在当今数字化时代&#xff0c;人机界面&#xff08;HMI&#xff09;技术的发展正深刻改变着我们的生活方式。DJYOS 作为一款先进的操作系统&#xff0c;为 HMI 产品的开发提供了强大的支持。本文将深入探讨基于 DJYOS 的 HMI 场景&#xff0c;展示其在智能家…

通过rediss实现用户菜单智能推荐

本人用的框架 SpringCloud redisOauth2Security 前言&#xff1a; 整体使用过滤器的思想&#xff0c;获取Request&#xff0c;然后从数据库查到菜单名称和路由以及计算点击次数&#xff0c;最后以list的形式存在redis&#xff0c;设计定时任务&#xff0c;在一定时间后&#x…

Search for documents with similar texts

题意&#xff1a;搜索具有相似文本的文档 问题背景&#xff1a; I have a document with three attributes: tags, location, and text. 我有一份文档&#xff0c;包含三个属性&#xff1a;标签、位置和文本。 Currently, I am indexing all of them using LangChain/pgvecto…