初识Mybatis-plus
Mybatis的前生今世
大家如果有过Mybatis的话,都知道他是一款优秀的持久层框架,它支持自定义SQL查询、存储过程和高级映射,消除了几乎所有的JDBC代码和参数的手动设置以及结果集的检索。它封装了JBDC底层访问数据库的细节,使程序猿们不需要与JDBC API打交道,就可以访问数据库,极大地提高了程序猿们的工作效率。Mybatis简单易懂,可以直接编写SQL语句,但同时又对SQL语句的数量的要求非常高,很多同学在学习Mybatis的过程中往往是栽倒在了写SQL语句的环节上。所以这也充分的说明了该框架过于依赖数据库SQL语句,导致数据库的移植性较差的问题。特别是对国内的同学们来说,有时是一大段一大段的英文报错,直接劝退了许多对BS系统设计感兴趣的友友们。
所以现在我们就来介绍一下我们本次专栏所要探究的框架(让我们来研究一种很新但是又不是很新的东西)—— Mybatis-plus。
Mybatis-plus 是由国人团队苞米豆在 Mybatis 的基础上开发的框架,在 Mybatis 的功能上进行了许多的拓展,使程序猿们在使用 Mybatis 框架时更加的方便、高效。简而言之他只是一款 Mybatis 的增强工具,在Mybatis 的基础上只做增强不做改变。打个比方就是,之前 Mybatis 要写的简单的 普通增删改查和查单条语句,现在放到了 Mybatis-plus 上就不用自己手动去写了,但是困难的比如说那些你自定义想要的那些查询,没办法,还是需要自己亲历亲为的。那么就让我们开始吧,一起来看看 Mybatis-plus 框架的强大功能!
项目的自动生成
PS:我在这里使用的是 IDEA2019 版本,如果出现版本类型的错误呢,可以百度调整一下版本号就行了!
这里的话我把 GroupId 写成 com.XX 我的名字的缩写因为习惯了,但是不影响,大家可以看着改。
2. #### 粘贴配置文件
创建完成项目之后一般是来到这个界面
这里就是我们粘贴依赖的地方,从此以往只要是有关依赖的问题,我们都是在这里解决的!
接着我们就开始贴依赖:
首先在<version>1.0-SNAPSHOT</version>下面贴:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
如图:
PS:如果使用的机器是 IDEA2022 的话,上面的这条要放在下面这条代码
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
的上方!然后下面其余的代码则放在这个代码的下方!
接着继续贴:
<dependencies>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.2</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
<overwrite>false</overwrite>
<verbose>true</verbose>
</configuration>
</plugin>
</plugins>
</build>
最后的成果如下:
粘贴完成代码之后要记得 Import Changes 一下哦!(注意,IDEA2019版本的 Import Changes 图标和2022版本的是不一样的)

点击之后等待下载的完成,粘贴依赖的工作就完成了。
刚刚我们过,Mybatis-plus 是一种框架,而并非数据库,所以我们要使用它处理数据时,就必须要连接数据库。所以这个配置文件的作用,就是用于将该新建项目与MySql 中的数据库相连接。
那么我们就用这个数据库来举例:
该数据库的名字叫做“wzry34”,其端口为 3306(这些都是连接的信息哦!很重要!)
接下来,我们要在 IDEA 项目中的 resources 文件夹下创建一个 File 文件,文件名为 “application.properties”:

并将一下代码贴入该 application 文件中:
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/wzry34?serverTimezone=GMT%2B8&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driverClassName = com.mysql.jdbc.Driver
server.port=8080

3306/wzry34:表示指定你需要的那个数据库(这里你要改成你自己的数据库名;3306不一定要改,但是还是要看你的数据库连接信息!);
username和password 表示你的在 Mysql中的用户名和打开该数据要使用的密码;
server.port=8080 :表示你生成项目后你的网页的端口号为8080,但是8080不是唯一的,可以凯成任意你想改的,或者有时候你的端口会和别人的起冲突,导致你没有办法进入你的网页,这个时候也可以来这里修改你的端口名,但是一般情况下是不会有这种事情发生的。(这个很重要!!!)
在 java 文件夹下创建包名 “com.XX”(XX可以设为你的名字或者什么都可以)
创建完成之后是这样的:
紧接着在 com.hw 包下创建一个 Java Class 文件,名字叫做 Application :

