[学习笔记]-MyBatis-Plus简介
简介
Mybatis-Plus(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
简言之就是对单表的增删改查有了很好的封装。基本不用再单独写sql语句了。目前此类基于mybats的增强工具有很多,但是目前MP可以算是国内最主流的了。而且它的功能也是最全的。
github地址:https://github.com/baomidou/mybatis-plus
gitee地址:https://gitee.com/baomidou/mybatis-plus
MP初体验
这里我们创建一个测试项目MPDemo来初步体验下如何使用MP。省略创建项目步骤和数据库表创建过程。
1.测试表结构【user】

2.springboot三板斧之引入依赖
<dependencies><!-- springboot --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- MP最新版本 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2</version></dependency><!-- mysql 驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency>
</dependencies>
3.springboot三板斧之添加配置
# 数据源配置
spring:datasource:type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://yourip:3306/yourdb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=trueusername: rootpassword: 123456# Mybatis Plus配置
mybatis-plus:configuration:#打印日志log-impl: org.apache.ibatis.logging.stdout.StdOutImpl#下划线转驼峰map-underscore-to-camel-case: true
4.创建user表的实体映射类
@Data
@TableName("user")
public class User implements Serializable {/*** 自增id*/private Long id;/*** 姓名*/private String name;/*** 年龄*/private Integer age;/*** 邮件*/private String email;/*** 地址*/private String address;/*** 创建日期*/private Date createtime;/*** 更新日期*/private Date updatetime;}
5.创建user表的mapper类
//这里仅仅集成MP的BaseMapper即可
public interface UserMapper extends BaseMapper<User> {}
6.springboot三板斧之启动类注释
@SpringBootApplication
@MapperScan("com.mayuanfei.mpdemo.dao.mapper")
public class MpDemoApplication {public static void main(String[] args) {SpringApplication.run(MpDemoApplication.class, args);}
}
这里通过@MapperScan来指定扫描所有mapper的基础包路径。
其实如果Mapper类中如果有@Mapper注解的话,其实在启动类上是不需要增加@MapperScan的。
7.添加测试类
@SpringBootTest
public class MapperTest {@Autowiredprivate UserMapper userMapper;@Testpublic void testInsert() {User user = new User();user.setName("张三");user.setAge(2);user.setEmail("zhangsan@163.com");user.setAddress("北京朝阳");int result = this.userMapper.insert(user);System.out.println("打印插入结果===>" + result);System.out.println("打印插入后user的id值===>" + user.getId());}
}
输出结果:
==> Preparing: INSERT INTO user ( id, name, age, email, address ) VALUES ( ?, ?, ?, ?, ? )
==> Parameters: 1546670400971255809(Long), 张三(String), 2(Integer), zhangsan@163.com(String), 北京朝阳(String)
<== Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7397c6]
打印插入结果===>1
打印插入后user的id值===>1546670400971255809
可能遇到的问题
1.@Autowired标识红色

原因是:我们通过在启动类添加注释@MapperScan(“com.mayuanfei.mpdemo.dao.mapper”)来扫描所有的mapper类的
但是idea没有发现有具体的注释标识被spring容器所管理,所以这里给出警告。
解决方式有两种:
- 启动类注释不变,把@Autowired修改为@Resource注解。
- 启动类去掉@MapperScan(“com.mayuanfei.mpdemo.dao.mapper”),在UserMaper类上加上@Mapper注解。
2.user表中的id值不符合我们的预期
例子中,我们打印出来的user的id值为:1546670400971255809。本来想着应该是1。这是因为MP默认生成id的算法是通过雪花算法来生成的。如果要按照数据库中的自增来生成id需要在实体类增加一个注解:

