MyBatis Plus从入门到熟练使用(一、入门使用)

目前比较流行的数据持久层框架分为两种,一种是SpringBoot JPA,一种是MyBatis,我个人使用比较多的是MyBatis,关于这两个框架的对比,我个人觉得MyBatis的使用更加灵活一些,所以前面有许多博客的后台数据持久层框架就是使用MyBatis进行开发的,MyBatis虽然使用起来比较灵活,但是也有一些避短,比如比较简单的功能也需要写SQL语句、MyBatis自身支持的功能有限,它连物理分页都没有提供。今天,介绍一款 只在MyBatis 的基础上做增强不做改变,简化开发、提高效率的框架------MyBatis Plus。学会熟练使用MyBatisPlus会使你的后台接口开发效率事半功倍!废话少说,学他。

一、MyBatis Plus简介

任何一个工具最好的入门方式就是去官网查看,这里给出了MyBatis Plus(以下简称MP)的官网地址:https://mp.baomidou.com/

但是作为一个从小白过来的人,我相信许多小白如果一开始就直接看官网文档会头皮发麻,所以,官网文档如果你暂时不想看也可以不看,咱们从实际应用出发,看看到底怎么用MP来提高开发效率。

二、MP入门小例子

下面我们就看来一个小例子来看一下MP是怎么工作的。我们使用IDEA编辑器和SpringBoot框架来写这个例子,这个例子分为五个部分:建库建表、导入MP相关依赖、配置相关文件、实际编码、应用测试。

1、建库建表

这里我随便在Mysql中建了一个学生信息的表如下图,字段比较简单,我就不提供给大家Sql语句了:

2、IDEA中新建项目并导入相关依赖,新建项目的流程我不再赘述,之前的博客里面有详细的新建Springboot项目的介绍,这里导入的MP相关依赖如下图所示:

来稍微解释一下这三个外部依赖,首先lombok是用来简化java代码的,比如我们的数据库映射对象POJOgetter/setter/等方法,异常处理;I/O流的关闭操作等等,这些样板代码既没有技术含量,又影响着代码的美观,通过lombok系统就会做自动处理。

第二个就是MP启动器的依赖,第三个事Mysql的依赖。

3、系统配置

我们要配置一下mysql数据库连接如下图:

4、实际编码

首先我们新建一个实体类对应数据库对象如下图:

 

这里我们使用了@Data注解,就不用再写getter、setter等方法了。

然后我们来写一个dao层的mapper接口,如下图所示:

这里我们让这个mapper继承自BaseMapper,然后我们在启动类中加入扫描mapper的注解如下图:

这样我们就可以写接口来测试我们的MP了。

5、应用测试

首先我们新建一个controller如下:

这里我们直接使用了mapper中的方法:selectList()这里面我们不加任何参数就是查询所有的值的意思。

然后我们运行系统,输入http://localhost:8085/studentinfo/listStudent   ,结果如下:

我们没有写任何SQL就成功的把数据库中的数据返回了,这跟我们之前使用MyBatis确实有点不一样!

通过这个小例子相信大家对MP有了一个初步的了解,下面我们继续深入学习!

三、MP的基本使用方法

我们之前写接口的方式通常如下:

(1)接口中写抽象方法

(2)XML或者注解的形式写SQL语句

(3)Service层调用接口

(4)controller层调用service的接口

现在我们用MP会使上述步骤更加精简!

首先我们来看一下MP的通用Mapper,这里我会通过接口中常用的增删改查方式进行讲解:

1、新增学生信息的接口,如下图所示:

这里我们使用POST格式进行新增,数据类型选择为json格式,如下图所示:

我们运行项目使用postman来测试一下这个接口如下图:

显示是执行成功了的,再去数据库看一下结果:

OK,新增的接口是没问题的,并且我们也打印出了我们的SQL语句如下图:

2、查询

MP中针对查询提供了多种方式:

(1)根据单个id进行查询

这里是通过id进行查询的,我们运行以后看一下结果:

这里我在数据库中又简单的加了个字段:password,看起来完善一些,这里我们不涉及实际的业务,所以我也就不对密码做加密处理了。

(2)通过多个id进行查询

这里以两个id为例进行开发,测试看一下效果:

成功查询了出来。

(3)根据其他字段进行查询

这里以根据名字查询为例进行讲述:

