MybatisPlus框架(加强版)--微服务第一天笔记
https://ai.feishu.cn/wiki/PsyawI04ei2FQykqfcPcmd7Dnsc
这是关于mybatisplus更加详细的笔记,下面只是主包的个人见解
基础准备
在mybatisplus框架中需要先进行引入关于mybatisplus的起步依赖,然后在需要进行mapper接口上面去继承BaseMapper,这里面泛型很重要
MybatisPlus常见注解

在默认的情况下,在继承里面的泛型会默认去定位数据库里面的表,如果表和实例类名称不一致需要在实例类上面加上@Tablename去指定数据库里面的表名称,在这里还需要进行指定主键,在默认的情况下会自动默认和数据库主键名称一致,若不一致,需要使用@TableId进行指定主键的名称,对于普通字段来说需要进行使用@TableField来进行指定字段名称
这里讲一下关于IdType的类型,主要分为三种类型:第一种类型是AUTO是按照数据库里面的主键进行自增,ASSIGN_ID是会默认值,当你不进行指定主键的idtype的时候会默认使用雪花算法去自己算出一个值,对于INPUT的话这个值是需要自己去设置,还需要注意的是,我在配置文件里面配置了之后,现在假设是雪花算法,但是我在实体类里面使用注解去指定的是AUTO自增长字段的话,在调用的时候还是会优先使用注解的
需要注意的事项:1.当实例类里面存在数据库里面不存在的值的时候需要进行解释,在@tableField的后面加上exists=flase,这样的话就是告诉idea,这个成员变量在数据库里面不存在
2.当在idea里面使用关于is开头的字段的时候并且是boolean的情况下,数据库层面会自动将is去掉,这个时候也是需要自己去使用注解去指定数据库中相应的字段
3.当在成员变量里面存在和sql相关的字段的时候:比如有个叫order的字段的时候需要进行使用时候需要指定注解,然后加上“ ”两个反单引号
配置

这里还是需要配置关于mapper的位置信息
核心
条件构造器

其实在使用构造器的时候就是使用lambda来进行查询,就是为了使用方法引用,注意在这里面不能使用lambda来进行写,必须使用方法引用,具体原因去看原理(点击)。大致原因就是在使用方法引用的时候会自动找到类中的具体的方法来进行编译。使用lambda写的时候可以避免硬编码,可以动态获取,让代码变得更加优雅
自定义SQL

自定义sql的使用场景就是在sql的where条件十分复杂的时候来进行使用,具体的做法就是需要在service里面去自己去用lambdawrapper来进行编写where条件。然后传递给mapper,然后你需要做的就是在mapper的接口里面去加上注解ew,或者是Constant.wrapper来进行设置名称,最后就是在xml文件里面去拼接,就是使用$符号来进行拼接,这样能够写的更加便捷。(其实现在有AI,不这样写的话其实也是可以的,最后稍加修改就行),在idea里面就是:



IService接口
基本用法:在mybatisplus里面提供了各种crud的方法所以我只需要让我的Userservice去继承Iservice,然后让我的UserserviceImp去继承IserviceImp就行,然后在Userservice的泛型里面去指定关于使用的具体的操作类,然后在UserserviceImp里面去指定关于使用的是哪个mapper接口以及指定具体的操作类User。因为UserMapper不是已经继承了BaseMapper吗,那我肯定是要去指定我才能知道我去操作的是哪个mapper了。






需要注意的是我获取到basemapper这条,这就是我要是再iservice里面要是没法直接调用,需要我自己去定义sql的时候,我可以拿到basemapper,然后使用basemapper调用一个不存在的方法,然后自己去定义
批处理


扩展功能
代码生成器
这里需要先安装mybatisplus插件,然后去指定哪个数据库


这里需要讲解的就是关于module,这里因为没有父工程,所以也就没有子工程,所以啥也不用写,但是要是存在的话就需要指定子工程;package填需要生成路径的参数。


这里主包试了一下关于tablePrefix,写上tb_也没有问题,因为不存在,也就不会出现报错的问题,所以大家在代码生成的时候可以多选,将共同的前缀去掉,要是和实体类中的一致也不用担心,不会出现错误
DB静态工具
在这里插入图片描述

这里的DB工具类是用来简化注入问题,就是需要传递的是操作的类,所以这里面需要传递的是类,这样就能通过反射来获取到实体类的相关信息
逻辑删除
因为在实际应用当中,我们的订单信息肯定不能删除,所以这里的remove不能用,但是我还是需要删除的,怎么办呢,这时候mp提供了叫做逻辑删除


枚举处理器

这里解释一下关于上面的两个注解,首先就是@EnumValue这个是用来映射在枚举类中的字段值和数据库的对应的关系,告诉数据库我在插入的时候是将哪个字段插入@JsonValue是用来将对象序列化之后我将枚举类中的哪个字段作为返回值返回给前端。
mybatis-plus:
configuration:
default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler
JSON处理器
这个JSON处理器是应对在数据库中存在JSON格式的数据,但是在Java中没法进行识别,这个时候我们就需要在实体类上面的@TableField中加上(typehandler=Jacksontypehandler.class)然后在实体类的注解@Tablename(value=“”,autoResultMapper=“true”)开启。这样的话,我在进行数据库映射到Java里面的时候就会直接映射到我自己定义的实体类上面,就不需要我们在进行转换


配置加密
目前我们配置文件中的很多参数都是明文,如果开发人员发生流动,很容易导致敏感信息的泄露。所以MybatisPlus支持配置文件的加密和解密功能。
我们以数据库的用户名和密码为例。
这里我们在yaml里面配置的都是明文的形式
现在我可能去引用环境变量,这需要配置到系统的环境变量中,但是这种方式比较麻烦
所以现在使用mp的加密




记住需要在密文的前面加上mpw:不然不会生效,还有需要在启动类上面加上参数,这个参数就是我们的randomkey
分页插件
在mybatisplus当中提供了很多插件

这里说一下关于分页插件,剩下的都一样,著需要创建一个拦截器,然后去添加插件就行


更多推荐


所有评论(0)