2021-11-16

MyBatis-Plus

MyBatis-Plus

MyBatis-Plus

内容总览:

简单测试

使用的数据库表:

image-20211117152113250

内容信息:

image-20211117152135737

1、在pom.xml中添加相关配置

为了方便测试,因此在pom.xml文件中添加测试所需要的依赖

2、在application.yml中添加配置
3、创建数据库表对应的entity和mapper文件

User类:在创建该User类使用了lombok组件,可以简化类的编写。

@Data提供了getter和setter

@AllArgsConstructor提供全参构造函数

@NoArgsConstructor提供无参构造函数

Mapper类:直接继承BaseMapper其中实现了对数据库的基本的增删改查

4、在启动类上添加Mapper文件的检索注解@MapperScan
5、测试

在项目文件的test文件夹中创建MapperTests测试类

image-20211117231911806

6、执行结果

image-20211117232005848

代码自动生成器(旧版本)

1、在pom.xml文件中添加相应依赖(同时也要有mybatis-plus-boot-starter依赖)

在使用MyBatis-Plus中的代码自动生成器时,需要模板引擎,它支持Velocity(默认)、Freemaker、Beetl,

如果选择了非默认引擎,需要在AutoGenerator中配置相关引擎:

在此我选择使用Velocity默认模板引擎,所以在pom.xml文件中添加如下依赖:

踩坑:

在添加依赖时,并没有在pom.xml文件中配置org.apache.common:commons-lang3:3.10,但他报错显示没有找到该依赖,我从该网站commons-lang3下载commons-lang3.jar、commons-lang3-resources.jar、commons-lang3-javadoc.jar文件,然后拷贝到本地maven库当中就可以了

2、编辑数据库信息读取类

编写该类是为了方便获取application.yml文件中的数据库连接配置信息

3、编写测试类

在test文件夹下创建AutoGeneratorConfigTests类

4、执行结果展示

image-20211117230804347

如果添加了模块名参数,则会在父包下的对应文件夹下输出文件。比如将pc.setMoudleName(null)改为pc.setMoudleName("test"),则会在mybatisplus目录下创建一个test文件夹,然后将文件输出到test文件夹下,上图的test文件夹就是按照此种方法产生的。

自动生成的CRUD接口

(ps:当项目启动时自动执行某一方法的一种策略

为了实现当项目启动时会自动执行代码自动生成的函数,我进行了如下操作:

创建一个带有@Component注解的类,其中包含了自定义的代码自动生成函数,并为该函数添加@PostConstruct注解,然后在启动类中设置@ComponentScan,扫描该类所在的包,当扫描到该类时,会自动执行带有@PostConstruct注解的函数。

自定义sql语句

1、设置xml文件路径

在使用自定义sql语句时,首先要在application..yml中配置xml文件所在的位置,为了方便,我将生成的xml文件移动到了resources目录之下

image-20211118111716887

在yml文件中添加配置语句:

2、在xml文件中添加所需要的查询语句
3、在mapper文件中添加对应的函数
4、在Service中添加相关调用
5、运行结果

image-20211118112159076

条件构造器

除了上述的原始自定义sql语句方法,还可以通过条件构造器Wrapper的方法,来实现自定义sql语句。

查询分页

1、创建配置类

创建一个配置类MyBatisPlusConfig,添加@Configuration注解,在其中创建方法PaginationInterceptor paginationInterceptor(),并为其添加@Bean注解交给Spring容器来管理。

2、添加XML、Mapper、Service中的内容

xml文件中只需要写正常的查询语句就可以。

Mapper文件中的内容如下:

Service文件中的内容:

3、测试

image-20211118125241356

image-20211118131602252

如果需要继续查看下一页,可以设置page对象的current属性,然后再调用一次查询函数进行查询。因为调用一次查询之后,page只会存储当前页的信息,并不会存储其他页的信息,所以需要其他页的数据时,需要重新查询。

image-20211118125742052