首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >mybatis-plus

mybatis-plus

作者头像
楠羽
发布于 2022-11-18 03:06:00
发布于 2022-11-18 03:06:00
90102
代码可运行
举报
文章被收录于专栏:后端开发笔记后端开发笔记
运行总次数:2
代码可运行

mybatis-plus 简介

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

愿景是成为 MyBatis 最好的搭档!

官方地址:https://baomidou.com/

文档发布地址:https://baomidou.com/pages/24112f

常用注解(12 个)

1、@MapperScan

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@SpringBootApplication
@MapperScan("com.cabbage.mapper")
public class Mybatisplus01Application {
public static void main(String[] args) {
SpringApplication.run(Mybatisplus01Application.class, args);
}
}

复制代码

结合代码和图片,小伙伴们估计可以猜出来:注解 @MapperScan 是用来扫描 mapper 的映射文件的,只有使用它之后,我们才能够使用官方提供的各种方法。

2、@Mapper

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Mapper
@Repository
public interface UserMapper extends BaseMapper<User> {
/**
* 根据id查询到map集合
* @param id
* @return
*/
Map<String,Object> selectMapById(Long id);
}

复制代码

为什么第二个我会介绍这个注解呢?是因为 @Mapper 作用于数据库中的实体类之后,就不需要再次写注解 @MapperScan,他们之间的区别就是 @Mapper 只能映射一个实体类,而 @MapperScan 可以映射整个包下的实体类,范围更广,操作更简便。

3、@TableName

先看看如下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Data
//设置实体类对应的表名
@TableName("t_user")
public class User {
@TableId(value = "id",type = IdType.AUTO)
private Long uid;
@TableField(value = "name")
private String name;
private Integer age;
private String email;
@TableField(value = "is_deleted")
@TableLogic
private Integer isDeleted;
}

复制代码

大家都知道,当实体类类型的类名和要操作的表的表名不一致时,就会报错,而注解 @TableName 就可以帮助我们解决这个问题。我的数据库表名是 t_user,实体类名是 User,只需要在类名上写入 @TableName("t_user")就可以了

4、@Data

这个注解也极大的简化了我们的开发,为什么这样说呢?是因为,使用这个注解,就可以省略 getter()、setter()、toString()、重写该类的 equals()和 hashCode()方法,这样一听,是不是很吃惊呢?

5、@TableId

MyBatis-Plus 在实现增删改查时,会默认将 id 作为主键列,并在插入数据时,默认基于雪花算法的策略生成 id,这个雪花算法在这里就不明讲了。

当使用 @TableId(value = "id")语句时,若实体类和表中表示主键的不是 id,而是其他字段,例如代码中的 uid,MyBatis-Plus 会自动识别 uid 为主键列,否则就会报这样的错误:

当使用 @TableId(value = "id",type = IdType.AUTO)语句时,代表着使用数据库的自增策略,注意,该类型请确保数据库设置了 id 自增,否则无效!

当然呢,@TableId 的功能,也可以写在 application.yml 配置文件中,配置如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mybatis-plus:
global-config:
banner: false
db-config:
# 配置MyBatis-Plus操作表的默认前缀
table-prefix: "t_"
# 配置MyBatis-Plus的主键策略
id-type: auto
# 配置MyBatis日志
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

复制代码

6、@TableField

MyBatis-Plus 在执行 SQL 语句时,要保证实体类中的属性名和表中的字段名一致,否则就会报错,语句 @TableField(value = "is_deleted")代表着让数据库表中 is_deleted 与实体类中 isDeleted 字段名一样。

注意:

  • 若实体类中的属性使用的是驼峰命名风格,而表中的字段使用的是下划线命名风格 例如实体类属性 userName,表中字段 user_name,此时 MyBatis-Plus 会自动将下划线命名风格转化为驼峰命名风格
  • 若实体类中的属性和表中的字段不满足上述条件,例如实体类属性 name,表中字段 username,此时需要在实体类属性上使用 @TableField("username")设置属性所对应的字段名

7、@TableLogic

在讲这个注解之前,我们先认识一下逻辑删除。

  • 物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除的数据
  • 逻辑删除:假删除,将对应数据中代表是否被删除字段的状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录
  • 使用场景:可以进行数据恢复

在我的数据库表中,is_delete 为 1 时,代表着逻辑上的删除,is_delete 为 0 时,表示没有删除

注解 @TableLogic 的使用,就代表着该类中的属性是逻辑删除的属性

注意:

  • 在测试逻辑删除的时候,真正执行的是修改 UPDATE t_user SET is_deleted=1 WHERE id=? AND is_deleted=0
  • 测试查询功能,被逻辑删除的数据默认不会被查询 SELECT id,username AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0

