MyBatisPlus架构图(盗用官网的,侵,删。)
SpringBoot第一个简单应用
8.编写测试类
运行结果:
常用注解
MyBatisPlus提供了一些注解供我们在实体类和表信息出现不对应的时候使用。通过使用注解完成逻辑上匹配。
注解名称说明
实体类的类名和数据库表名不一致
实体类的主键名称和表中主键名称不一致
实体类中的成员名称和表中字段名称不一致
排除实体类中非表字段
CURD
BaseMapper中封装了很多关于增删该查的方法,后期自动生成,我们直接调用接口中的相关方法即可完成相应的操作。
BaseMapper
部分代码
插入一条记录测试:
条件构造器查询
除了 BaseMapper
中提供简单的增删改查方法之外,还提供了很多关于区间查询,多表连接查询,分组等等查询功能,实现的类图如下所示:
通过观察类图可知,我们需要这些功能时,只需要创建
对象即可。
上面的日期查询使用的是占位符的形式进行查询,目的就是为了防止SQL注入的风险。
apply方法的源码
SQL 注入的例子:
queryWrapper.apply("date_format(create_time,'%Y-%m-%d')=2019-02-14 or true=true")
.inSql("manager_id","select id from user where name like '王%'");
sql注入例子
在我们调用的查询语句中,通过查看源码(这里以 apply
方法为例)可以看出,每个查询方法的第一个参数都是boolean类型的参数,重载方法中默认给我们传入的都是true。
这个condition的作用是为true时,执行其中的SQL条件,为false时,忽略设置的SQL条件。
在web开发中,controller层常常会传递给我们一个用户的对象,比如通过用户姓名和用户年龄查询用户列表。
我们可以将传递过来的对象直接以构造参数的形式传递给 QueryWrapper
,MyBatisPlus会自动根据实体对象中的属性自动构建相应查询的SQL语句。
如果想通过对象中某些属性进行模糊查询,我们可以在跟数据库表对应的实体类中相应的属性标注注解即可。
比如我们想通过姓名进行模糊查询用户列表。
MybatisPlus提供了4种方式创建lambda条件构造器,前三种分别是这样的
QueryWrapper类已经提供了很强大的功能,而lambda条件构造器做的和QueryWrapper的事也是相同的为什么要冗余的存在lambda条件构造器呢?
QueryWrapper是通过自己写表中相应的属性进行构造where条件的,容易发生拼写错误,在编译时不会报错,只有运行时才会报错,而lambda条件构造器是通过调用实体类中的方法,如果方法名称写错,直接进行报错,所以lambda的纠错功能比QueryWrapper要提前很多。
举个例子:
查找姓名中包含”雨”字的员工信息。
使用QueryWrapper
queryWrapper.like("name","雨");
使用lambda
lambdaQueryWrapper.like(User::getName,"雨");
如果在拼写name的时候不小心,写成了naem,程序并不会报错,但是如果把方法名写成了getNaem程序立即报错。
第四种lambda构造器
细心的人都会发现无论是之前的lambda构造器还是queryWrapper,每次编写完条件构造语句后都要将对象传递给mapper 的selectList方法,比较麻烦,MyBatisPlus提供了第四种函数式编程方式,不用每次都传。
自定义SQL
UserMapper.xml
分页查询
MyBatis分页提供的是逻辑分页,每次将所有数据查询出来,存储到内存中,然后根据页容量,逐页返回。如果表很大,无疑是一种灾难!
MyBatisPlus物理分页插件
删除方式和update极其类似。
AR模式(Active Record)
直接通过实体类完成对数据的增删改查。
Model类中封装了很多增删改查方法,不用使用UserMapper即可完成对数据的增删改查。
主键策略
MyBatisPlus的主键策略封装在 IdType
枚举类中。
在实体类中对应数据库中的主键id属性上标注注解 TableId(type='xxx')
即可完成主键配置。
这种配置方式的主键策略只能在该表中生效,但是其他表还需要进行配置,为了避免冗余,麻烦,MybatisPlus提供了全局配置,在配置文件中配置主键策略即可实现。
如果全局策略和局部策略全都设置,局部策略优先。
基本配置
Original: https://www.cnblogs.com/handsome1013/p/12811634.html
Author: wjj1013
Title: MyBatisPlus学习整理(一)
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/543407/
转载文章受原作者版权保护。转载请注明原作者出处!