当前位置: 首页 > article >正文

MybatisPlus入门

目录

一.快速入门

1.1 入门案例

1.2 常用注解

1.3 常用配置

二.核心功能

2.1 条件构造器

2.1.1 基于QueryWrapper的查询

2.1.2 基于UpdateWrapper的更新

 2.2 自定义SQL

2.3 Service接口


MybatisPlus顾名思义就是Mybatis的plus版本,但是他并不是要取代Mybatis,而是希望能成为Mybatis最好的搭档。

MybatisPlus具有很多能够帮助我们日常开发的功能,比如引入其不会对我们的工程造成任何影响,我们依旧可以使用Mybatis,只做增强不做改变;

只需要简单的配置就可以快速的进行单表的增删改查操作;

内置许多丰富的功能,代码生成、自动分页、逻辑删除、自动填充等;

一.快速入门

1.1 入门案例

通过一个入门案例感受MybatisPlus进行单表的增删改查。

现在写了一个小案例,其中的功能有新增用户、根据id查询用户、根据id批量查询用户、根据id更新用户、根据id删除用户这些简单的crud功能。

这是对应数据库中的数据。

如果是使用mybatis我们的写法是这样的。

但是如果我们使用MybatisPlus呢?

首先我们需要进行配置。

接着在mapper接口中继承BaseMapper,并指定对应的实体类。

准备好这两步之后我们的开发就变成了下图这些效果。

并且测试这些方法也是没问题的。

使用MybatisPlus很简单,只需要注入对应的好赖,Mapper接口继承BaseMapper即可。

1.2 常用注解

  • @TableName:用来指定表名

当在实体类名与数据库名称不一致时,需要使用@TableName指定表名,如果没有注解那么默认是驼峰转下划线的方式定义表名;

  • @TableId:用来指定表中的主键字段信息

这个注解是用来指定表中的主键字段信息的,还可以定义除了名称外的其他参数,比如type:idType枚举,AUTO表示数据库自增长,INPUT表示通过set方法自行输入.....

  • @TableField:用来指定表中的普遍字段信息

这个主键是指定普通字段信息,当成员变量名与数据库字段不一致那么需要使用该注解进行修正,当成员变量名以is开头,并且是布尔类型的,那么默认在数据库中会将is去掉,所以我们也需要加上该注解,当成员变量名与数据库关键字冲突时,需要使用转义字符例如"`order`",当成员变量不是数据库中的字段也需要使用。

这里需要注意如果主键id为自增,那么需要指定自增类型(type= IdType.AUTO),否则默认是雪花算法生成的。

1.3 常用配置

二.核心功能

2.1 条件构造器

2.1.1 基于QueryWrapper的查询

我们平时写的sql,就算是增删改查,但是也常涉及到条件判断,所以简单自带的sql可能无法满足我们的需求,所以我们就需要使用条件构造器。

这就是一个查询对应字段,条件为名字有带"o",且账户余额大于等于1000的用户。

接下来再写一个更新语句,更新"jack"的账户余额为2000。

2.1.2 基于UpdateWrapper的更新

有一个需求为更新用户id为1,2,4的用户账户余额扣200,我们需要怎么做,在上方因为是只需要变更一个用户的,所以我们直接set进对象。

如果正常写sql,应该是这样的 update user blance = blance-200 where id in(1,2,4)

接下来我们看看使用条件构造器如何编写。

但是我们可以看到如上方QueryWrapper的查询语句,我们的字段都是写死的,这样会导致硬编码,为了避免硬编码,尽量使用LambadQueryWrapper和LambadUpdateWrapper。

 2.2 自定义SQL

这里的自定义SQL是什么意思呢?

mp不是帮我们构建好了SQL吗?

在企业编码规范中,在业务层编写sql是不被允许的,那么我们就需要使用自定义SQL。

我们可以利用mp的wrapper来构建复杂的where条件,然后自定义SQL语句中剩下的部分。

接下来我们就来看看写法。

2.3 Service接口

自定义的接口可以继承Service接口,其中有许多增删改查的方法,但是继承了Service接口后,对应的实现类也需要继承ServiceImpl,这里面就是Service方法的实现。

接下来让我们来看看使用IService接口开发一些业务接口。

下面是对应的实现

我们也可以到对应简单的业务我们甚至都只需要编写controller里的代码即可,但是实际的开发也是都这么简单的业务的,对应比较复杂的业务就需要我们自定义sql,比如这里的第五个接口:扣减用户余额我们需要先根据id来找到对应的用户,再查看其状态是否可用,最后判断其余额是否充足才能进行扣减。

接下来我们来看看IService的Lambda方法。

需求是这样的:实现一个根据复杂条件查询用户的接口,查询条件如下

  • name:用户名关键字,可以为空
  • status:用户状态,可以为空
  • minBalance:最小余额,可以为空
  • maxBalance:最大余额,可以为空

我们用Mybatis写sql的时候应该是这样写的

接下来就看看使用IService的Lambda方法如何编写。

除了查询,Lambda还提供了更新方法。

需求为:改造根据id修改用户余额的接口,要求为,完成用户状态校验,完成用户余额校验,如果扣减后余额为0,则用户status修改为冻结状态(2)。

看这个我们可以发现这与我们之前写的更新很像,无法是加入了用户状态的修改,让我们看看之前的写法。

这里我们使用Lambda的更新方法改造一下。

这样就实现了我们的需求了。

至于MyBatisPlus的扩展功能和插件功能有兴趣的可以去看看b站黑马的MybatisPlus课程。

自我感觉使用MybatisPlus有一定程度上,让代码变得混乱,所以我还是比较偏向于继续使用myabtis。


http://www.kler.cn/a/290981.html

相关文章:

  • 信创技术栈发展现状与展望:机遇与挑战并存
  • 使用 Buildroot 构建带有 Avahi 支持的 Linux 系统
  • spring学习(spring-DI(setter注入、构造器注入、自动装配方式))
  • AI的进阶之路:从机器学习到深度学习的演变(三)
  • 深度学习——现代卷积神经网络(七)
  • 【网络安全】用 Frida 修改软件为你所用
  • Android Radio2.0——交通公告状态设置(二)
  • 【20.1 python中的Web基础】
  • 云计算之数据库
  • Java小白一文讲清Java中集合相关的知识点(四)
  • LEAP模型在能源环境发展、碳排放建模预测及分析中实践应用
  • Python面向对象(15对象嵌套特殊成员)
  • 云原生 | 在 Kubernetes 中使用 Cilium 替代 Calico 网络插件实践指南!
  • 大零售时代:开源 AI 智能名片、2+1 链动与 O2O 商城小程序引领融合新趋势
  • Ajax 2024/3/31
  • 零售自动化新趋势:AI 智能名片与 S2B2C 商城系统助力零售业变革
  • git常用之已存在的目录转换为一个 GIT 项目并托管到github仓库
  • 每天五分钟深度学习:广播机制(以python语言为例)
  • 【大数据】生活中三大数据的概念及其关系
  • 新品上市丨科学级新款制冷相机sM4040A/sM4040B
  • 【ShuQiHere】深入理解递归:从基础概念到实际应用
  • ffmpeg音视频开发从入门到精通——ffmpeg日志及目录操作
  • Java开发笔记--通用消息组件设计(移动短信、华为短信、163邮件)
  • chapter03 流程语句 知识点Note
  • JS基础-ClassList -移动端插件的引入-touch事件-sessionStorage 和 localStorage
  • STM32—I2C的基本时序,MU6050的ID读取