在学习 mybatis-plus 分页插件的时候,我们需要配置拦截器,看代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor =
new MybatisPlusInterceptor();


interceptor.addInnerInterceptor
(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}

复制代码

8、@Configuration

这个注解相信大家已经见过很多次了,可能都有些不耐烦了,但是我还是要在这里提一下,使用该注解的类代表着是一个配置类,该类本身也是一个 bean。也可以在该类中加载 bean,使用 @Bean 注解

9、@Bean

注解 @Bean 表示的是将方法中的对象注入到 spring 容器中,以后方便于之后在容器中拿出对象,简化开发。常与 @Configuration 注解一起使用,相信大家也经常见到此注解,这里也不多讲了~

既然讲到了分页插件,那就简单的看看他们的基本使用方法吧

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Test
void test01() {
//设置分页参数
Page<User> page = new Page<>(1, 3);
userMapper.selectPage(page, null);
//获取分页数据
List<User > list = page.getRecords();
list.forEach(System.out::println);
System.out.println("当前页:" + page.getCurrent());
System.out.println("每页显示的条数:" + page.getSize());
System.out.println("总记录数:" + page.getTotal());
System.out.println("总页数:" + page.getPages());
System.out.println("是否有上一页:" + page.hasPrevious());
System.out.println("是否有下一页:" + page.hasNext());
}

复制代码

运行结果:

10、@Param

当我使用自定义的分页语句时:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Mapper
@Repository
public interface UserMapper extends BaseMapper<User> {
/**
* 通过年龄查询用户信息并分页
* @param page
* @param age
* @return
*/
Page<User> selectPageByAge( Page<User> page, @Param("age") Integer age);
}
<mapper namespace="cabbage.mapper.UserMapper">
<select id="selectPageByAge" resultType="User">
SELECT id,`name`,age,email FROM `user` where age > #{age}
</select>
</mapper>

复制代码

@Param 是 MyBatis 所提供的,作为 Dao 层的注解,作用是用于传递参数,从而可以与 SQL 中的的字段名相对应,简化了开发~

11、@Version

在我们学习乐观锁的时候,肯定见过如下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Data
@TableName("t_product")
public class Product {
private Long id;
private String name;
private Integer price;
@Version
private Integer version;
}
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor =
new MybatisPlusInterceptor();
//分页插件
interceptor.addInnerInterceptor
(new PaginationInnerInterceptor(DbType.MYSQL));
//乐观锁插件
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return interceptor;
}
}

复制代码

而这个注解 @Version 就是实现乐观锁的重要注解,当要更新数据库中的数据时,例如价格,version 就会加 1,如果 where 语句中的 version 版本不对,则更新失败。

12、@EnumValue

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Getter
public enum SexEnum {
MALE(1, "男"),
FEMALE(2, "女");
@EnumValue
private Integer sex;
private String sexName;
SexEnum(Integer sex, String sexName) {
this.sex = sex;
this.sexName = sexName;
}
}
mybatis-plus:
global-config:
banner: false
db-config:
# 配置MyBatis-Plus操作表的默认前缀
table-prefix: "t_"
# 配置MyBatis-Plus的主键策略
id-type: auto
# 配置MyBatis日志
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# 配置类型别名所对应的包
type-aliases-package: cabbage.pojo
# 配置扫描通用枚举
type-enums-package: cabbage.pojo

复制代码

而注解 @EnumValue 所标识的属性值会存储到数据库,相当于语句 INSERT INTO t_user ( username, age, sex ) VALUES ( ?, ?, ? )