相关文章:
[学习笔记]-MyBatis-Plus简介
简介 Mybatis-Plus(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 简言之就是对单表的增删改查有了很好的封装。基本不用再单独写sql语句了。目前此类…...
2024.6.23 刷题总结
2024.6.23 **每日一题** 520.检测大写字母,本题是简单模拟题,考察了ASCLL码相关的知识,根据题意,本题对于字符串有三种正确的用法,所以我们分三类来讨论,先根据首字母的大小写来分类,如果首字母…...
mysql查询不同用户(操作记录)的最新一条记录
先用MAX(time) 和 group by item_id 查询出不同的item_id对应的最大时间,然后再在外面连表查询,查询 表中 item_id 和login_time 时间 相等于刚才的查询记录的记录 具体语句如下 select a.* from reyo a join (select item_id,max(login_time) as ti…...
Java中如何使用设计模式来解决编程问题?
Java中使用设计模式来解决编程问题,可以显著提高代码的可复用性、可维护性和可读性。设计模式是一套被广泛应用于软件工程的解决方案,描述了在特定上下文中面对具体问题时的可复用解决方案。以下是几种常用的设计模式及其应用场景: 单例模式…...
单机、集群和分布式
目录 1.概述 2.单机服务器 单机版的服务器的性能,设计上的瓶颈? 3.集群 解决瓶颈1: 没有解决瓶颈2: 没有解决瓶颈3: 集群的优点? 集群的缺点? 4.分布式 分布式的优点? 分…...
qt开发-10_LineEdit
QLineEdit 小部件是一个单行文本编辑器。行编辑允许用户使用一组有用的编辑函数输入和 编辑一行纯文本。包括撤消和重做、剪切和粘贴以及拖放。通过更改行编辑的 echoMode(),它 还可以用作“只写”字段,用于输入如密码等. 创建好项目后,进入 …...
福昕PDF编辑器快速去除PDF水印方法
在福昕PDF编辑器软件中打开一个带有水印的PDF文件,点击如图下所示的页面管理->水印,点击全部移除 点击 是 水印消除(注:部分类型的水印可以消除,但是有些类型的水印无法通过此方法消除)...
Cloudflare 常用操作
一、域名托管到cloudflare 登录cloudflare->添加站点->填写域名(例如阿里云)->继续选择free套餐->继续->保存cloudflare分配的DNS地址->进入阿里云域名管理->进入DNS管理/DNS修改把DNS地址修改为cloudflare分配的两个DNS->保存->回到cloudflare->…...
elementUI的table使用展开功能( type=“expand“ ),展开时合起上一次展开的内容,始终保持展开内容为一个,并且再次点击合起自身
直接上代码了没什么可讲的,主要是用到 row-key"id" :expand-row-keys"expands row-click"handleRowClick" <template><div class"ele-body"><el-card shadow"never"><!-- 数据表格 --><ele-pro-t…...
【金】?Y? python网页前端streamlit
1、如何从 Google Colab Notebook 启动 streamit参考-How to Launch Streamlit App from Google Colab Notebook !streamlit run web.py & npx localtunnel --port 8501 & curl ipv4.icanhazip.com...
数据仓库之Lambda架构
Lambda架构是一种设计大规模数据处理系统的架构模式,它结合了批处理和实时处理的优点,以应对大数据的多样性、速度和规模问题。该架构主要由三个层次组成:批处理层(Batch Layer)、速度层(Speed Layer&#…...
Apriori 处理ALLElectronics事务数据
通过Apriori算法挖掘以下事务集合的频繁项集: 流程图 代码 # 导入必要的库 from itertools import combinations# 定义Apriori算法函数 def apriori(transactions, min_support, min_confidence):# 遍历数据,统计每个项的支持度 item_support {}for tr…...
Content Provider:深入解析Android数据共享的核心组件
在Android开发中,Content Provider是一个重要的组件,它允许应用程序之间共享数据。它扮演着“数据访问中间层”的角色,为不同应用程序提供了一个统一的数据访问接口。以下将从技术难点、面试官关注点、回答吸引力以及代码举例四个方面&#x…...
069、Python 函数的递归调用
函数可以自己调用自己吗??? 这就涉及函数的递归的用法了。 递归的概念: 函数递归是指函数在其定义中直接或间接调用自身的过程。 递归是一种强有力的编程技术,通常用于解决可以被分解为相同问题的子问题的情况&…...
数仓开发那些事_番外
一位神州的正式员工(没错,就是之前文章中出现的实习生):一闪,你今年涨工资了吗? 一闪:mad,一年辛苦到头只涨了500米 神州员工:你去年绩效不是优秀吗,怎么就涨…...
Vue3+TypeScript项目实战——打造雨雪交加的智慧城市
个人简介 👀个人主页: 前端杂货铺 ⚡开源项目: rich-vue3 (基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL) 🙋♂️学习方向: 主攻前端方向,正逐渐往全干发展 …...
经典游戏案例:植物大战僵尸
学习目标:植物大战僵尸核心玩法实现 游戏画面 项目结构目录 部分核心代码 using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using Random UnityEngine.Random;public enum Z…...
Go 与 Java 字符编码选择:UTF-8 与 UTF-16 的较量
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…...
vscode+picgo+gitee实现Markdown图床
vscode中编辑Markdown文件,复制的图片默认是保存在本地的。当文档上传csdn时,会提示图片无法识别 可以在gitee上创建图床仓库,使用picgo工具上传图片,在Markdown中插入gitee链接的方式来解决该问题。 一、 安装picgo工具 1.1 v…...
【thinkphp问题栏】tp5.0分页技巧
一、调用内置方法paginate thinkphp内置了一个paginate方法支持分页功能 该方法位于library\think\db\Query.php内 /*** 分页查询* param int|array $listRows 每页数量 数组表示配置参数* param int|bool $simple 是否简洁模式或者总记录数* param array $config 配…...
QuickCut视频剪辑软件:3分钟快速上手免费视频处理神器
QuickCut视频剪辑软件:3分钟快速上手免费视频处理神器 【免费下载链接】QuickCut Your most handy video processing software 项目地址: https://gitcode.com/gh_mirrors/qu/QuickCut 还在为复杂的专业视频编辑软件头疼吗?QuickCut作为一款轻量级…...
对比直接使用原生 API 与通过 Taotoken 调用在账单清晰度上的差异
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比直接使用原生 API 与通过 Taotoken 调用在账单清晰度上的差异 对于需要频繁调用多个大语言模型的团队或个人开发者而言&#x…...
MATLAB找峰值进阶:用findpeaks函数5个鲜为人知的技巧,让你的科研图表更专业
MATLAB找峰值进阶:用findpeaks函数5个鲜为人知的技巧,让你的科研图表更专业 在科研数据分析中,峰值检测是最基础却又最关键的步骤之一。无论是光谱分析、色谱检测还是振动信号处理,准确识别和量化峰值特征直接影响着研究结论的可信…...
如何永久冻结IDM试用期:简单三步实现无限期免费使用
如何永久冻结IDM试用期:简单三步实现无限期免费使用 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script IDM Activation Script是一款开源工具࿰…...
掌握高效B站会员购抢票技巧:biliTickerBuy实战指南
掌握高效B站会员购抢票技巧:biliTickerBuy实战指南 【免费下载链接】biliTickerBuy b站会员购购票辅助工具 项目地址: https://gitcode.com/GitHub_Trending/bi/biliTickerBuy biliTickerBuy是一款专为B站会员购平台设计的开源抢票辅助工具,通过P…...
RAG实战指南:让大模型学会检索外部知识
RAG:给 LLM 装上知识库——从原理到完整可运行系统LLM 的知识截止在训练日期。RAG 让 AI 能「查资料」回答——这是 Agent 有「长期记忆」的基础。一、为什么需要 RAG 用户:HarmonyOS NEXT 的 Observed 装饰器怎么用?没有 RAG 的 LLM…...
不用登录!3 步把 Excel 进度表变成甘特图
很多团队并不是缺项目管理工具,而是缺时间:领导下午要进度图,表格还在同事电脑里,甘特图只能熬夜手画。PJMan 提供了一条「先出图、再决策」的轻路径:免登录 Excel 一键可视化。 为什么值得试? 零注册门槛&…...
为OpenClaw配置Taotoken作为其AI模型供应商
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为OpenClaw配置Taotoken作为其AI模型供应商 基础教程类,指导使用OpenClaw这类Agent工具的开发者,如何将其后…...
Postman导入导出避坑指南:为什么你的环境变量导入后不生效?
Postman环境变量导入失效深度解析与解决方案 当你在团队协作或项目迁移时,精心配置的Postman环境变量导入后却神秘消失——这种挫败感每个开发者都经历过。本文将揭示Postman变量系统的底层机制,通过三个典型故障场景还原真实问题根源,并提供…...
给电机上户口:ST-MC-Workbench里那些让人头大的参数到底怎么填?(附实测避坑清单)
给电机上户口:ST-MC-Workbench参数填写的工程实践指南 第一次打开ST-MC-Workbench的电机参数配置界面时,面对那些专业术语和空白输入框,大多数工程师都会感到一阵眩晕。LdLq、反电动势系数、转动惯量J...这些看似简单的参数背后,…...
