使用MyBatis-Plus兵器栈开发集合
一、技术预研
MyBatis-Plus是一款优秀的MyBatis增加工具,特色有集成了Lambda表达式,简化了SQL开发,而且具有强大的代码生成工具。在进行单表操作时,MyBatis-Plus完全不需要写一行sql代码,就能实现增删改查的全部功能,是一款不可多得的工具。提供了like、in、group by、where、and、or、desc、order by等所有操作,非常强大,与Spring Boot的完美整合更是广大程序员的福音。而且支持分页插件,几乎支持市面上所有的流行数据库以及国产数据库。
1.1 支持数据库
- mysql 、 mariadb 、 oracle 、 db2 、 h2 、 hsql 、 sqlite 、 postgresql 、 sqlserver
- 达梦数据库 、 虚谷数据库 、 人大金仓数据库
二、简单实例
现有一张 User 表,其表结构如下:
![0230a611be1b878a49d11d355fa8bd28.png](https://img-blog.csdnimg.cn/img_convert/0230a611be1b878a49d11d355fa8bd28.png)
其对应的数据库 Schema 脚本如下:
![8a4a72ce48f9d4d29fbc19e86caed0d4.png](https://img-blog.csdnimg.cn/img_convert/8a4a72ce48f9d4d29fbc19e86caed0d4.png)
2.导入相应的依赖
![7d87f8a613ed868dc7c253862c3235e9.png](https://img-blog.csdnimg.cn/img_convert/7d87f8a613ed868dc7c253862c3235e9.png)
说明:我们使用mybatis-plus可以节省我们大量的代码,尽量不要同时导入mybatis和mybatis-plus!
3.连接数据库
![a2568a2663945cf15c66c0545e2ee5a8.png](https://img-blog.csdnimg.cn/img_convert/a2568a2663945cf15c66c0545e2ee5a8.png)
4.编写代码
使用mybatis-plus之后。只需要pojo、dao接口、及其他接口
编写实体类 User.java(此处使用了 Lombok 简化代码)
![1c39ba26600195daca5a92b52f9e75c1.png](https://img-blog.csdnimg.cn/img_convert/1c39ba26600195daca5a92b52f9e75c1.png)
编写Mapper类 UserMapper.java
![a7e7de5bebc6ef02074b1a69ad826b1c.png](https://img-blog.csdnimg.cn/img_convert/a7e7de5bebc6ef02074b1a69ad826b1c.png)
在 Spring Boot 启动类中添加 @MapperScan 注解,扫描 Mapper 文件夹:
![576d7cfcbd0bbd51323ce93ac9ae649e.png](https://img-blog.csdnimg.cn/img_convert/576d7cfcbd0bbd51323ce93ac9ae649e.png)
添加测试类,进行功能测试:
![5c4a719f5c26f5d975eec649380fbf96.png](https://img-blog.csdnimg.cn/img_convert/5c4a719f5c26f5d975eec649380fbf96.png)
控制台输出:
![e33c29598d6b7f964f6ee7549e12e138.png](https://img-blog.csdnimg.cn/img_convert/e33c29598d6b7f964f6ee7549e12e138.png)
5.小结
通过以上几个简单的步骤,我们就实现了 User 表的 CRUD 功能,甚至连 XML 文件都不用编写!
从以上步骤中,我们可以看到集成MyBatis-Plus非常的简单,只需要引入 starter 工程,并配置 mapper 扫描路径即可。
但 MyBatis-Plus 的强大远不止这些功能,想要详细了解 MyBatis-Plus 的强大功能?那就继续往下看吧!
三、配置日志
我们所用的sql现在是不可见的,我们希望知道他是怎么执行的,所以我们必须要查看日志!
![4890f948c4e5eb4058c5a159a6d3ef39.png](https://img-blog.csdnimg.cn/img_convert/4890f948c4e5eb4058c5a159a6d3ef39.png)
这样就能查看到日志文件
![7abc4a286fdf2da704a619b5ff568625.png](https://img-blog.csdnimg.cn/img_convert/7abc4a286fdf2da704a619b5ff568625.png)
四、CRUD扩展
Insert 插入
![d620d769f52cc9f460a3405728756ae6.png](https://img-blog.csdnimg.cn/img_convert/d620d769f52cc9f460a3405728756ae6.png)
参数说明
![395c26a675ef81f476ac1424d33a0b49.png](https://img-blog.csdnimg.cn/img_convert/395c26a675ef81f476ac1424d33a0b49.png)
举例测试
![390f6b83897bf604fad79f9fb57f15bb.png](https://img-blog.csdnimg.cn/img_convert/390f6b83897bf604fad79f9fb57f15bb.png)
数据库插入的id为全局默认的id(ID_WORKER)
主键生成策略
(1)分布式系统唯一id生成
(2)雪花算法
我们需要配置主键自增
1、实体类字段上 @TableId(type =IdType.AUTO)
![aff59abfd3035642b4e304ec8f51f5f2.png](https://img-blog.csdnimg.cn/img_convert/aff59abfd3035642b4e304ec8f51f5f2.png)
2、数据库字段一定要是自增的
4.1更新操作
![e9ca5da2eb70dbd49c65a965dd541cac.png](https://img-blog.csdnimg.cn/img_convert/e9ca5da2eb70dbd49c65a965dd541cac.png)
参数说明
![91709713bca379acb35ba7c8bbb04bc1.png](https://img-blog.csdnimg.cn/img_convert/91709713bca379acb35ba7c8bbb04bc1.png)
举例测试
![bc28af1720ac56ccc0c928321816b55b.png](https://img-blog.csdnimg.cn/img_convert/bc28af1720ac56ccc0c928321816b55b.png)
创建时间、修改时间!这些个操作一遍都是自动化完成,我们不希望手动更新!
面试中经常会问到乐观锁,悲观锁
乐观锁:顾名思义十分乐观,它总是被认为不会出现问题,无论干什么都不去上锁!如果出现了问题,再次更新测试
悲观锁:顾名思义十分悲观,它总是出现问题,无论干什么都会上锁!再去操作!
乐观锁实现方式
- 取出记录是,获取当前version
- 更新时,带上这个version
- 执行更新事,set version=newVersion where version =oldVersion
- 如果version不对,就更新失败
![ae7b8d2c6e161826146cd6978bfe2d4f.png](https://img-blog.csdnimg.cn/img_convert/ae7b8d2c6e161826146cd6978bfe2d4f.png)
1、表中创建乐观锁字段version 默认值为1
![7f8c5e311a623e944b19194e01ee3f35.png](https://img-blog.csdnimg.cn/img_convert/7f8c5e311a623e944b19194e01ee3f35.png)
2、同步实体类
![1cdbfe496d730beda9f6d9db3ec49702.png](https://img-blog.csdnimg.cn/img_convert/1cdbfe496d730beda9f6d9db3ec49702.png)
3、注册组件 (config包下)
![b16595b1a1ff57d556a6629c810cd816.png](https://img-blog.csdnimg.cn/img_convert/b16595b1a1ff57d556a6629c810cd816.png)
特别说明:
支持的数据类型只有:int,Integer,long,Long,Date,Timestamp,LocalDateTime
整数类型下 newVersion = oldVersion + 1
newVersion 会回写到 entity 中
仅支持 updateById(id) 与 update(entity, wrapper) 方法
在 update(entity, wrapper) 方法下, wrapper 不能复用!!!
测试一下:
![6ca5a9cb71ad4e14e9a99c4607a45085.png](https://img-blog.csdnimg.cn/img_convert/6ca5a9cb71ad4e14e9a99c4607a45085.png)
4.2查询操作
![754d19e7abf51ac8ea58178d30c6b067.png](https://img-blog.csdnimg.cn/img_convert/754d19e7abf51ac8ea58178d30c6b067.png)
参数说明
![1d2be76cf3ab0374ff4e6ea327c8ce64.png](https://img-blog.csdnimg.cn/img_convert/1d2be76cf3ab0374ff4e6ea327c8ce64.png)
实例测试
![4c6732710e228dae91e25692da78b0e4.png](https://img-blog.csdnimg.cn/img_convert/4c6732710e228dae91e25692da78b0e4.png)
分页查询
分页在网站使用的十分多
1、原始的limit进行分页
2、pageHelper 第三方插件
3、Mybatis-Plus中也内置了分页插件!
1、配置拦截器组件即可
![5ce6e9d9a1e65b521be71e2bf6914909.png](https://img-blog.csdnimg.cn/img_convert/5ce6e9d9a1e65b521be71e2bf6914909.png)
2、写测试
![c742f57c25e2b0a3278da3a0744af30b.png](https://img-blog.csdnimg.cn/img_convert/c742f57c25e2b0a3278da3a0744af30b.png)
4.3删除
![dea22fa6f0ab78af5c8da0661e1bb572.png](https://img-blog.csdnimg.cn/img_convert/dea22fa6f0ab78af5c8da0661e1bb572.png)
#参数说明
![0e157a9fe05f76a8b1744811a494c507.png](https://img-blog.csdnimg.cn/img_convert/0e157a9fe05f76a8b1744811a494c507.png)
![eab7671732830153c3722e6f7ddb79b8.png](https://img-blog.csdnimg.cn/img_convert/eab7671732830153c3722e6f7ddb79b8.png)
五、条件构造器
十分重要:Wrapper
我们写一些复杂的sql可以用它来完成
现做几个实例看看:
![8f23b13a39088138008eb9cdba5ed74c.png](https://img-blog.csdnimg.cn/img_convert/8f23b13a39088138008eb9cdba5ed74c.png)
![f3f974b7faffafd63bc197eea6c456d0.png](https://img-blog.csdnimg.cn/img_convert/f3f974b7faffafd63bc197eea6c456d0.png)
六、代码自动生成器
dao、pojo、conrtroller、service自动生成
AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、 Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。
![1ff87a3044f9ecbf3c9d7095e5b2da1e.png](https://img-blog.csdnimg.cn/img_convert/1ff87a3044f9ecbf3c9d7095e5b2da1e.png)
![fbf7a862020631a7b374816da6e053ad.png](https://img-blog.csdnimg.cn/img_convert/fbf7a862020631a7b374816da6e053ad.png)
![703a59b296cfcd0948d2ce6bcd0ce44e.png](https://img-blog.csdnimg.cn/img_convert/703a59b296cfcd0948d2ce6bcd0ce44e.png)
七、总结
使用MyBatis-Plus兵器栈真的极大地丰富了我们的开发