Parameters: Enum(String), 20(Integer), 1(Integer)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
真香!​MyBatis-Plus 从入门到上手干事!
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射,而实际开发中,我们都会选择使用 MyBatisPlus,它是对 MyBatis 框架的进一步增强,能够极大地简化我们的持久层代码,下面就一起来看看 MyBatisPlus 中的一些奇淫巧技吧。
Guide哥
2021/05/20
7090
谷粒学院day0&day1——项目介绍与mybatis plus入门
java基础、数据库(mysql+jdbc),javaEE,SSM框架,redis,nigix,idea,maven,git,springboot
半旧518
2022/10/26
1.1K0
谷粒学院day0&day1——项目介绍与mybatis plus入门
用过MyBatis-Plus,我再也不想用mybatis了——MyBatis-Plus快速入门加常见注解总结,一文快速掌握MyBatis-Plus
小尘要自信
2023/10/10
2.4K0
用过MyBatis-Plus,我再也不想用mybatis了——MyBatis-Plus快速入门加常见注解总结,一文快速掌握MyBatis-Plus
MyBatisPlus:常用注解
如果表名和我们的实体类的名称不一致的话,在执行相关操作的时候会抛出对应的异常,比如数据库的表我们该为T_USER,然后执行查询操作。
Java鱼头
2022/11/30
7931
MyBatis-Plus 常用注解
将不同业务数据分散存储到不同的数据库服务器,能够支撑百万甚至千万用户规模的业务,但如果业务继续发展,同一业务的单表数据也会达到单台数据库服务器的处理瓶颈。例如,淘宝的几亿用户数据,如果全部存放在一台数据库服务器的一张表中,肯定是无法满足性能要求的,此时就需要对单表数据进行拆分。
用户9615083
2022/12/25
4910
MyBatis-Plus 常用注解
【 MyBatis-Plus | 精讲 】
MyBatis对于大家并不陌生,它是一个持久性框架用于对数据库进行增删改查的操作,而MyBatis-Plus本质就是对MyBatis进行一个扩展。
张哈大
2025/07/10
2400
【 MyBatis-Plus | 精讲 】
看了我的mybatis-plus用法,同事也开始悄悄模仿了
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/08/29
1.1K0
看了我的mybatis-plus用法,同事也开始悄悄模仿了
MyBatis-Plus(实用篇)
创建MyMetaObjectHandler配置类,实现MetaObjectHandler接口
Java微观世界
2025/01/21
8940
MyBatis-Plus(实用篇)
MyBatis-Plus
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
小简
2023/01/30
2.1K0
MyBatis-Plus分页插件的配置和使用
由于版本的区别更换版本如下:此前版本无法引用MybatisPlusInterceptor 故更换使用3.5.1
默 语
2024/11/20
1.1K0
MyBatis-Plus分页插件的配置和使用
【Spring Boot】035-Spring Boot 整合 MyBatis Plus
MyBatis Plus(简称 MyBatis-Plus 或 MP)是 MyBatis 的增强工具包,它在 MyBatis 的基础上提供了很多便捷的功能,简化了开发过程。
訾博ZiBo
2025/01/06
3080
【Spring Boot】035-Spring Boot 整合 MyBatis Plus
深圳Java培训学习:MyBatis Plus 介绍
MyBatis Plus 是国内人员开发的 MyBatis 增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
深圳java培训技术
2019/10/28
5960
深圳Java培训学习:MyBatis Plus 介绍
SpringBoot集成Mybatis-Plus
简介 官网地址 github地址 官网写的非常详细了 特性 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作,BaseMapper 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求,以后简单的CRUD操作,不用自己编写了 ! 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条
shaoshaossm
2022/12/27
3850
SpringBoot集成Mybatis-Plus
MyBatis-Plus笔记
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生
菜鸟雷
2020/10/23
7740
MyBatis-Plus笔记
MyBatis-Plus 之分页查询
@MapperScan(basePackages = "com.kaven.mybatisplus.dao")这个一定要加上。
全栈程序员站长
2022/09/05
1.4K0
MyBatis-Plus 之分页查询
​MyBatis-plus 从入门到入土
MyBatis-plus 是一款 Mybatis 增强工具,用于简化开发,提高效率。下文使用缩写 mp 来简化表示 MyBatis-plus,本文主要介绍 mp 搭配 Spring Boot 的使用。
Java旅途
2021/06/08
1.8K0
Mybatis-plus初体验
创建一个新项目,总会有引入依赖的问题,特此记录最新mybatis_plus的常用用法,以便以后快速创建项目。
猫老师的叶同学
2023/03/01
3630
Mybatis-plus初体验
Mybatis-Plus 插件
上一篇文章:(21条消息) MybatisPlus 条件构造器和常用接口_一切总会归于平淡的博客-CSDN博客
叫我阿杰好了
2022/11/07
8270
Mybatis-Plus 插件
MyBatis-Plus 插件
# MyBatis-Plus 插件🔌 分页插件 添加配置类 测试 xml自定义分页 UserMapper UserMapper.xml中编写SQL 测试 乐观锁 场景 乐观锁与悲观锁 模拟修改冲突 乐观锁实现流程 MyBatis-Plus实现乐观锁 # 分页插件 MyBatis Plus自带分页插件,只要简单的配置即可实现分页功能 # 添加配置类 /** * @author frx * @version 1.0 * @date 2022/4/19 11:11 */ @Configuration
用户9615083
2022/12/25
4700
MyBatis-Plus 插件
MyBaitsPlus快速入门
如果想要每个接口都要变成实现类,那么需要在每个接口类上加上@Mapper注解,比较麻烦,解决这个问题用@MapperScan
大忽悠爱学习
2021/11/15
1.1K0
相关推荐
真香!​MyBatis-Plus 从入门到上手干事!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验