将如下代码粘贴上去:
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
成果是这样的:
package com.hw; 的包名路径要记得修改哦!
接下来,还是在 hw 包下,创建一个新的包(package),名字叫做 generator,然后在里面创建一个 Java class 文件,名字也叫做 generator (放心好了,不会冲突的!):
这里要注意哦!Application.java 文件是和 generator 包是同级关系,不要把 Application 文件放到 generator 里面哦!
重点来了!!!!!
generator包里面粘贴代码!这里的代码决定了你自动生成产生的东西!要仔细修改,不要出错哦!
粘贴如下代码到 generator.java 文件里面:
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
5-在com.hw包下面创建一个generator包,在包下面创建generator.java文件,并粘贴代码:
package com.hw.generator;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import java.util.*;
public class generator {
private static String url = "jdbc:mysql://127.0.0.1:3306/wzry34?serverTimezone=GMT%2B8&characterEncoding=utf-8";//改数据库名字(必改)
private static String user = "root";//数据库用户名(必改)
private static String password = "123456";//数据库密码(必改)
private static String dirverName = "com.mysql.cj.jdbc.Driver";
private static String author = "HW";//改作者名字(必改)
private static String outputDir = "src\\main\\java";
private static String controllerDir="controller";//改controller名字(选改)
private static String modelDir="model";//改model名字(选改)
private static String packageName = "com.hw.domain";//生成的东西放在这个包里
private static String templateXMLPath="/templates/mapper.xml.vm";
private static String xmlPath="src/main/resources/mappers/";
private static String servicePackageName="service";//改service名字(选改)
private static String serviceImplPackageName="serviceImpl";//改serviceImpl名字(选改)
private static String mapperPackageName="mapper";//改mapper名字(选改)
public static void main(String[] args) {
GlobalConfig config = new GlobalConfig(); //全局配置
String dbUrl = url;
//数据源配置
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setDbType(DbType.MYSQL)
.setUrl(dbUrl)
.setUsername(user)
.setPassword(password)
.setDriverName(dirverName);
//策略配置
StrategyConfig strategyConfig = new StrategyConfig();
strategyConfig
.setCapitalMode(false) //全局大写命名 ??
.setRestControllerStyle(true)
.setEntityLombokModel(true) //设置为lombok模型
//.setDbColumnUnderline(true)
.setNaming(NamingStrategy.underline_to_camel); //表名生成策略,下划线转驼峰
config.setActiveRecord(false) //是否开启ActiveRecord模式
.setEnableCache(false) //是否支持缓存
.setAuthor(author)
.setOutputDir(outputDir)
.setFileOverride(true) //是否覆盖,第二次运行覆盖第一次
.setServiceName("%sService")//生成的service接口是否首字母为I
.setEnableCache(false)
.setBaseColumnList(true)
.setBaseResultMap(true);
InjectionConfig injectionConfig = new InjectionConfig() {
//自定义属性注入:abc
//在.ftl(或者是.vm)模板中,通过${cfg.abc}获取属性
@Override
public void initMap() {
Map<String, Object> map = new HashMap<>();
map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");
this.setMap(map);
}
};
List<FileOutConfig> focList = new ArrayList<FileOutConfig>();
focList.add(new FileOutConfig(templateXMLPath) {
@Override
public String outputFile(TableInfo tableInfo) {
return xmlPath + tableInfo.getEntityName() + "Mapper.xml";
}
});
injectionConfig.setFileOutConfigList(focList);
TemplateConfig tc = new TemplateConfig();
tc.setXml(null);
new AutoGenerator().setGlobalConfig(config)
.setDataSource(dataSourceConfig)
.setStrategy(strategyConfig)
.setCfg(injectionConfig)
.setTemplate(tc)
.setPackageInfo(
new PackageConfig()
.setParent(packageName)
.setController(controllerDir)
.setEntity(modelDir)
.setMapper(mapperPackageName)
.setService(servicePackageName)
.setServiceImpl(serviceImplPackageName)
).execute();
}
}
//选改的地方可以改也可以不改,改了的话也就是一个名字的区别,没有什么问题会产生,
//比如说这里我们将上面的 private static String mapperPackageName="mapper";
//改成 private static String mapperPackageName="mapper34";
//那么生成出来的 mapper 文件就会变成 mapper34 文件。

接下来就是最重要的一步!点击generator里面的第二个运行绿色按钮,然后就自动生成完毕了!!注意一定要是第二个按钮!!

PS:model里面的东西是你的generator里面的那个wzry34数据库决定的,数据库里面有多少个表,model里面就有多少个东西。
这是自动生成完毕之后的整个项目:

如果到了这一步,就证明自动生成已经完毕了!
还有一点重要的要提醒!!!当项目自动生成完毕之后,就不要再运行 generator 文件了,否则你现在生成的东西会再生成一遍,会覆盖掉!!

正确的方法就是,我们右键点击 Application.java 文件,运行一遍 Application.java 文件:

这样就不会存在重新自动生成的风险了!
