![6721d5cb735509038f2d92c38399ccc7.png](https://i-blog.csdnimg.cn/blog_migrate/11efed4fd05e7555b477f32ef8ef6b2e.jpeg)
文末附有完整案例的代码内容!!
以前在开发的时候,使用mybatis的时候,经常都需要先配置xml映射文件,然后每条sql操作都需要自己进行手动编写,对于一些复杂的sql这么来操作确实有必要,但是如果只是一些非常简单的insert,update,delete,select这类型的语句而言,也需要开发人员花费额外的时间进行手动编写的话,确实费时又费力。
能否为mybatis特别定制一套能够自动为我们生成一些简单sql功能,同时又支持我们进行自定义sql设置功能的强大框架呢?
mybatis plus因此诞生了。
![8ef4aec8a5a9f503592416f819647282.png](https://i-blog.csdnimg.cn/blog_migrate/83595924a17341c60165692350ada7c2.png)
mybatis plus是一款专门针对于传统MyBatis开发中sql需要手动进行映射配置繁琐缺点的一款框架技术,这款框架技术提供了十分丰富的api供开发者们使用,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
Mybatis plus到底有多方便呢,我们闲话不多说,直接上手代码实例来进行演示:
首先我们需要导入一些相关的pom依赖配置
<?xml version="1.0" encoding="UTF-8"?>
导入了jar包之后,为了方便测试,我们首先在数据库里面搭建相关的数据表信息
CREATE
该表对应的实体类:
package
通常我们在开发的时候都会自定义一个Dao层,mybatis plus里面提供了一个叫做BaseMapper的接口,内部已经提供了相当多的crud操作函数的封装。可以来仔细查看一下该接口的内容:
/**
这些内置的功能都是已经提前自定义好了的,因此对于一些常用的简单的sql我们可以避免使用手动拼接的方式来实现,大大提升了开发人员的开发效率,结合文章上边所说的教师对象,我们自定义一个Mapper接口用于实现crud的操作:
package
为了方便测试,我直接选择了在controller里面引用dao函数的功能。
1.提前定义好的插入功能:
BaseMapper里面封装了已经定义好的insert语句,能够方便我们直接调用,无须自己手动编写sql
@GetMapping
生成的sql语句:
INSERT
2.提前定义好的删除功能
BaseMapper里面提供有已经定义好的delete功能,
@GetMapping
生成的sql语句:
DELETE FROM teacher WHERE id=11;
3.提前定义好的更新功能
BaseMapper里面定义了相关的update功能,但是在进行update的时候有个地方需要注意,来看看下边这段代码先
@GetMapping
生成的sql语句:
UPDATE teacher SET teacher_pwd='new-pwd' WHERE id=1;
mybatis-plus里面提供了一个叫做EntityWrapper的对象封装操作类,通过传入相关的Entity来判断传入的查询参数,这里的使用让我回想起了以前用hibernate的那种味道,不得不说这种功能的设计确实帮开发者的开发效率提升了很多。
以前写更新语句的时候,经常是需要在xml里面进行非常多繁琐耗时的sql拼接工作,现在mybatis-plus通过EntityWrapper这个封装类,大大节省了相应时间。
4.根据指定id进行查询
mybatis-plus也默认提供了关键字查询的功能,可以将查询参数通过对象Entity的形式注入,非常方便。
ps:mybatis-plus已经默认带有了sql注入的预防功能,因此这点可以放心使用。
@GetMapping
生成的sql语句:
SELECT id,teacher_name AS teacherName,teacher_pwd AS teacherPwd
FROM teacher
WHERE id=0;
5.使用Map来进行多关键字的查询
有些时候,除了使用查询时候使用Entity关键字来进行查询之外,还可以通过使用Map的形式来进行多关键字的搜索实现,相关代码如下所示:
@GetMapping
注意,这里的map放入的key值需要和表里面的字段命名一致。
生成的sql语句:
SELECT id,teacher_name AS teacherName,teacher_pwd AS teacherPwd
FROM teacher
WHERE teacher_name = 'qwe';
6.统计查询
@GetMapping
生成的sql语句:
SELECT COUNT(1) FROM teacher WHERE id=1 AND teacher_name='qwe';
7.分页查询
在实际开发中,分页查询功能一直是非常普遍需要运用到的一点,在mybatis-plus里面,他提供了一个叫做Page的类供我们使用,相应的代码如下所示:
@GetMapping
生成的sql语句:
SELECT id,teacher_name AS teacherName,teacher_pwd AS teacherPwd FROM teacher WHERE (id >= 1) LIMIT 0,1;
mybatis-plus使用的分页技术是传统的 limit 物理分页方式。
8. in 查询
查询的时候,如果需要使用in查询的话,可以使用selectBatchIds这个api功能:
@GetMapping
生成的sql语句:
SELECT id,teacher_name AS teacherName,teacher_pwd AS teacherPwd FROM teacher WHERE id IN ( 1 , 10 , 11 );
9.复杂条件查询
针对于比较复杂的多条件查询,mybatis-plus内部提供的EntityWrapper支持有许多丰富的查询api功能供我们使用。
为了方便理解,下边通过实际的代码案例来进行解释
allEq查询(相当于条件全部都要求满足的情况)
@GetMapping
生成的sql语句:
SELECT id,teacher_name AS teacherName,teacher_pwd AS teacherPwd
FROM teacher
WHERE (teacher_pwd = 'pwd' AND teacher_name = 'name');
ne查询
@GetMapping
生成的sql语句:
SELECT id,teacher_name AS teacherName,teacher_pwd AS teacherPwd
FROM teacher
WHERE (teacher_name <> 'name');
eq查询
@GetMapping
生成的sql语句:
SELECT id,teacher_name AS teacherName,teacher_pwd AS teacherPwd
FROM teacher
WHERE (teacher_name = 'name');
复杂的多条件查询:
@GetMapping
生成的sql语句:
![8475b081efea7f6f42526fe229a89c51.png](https://i-blog.csdnimg.cn/blog_migrate/d9df54d9f50e7ec5c58ce142bedae3c8.png)
组合的and和or条件查询:
![01d6112df80abbd1ff5d36f2b037d724.png](https://i-blog.csdnimg.cn/blog_migrate/e753ee9fff5a90020f1933b3d302ad44.png)
生成的sql语句:
SELECT id,teacher_name AS teacherName,teacher_pwd AS teacherPwd
FROM teacher
WHERE (id>1) OR (id=0 AND teacher_name='name' AND teacher_pwd IS NULL);
having和groupby查询:
![7cb45aea8a73bab57c8e96d0222c2032.png](https://i-blog.csdnimg.cn/blog_migrate/e112b79a622f3f5fc2185e5dede319ab.png)
生成的sql语句:
SELECT id,teacher_name AS teacherName,teacher_pwd AS teacherPwd
FROM teacher GROUP BY teacher_name HAVING (id>1);
除了常规的基于Mapper的直接操作数据库操作功能以外,Mybatis-plus内部还提供了一个叫做IService的接口,内部含有很多丰富的CRUD操作功能可以供开发人员调用:
/**
在使用的过程中,mybatis-plus还能兼容原有mybatis的xml和注解模式的sql拼写功能。
mybatis-plus这种集mybatis与hibernate的优点一起的框架。提供了hibernate的单表CRUD操作的方便同时,又保留了mybatis的特性。
不得不说mybatis-plus的出现搭配上原有的mybatis框架极大的促进了开发效率的提升,同时基友搭配,效率翻倍。因此也有人把它们比做成魂斗罗里面的两兄弟,基友搭配,效率翻倍。
![64a40efa5b07ee337dca8963ed9d2984.png](https://i-blog.csdnimg.cn/blog_migrate/e8123d3eb0276b43486839bcab22421c.jpeg)
本案例的代码链接:
https://gitee.com/IdeaHome_admin/wfw
推荐阅读
1. SpringBoot 整合篇
2. 手写一套迷你版HTTP服务器
3. 记住:永远不要在MySQL中使用UTF-8
4. Springboot启动原理解析