Mybatis
官方文档: Mybatis-Plus, Mybatis-Plus-Join
个人觉得看官方文档大于看那些杂七杂八的视频,真的文档半个小时学会所有语法,看那些什么黑马啊,几个小时你还用不明白。就算忘记了,也可以去文档,就跟小时候查字典一样,哪里不会查哪里,越用越熟的。
先来概述一波,搞java后端说白了就是玩数据库的(并把操控的接口暴露给前端使用)。而为了要能在Spring Boot框架下的Java项目操控DB,就需要JDBC,它使得我们可以在Java代码中直接操作数据库。但是,问题在于JDBC还是很复杂,我们进行了简化就有了基于ORM框架的Mybatis。
你先别急,还有但是,Mybatis其实还是不够简单,为了照顾”低能”的Java程序员,我们连SQL语句都不想打怎么办,就出现了Mybatis Plus,有了它我们甚至只需要用它的封装库,就可以对数据库单表进行CRUD操作。
但是,事情还没完,Java程序员发现,对于多表查询(Join)和分页处理(一个表可能放不下输出),MP还是需要SQL语句的编写,所以引入了Mybatis Plus Join和Mybatis Plus Extension。它们前者可以进行join操作,后者可以进行分页处理。
但是,这是最后一个但是了。Java程序员一想,SQL语句可以不用写了,我连代码都不想写了,反正Entity和Mapper都是固定的,为什么不能一键生成代码呢?于是MybatisX就出现了,它能根据你数据库的形式,自动生成代码,包括Entity,Mapper,XML。
导入依赖
我本地用的是Spring Boot 3.1.6, Java 17。在pom.xml中引入依赖:
Mybatis-Plus
Mybatis-Plus-Extension
Mybatis-Plus-Join
安装插件
配置文件
-
配置application.yml以连接到数据库
-
在根包下创建包config,然后创建MybatisPlusConfig.java。这个很无脑的,只要你用的MySQL基本这样能应对99%的情况,如果不是的话,你换成你用的其他DB也可以的。
-
右侧栏的Datasource导入就不赘述,之前讲过而且很简单。
生成代码
MyBatisX大显身手
效果很惊艳的,我就不放图了
MPJ微调
这些都放心调就行了,因为这些MPJ开头的类都是扩展自Base开头的MP类,所以后者有的,前者不会拉下。
- 将所有mapper文件做调整,获取MPJ的接口实现(必须),而且记得加这个注解,不加的话,任何test测试都会报错
- 将所有service文件做调整,获取MPJ的接口实现(可选)
- 将所有serviceImpl文件做调整,获取MPJ的接口实现(可选)
总结
再提一点我的个人体验,MP和MybatisX是我平时一直用的,但是这俩仅限于单表CRUD操作,对于多表查询和分页处理,还是需要SQL语句的编写。
而MPJ我感觉其实并不好用,不如你直接去Mapper
里面直接用SQL语句实现,其实写个SQL并没有很难。而且最主要的一点是,如果你select
的字段同时在两个表的话,就需要多出一个entity类去装结果字段,而且这个result实体类得跟select的字段一一对应,少一个就不显示,多一个就永远为null
。况且Join类的多表操作其实并不多,它的效率问题就注定了频率不可能很高。
但是MPJ你装了肯定无伤大雅的,它是对MP的扩展,MP有的它都有的,万一用到了对吧,而且它的封装更好听更规范。
Wrapper
这个概念在MP里面也算是重点了,我的经验是抛弃所有普通Wrapper,只用LambdaWrapper
,不论你是单纯查询还是更新。二者区别就是,前者来做判断是用字段名称的String形式区分,后者调用实体类的方法来区分,前者你可能记错,后者不可能对错。
而在MPJ里面,只有MPJLambdaWrapper
和MPJQueryWrapper
。这里老样子我还是建议使用前者,不同点在于后者是要写SQL语句的,前者可以用Class::GetMethod
的办法,因为你都用这些插件了,还用SQL不是脱裤子放屁吗。