news 2026/4/16 22:30:24

MybatisPlus-快速入门

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MybatisPlus-快速入门

介绍

官网介绍:简介 | MyBatis-Plus

作用:提高单表CRUD操作的效率

快速开始

实现下列功能:

  1. 新增用户功能
  2. 根据id查询用户
  3. 根据id批量查询用户
  4. 根据id更新用户
  5. 根据id删除用户

引入MybatisPlus的起步依赖

MyBatisPlus官方提供了starter,其中集成了Mybatis和MybatisPlus的所有功能,并且实现了自动装配效果。
因此我们可以用MybatisPlus的starter代替Mybatis的starter,也就是说,引入了下面这个依赖后就可以同时使用Mybatis和MybatisPlus:

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

定义Mapper

自定义的Mapper继承MybatisPlus提供的BaseMapper接口:

public interface UserMapper extends BaseMapper<User> { }

这个Mapper里什么都不用写,User是自定义的实体类,对应user表

演示(基于单元测试)

@SpringBootTest class UserMapperTest { @Autowired private UserMapper userMapper; @Test void testInsert() { User user = new User(); user.setId(5L); user.setUsername("Lucy"); user.setPassword("123"); user.setPhone("18688990011"); user.setBalance(200); user.setInfo("{\"age\": 24, \"intro\": \"英文老师\", \"gender\": \"female\"}"); user.setCreateTime(LocalDateTime.now()); user.setUpdateTime(LocalDateTime.now()); userMapper.insert(user); } @Test void testSelectById() { User user = userMapper.selectById(5L); System.out.println("user = " + user); } @Test void testQueryByIds() { List<User> users = userMapper.selectBatchIds(List.of(1L, 2L, 3L, 4L)); users.forEach(System.out::println); } @Test void testUpdateById() { User user = new User(); user.setId(5L); user.setBalance(20000); userMapper.updateById(user); } @Test void testDeleteUser() { userMapper.deleteById(5L); } }

新增用户功能:userMapper.insert(user);

根据id查询用户:userMapper.selectById(5L);

根据id批量查询用户:userMapper.selectBatchIds(List.of(1L, 2L, 3L, 4L));

根据id更新用户:userMapper.updateById(user);

根据id删除用户:userMapper.deleteById(5L);

解释

mp如何找到数据库中对应的表以及表内字段的?——3个约定

1.类名驼峰转下划线作为表名

例:类名User->表名user;类名UserInfo->表名user_info

2.名为id的字段作为主键

3.变量名驼峰转下划线作为表的字段名

例:类内变量名username->表内字段名username;类内变量名createTime->表内字段名create_time

常用注解

如果实体类和对应的表不满足3个约定,则需要用到注解来进行配置

MybatisPlus中比较常用的几个注解如下:

  • @TableName:用来指定表名
  • @Tableld:用来指定表中的主键字段信息
  • @TableField:用来指定表中的普通字段信息

@TableName

当实体类的类名和表名不满足约定时,在实体类上添加@TableName("表名")

@TableId

当实体类中主键对应的变量名不为id时,在该变量名上添加@TableId(value = "id")

@TableId还有3种type属性:

IdType枚举:

  • AUTO:数据库自增长
  • INPUT:通过set方法自行输入
  • ASSIGN_ID(默认):分配 ID,接口ldentifierGenerator的方法nextld来生成id,默认实现类为DefaultldentifierGenerator雪花算法

@TableField

使用@TableField的常见场景:

  • 成员变量名与数据库字段名不一致:@TableField("数据库字段名")
  • 成员变量名以is开头,且是布尔值:@TableField("数据库字段名")
  • 成员变量名与数据库关键字冲突(转义):@TableField("`数据库字段名`")
  • 成员变量不是数据库字段:@TableField(exist = false)

常用配置

官网:配置 | MyBatis-Plus

大部分并不需要我们去配置,走默认就行,如果需要配置,可以查看官网或者通过idea的提示进行配置

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 19:40:21

微信小程序 PHP_uniapp的疫苗接种综合服务预约系统的设计与实现_8nt0wdue

微信小程序疫苗接种综合服务预约系统的设计与实现 该系统基于微信小程序平台&#xff0c;结合PHP后端与Uniapp框架&#xff0c;构建了一套高效、便捷的疫苗接种预约服务平台。系统采用前后端分离架构&#xff0c;前端使用Uniapp实现跨平台兼容性&#xff0c;后端采用PHP处理业务…

作者头像 李华
网站建设 2026/4/16 19:25:11

微信小程序 PHP_uniapp的社区团购系统_1g4y216z

微信小程序社区团购系统概述 该系统基于PHP和UniApp技术栈开发&#xff0c;整合微信小程序前端与PHP后端&#xff0c;实现社区团购的完整业务流程。前端采用UniApp跨平台框架&#xff0c;兼容多端运行&#xff1b;后端使用PHP构建高效的数据接口&#xff0c;支持商品管理、订单…

作者头像 李华
网站建设 2026/4/14 0:16:14

论文复现:PMSM速度伺服系统的强化学习与最优控制

论文复现:PMSM速度伺服系统的强化学习与最优控制 以下是基于论文提出的控制策略的复现代码,包括模型建立、控制器设计、强化学习算法实现以及仿真验证。代码将分为以下几个部分: 系统建模与参数定义 快速电流环PI控制器 模型降阶与慢速子系统 最优速度环设计与LQR问题 强化…

作者头像 李华
网站建设 2026/4/16 12:37:40

Fiddler 模拟弱网环境测试

为什么要进行弱网环境测试&#xff1f; 由于用户自身的网络环境波动&#xff0c;或者是本身网络环境就较为恶劣&#xff0c;导致会出现一些意想不到的非功能性bug&#xff0c;影响用户体检。比如 利用Fiddler&#xff0c;Charles等具有代理服务器功能的网络流量分析软件来实现…

作者头像 李华
网站建设 2026/4/13 19:42:49

性价比高的口腔种植机构排名

性价比高的口腔种植机构排名&#xff1a;如何选择与极简口腔的价值分析随着口腔健康意识的提升和种植牙技术的普及&#xff0c;越来越多的缺牙患者开始寻求一种既可靠又经济的牙齿修复方案。市场上口腔种植机构众多&#xff0c;价格、技术和服务水平参差不齐&#xff0c;如何甄…

作者头像 李华
网站建设 2026/4/15 19:57:00

LocalAI:无需GPU即可运行的大模型平台!

LocalAI是开源的本地AI大模型运行平台&#xff0c;无需GPU即可使用。它完全兼容OpenAI API&#xff0c;支持多模态模型&#xff0c;采用GoC架构&#xff0c;提供P2P分布式推理功能。解决了隐私保护、成本控制、网络依赖和硬件门槛等痛点&#xff0c;适合企业知识库、边缘设备AI…

作者头像 李华