这里我们是以selectByMap方法来进行的,该方法不仅可以用来写根据名字查询信息,也可以根据任何一个字段来进行查询,只要把这个字段的内容封装到Map对象里面即可!下面我们来运行测试一下:

另外利用此方法,我们还可以进行多个字段的查询,比如我们查找名字叫张三,年龄15岁的人,如下图:

执行看一下具体SQL和结果如下图:

 

(4)使用条件构造器进行查询

我们有时候需要根据一定的条件进行查询,比如大于多少,小于多少等等,这里我们介绍条件构造器的查询方法,这里我先分别介绍一下非分页的几种条件构造器的使用方法:selectList   selectOne    selectCount   selectMaps    selectObjs

(I)selectList   ()方法,其实前面我们在写小例子的时候已经用到了这个方法:

只不过我们的条件传入的是null,这里我们传入参数进行查看,如下图:

上面代码中已经有详细注解,这里我们模糊查询名字和年龄小于age的人,看一下具体的sql和结果:

这里我们传入了“四”和18,看一下结果:

 

测试成功!我们再加强一下,再写一个传入模糊名字,age在一个区间,并且telphone不为空的查询接口,如下图所示:

看一下sql流程和查询结果:

关于selectList   这个方法,我们再写一个比较综合的sql需求:

名字为张姓或者年龄大于等于16岁,按照年龄降序排列,年龄相同的id按照升序排列

为了更好的验证结果,我首先要往数据库插了几条数据如下图:

下面我们写接口来实现sql查询如下图:

看一下执行sql语句和结果:

下面我们继续写一个复杂的SQL语句查询,要求如下:

名字为张姓且(年龄小于18或者telphone不为空),如下图所示:

这里我们使用lamda表达式进行判断,具体的sql语句和执行结果如下图:

 

 

 前面我们的查询接口中最后的数据返回的都是全部的数据,如果我们只想返回某几个字段该怎么做呢,很简单,我们在wrapper中添加以下代码即可:

这里我们在上一个方法的基础上添加了select的内容选择,再运行测试一下效果:

 

 selectList   ()方法的使用我们就先介绍到这里,下面再来看一下其他方法的使用方法介绍:

 (II) selectMaps   ()方法:

根据方法定义可知selectMaps的返回对象不再是实体,而实Map对象。并且这个返回的Map对象中的键String就是数据库中的列,值就是数据库中的值。下面我们来具体使用一下它:

这里我们接口需求还是参考上一个的,但是查询方法 我们使用了selectMaps,并且返回对象也用了Map对象,运行测试一下:

 

大家会发现这样和之前用selectList也没有区别呀,在这里要说的是这种方式有一个好处就是当你返回对象中有null的时候,他不会显示,测试一下:

 

这里我们选择只返回id和name字段,如果用实体对象的形式返回数据,那其他字段会返回null值,这里我们看一下用Map返回对象的结果形式:

只返回了我们得到需要的字段。这种方式还有一种应用场景就是需要返回的结果不是一条条记录,而是一个统计查询。比如需要根据某个数据进行数据分组并进行分组后的统计这种场景,在此不再赘述。

 (III) selectObjs   ()方法:

selectObjs的查询方法只返回第一个字段值,其余字段值会被舍弃,我们应用一下观察效果。

所以在使用时一定要注意,它只返回第一个字段值!

 (IV) selectCount   ()方法:

这个方法返回的是查询到的数据记录数,返回值是一个数值,下面我们来测试一下它。

 (V) selectOne   ()方法:

这个方法只能返回一条数据,使用时一定注意,如果返回的数据大于1条,则会报错!这里不再测试它的用法。

(4)使用Lambda表达式条件构造器进行查询

介绍完上面五种MP自带的条件构造器查询方法,我们再来介绍一下使用Lambda表达式条件构造器进行查询,这种方法不仅具有前面我们介绍的那五种方法的优点,还有防误写的功能。

这里就是通过实体类的get方法获取数据库中的列名,这种方法的好处就是防止我们手写数据库的列名时出现错误,而是用Lambda构造器我们根部不用手写数据库列名,这就是防误写的好处。运行看一下效果:

查询成功!我们再来写一个稍微复杂点的SQL:

查询成功!还有一种3.0版本以后新增的方法,这里也介绍一下:

这个方法更简洁一些。 

关于MP的入门暂时就介绍这么多了,下一节我们将进行MP的自定义SQL、分页查询、修改接口、删除接口等的开发,还有AR模式、主键策略和基本配置的介绍,大家加油!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值