一、简介
1、MyBatis
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
官方文档:mybatis - MyBatis 3
2、MyBatis-Plus
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
官方文档:简介 | MyBatis-Plus
二、开发前戏
1、引入 MyBatis-Plus
在 pom.xml 文件中引入 MyBatis-Plus 所需依赖
<!--
freemarker 作为 MyBatis-Plus 自动生成代码时作为模板使用,还可选用 velocity 作为模板
<
本次我们选用 freemarker 作为模板
2、配置信息
在 application.yml 文件中,配置 mybatis-plus 的信息
#
我们主要配置了:
- xml 文件的存放位置
- 实体类的存放位置
- 开启驼峰转换原则
- 开启缓存
- 打印 sql 日志
- id 自增策略,有多种策略,如下:
/**
MyBatis-Plus 默认的是推特的“雪花算法”,但是这样生成的主键 id 会比较长,本次我们选择数据库自增策略
我们还需要在项目启动类加上
@MapperScan
扫描我们 mapper 包下面的文件,有时你会发现不在启动类当前包下面的文件无法扫描,于是加上第二个注解,扫描其他文件
3、自动生成代码类
import
我们需要改变的就是:
- 数据库的连接信息,地址,用户,密码
- controller、service、mapper、xml 等文件的命名规则
- 生成文件 controller、service、mapper、xml 文件的存放位置
- 数据库与实体类之间的一些策略配置等
三、开发进行中
1、创建数据表
我们创建一个用户信息表 user_info
drop
2、生成代码
我们利用刚刚创建的自动生成代码类,生成关于 user_info 数据表的 controller、service、mapper、xml、entity 等文件
生成方法:
- 运行自动生成代码类中的 main 方法
- 在控制台输入表名 user_info
生成的文件就自动放在我们配置的包下面
3、代码鉴赏
UserInfo.java文件
import
- @TableName(“sys_user_info”) ,标注表名
- Model,继承了 Model 抽象类,并实现了序列化
- @ApiModelProperty(value = “ID”),注释,这是在自动生成代码类中配置了 // 开启 swagger2 模式 gc.setSwagger2(true);才会生成的
- @TableId(value = “id”, type = IdType.AUTO),表明了主键自增策略
- @TableField(“account”),标注了数据库中对应的字段
- @TableLogic,逻辑删除字段,表示我们在调用删除方法时,数据库并不会物理删除,而是被改变状态,查询的时候,默认不查询已被删除的数据,可以配置逻辑删除值,默认0未删除,1已删除
- pkVal(),方法用于插入返回自增id
文件
import
继承了 BaseMapper 抽象类,使得有了 CRUD 的基本方法
UserInfoMapper.xml文件
<?
- namespace,命名空间,指明这个 xml 文件属于哪一个 mapper 文件
- BaseResultMap,结果集,我们可以定义不同的结果集,来返回我们所需要的数据
文件
import
- 继承了 IService 接口,使得有了 CRUD 的方法
- 相比 mapper,还有了批量操作的方法
文件
import
UserInfoController.java 文件
import
四、开始使用
1、分页查询
我们在 service 的实现类中写一个 分页查询用户的方法,listUserInfo()
@Override
我们传入了查询条件:根据用户名称查询,再根据用户的注册时间倒序排序,最后分页查询
- iPage.getTotal(),就得到了总数量,为 long 型
- iPage.getRecords(),就得到了结果集,为 List 集合
我们还可以使用 lambda 的方式来写查询条件,例如:
queryWrapper
这样,就能避免写数据库字段的时候写错了
2、分页插件
注意:这时候,我们查询数据,发现分页并没有起作用,我们还需要配置 MyBatis-Plus 的分页插件
创建 MybatisPlusConfig.java 文件
package
这时候,我们的分页就正常了,分页默认从1开始,所以不用考虑page = (page-1)*limit 才能使用,1-20的数据,就传入 1,20,20-40的数据就传入 2,20 就可以了
其它的增删改查的方法也是使用很方便的,如果涉及到多表联查,我们还是在 xml 文件中写 sql 吧
五、总结
- 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
- 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
- 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件- - 构造器,满足各类使用需求
- 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
- 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
- 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
- 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
- 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更- - 有超多自定义配置等您来使用
- 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
- 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
- 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
- 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作
如您在阅读中发现不足,欢迎留言!!!
作者:Asurplus、
链接: https:// blog.csdn.net/qq_400657 76/article/details/107546643?utm_medium=distribute.pc_category.none-task-blog-hot-9.nonecase&depth_1-utm_source=distribute.pc_category.none-task-blog-hot-9.nonecase&request_id=
来源:CSDN博客