Mybatis-plus(一)初识Mybatis-plus及项目的自动生成

初识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 版本,如果出现版本类型的错误呢,可以百度调整一下版本号就行了!

  1. 创建项目

这里的话我把 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版本的是不一样的)

在这里插入图片描述
点击之后等待下载的完成,粘贴依赖的工作就完成了。

  1. 粘贴配置文件

刚刚我们过,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不是唯一的,可以凯成任意你想改的,或者有时候你的端口会和别人的起冲突,导致你没有办法进入你的网页,这个时候也可以来这里修改你的端口名,但是一般情况下是不会有这种事情发生的。(这个很重要!!!)

  1. 自动生成项目

在 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 文件:

在这里插入图片描述

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

在这里插入图片描述

运行之后(第一次报错是正常的,因为有东西还没添加),右上角就变成了 Application ,注意,以后的项目运行中,也都是只运行 Application.java 文件!

好了,那 Mybatis-plus 的自动生成环节就已经完成了,但是自动生成完了之后并不能马上使用,还有后续的工作等着我们呢,这些工作我们放在第二章来讲,那么今天就到这吧!感谢大家能够耐心看完,希望对你有所帮助哦!


版权声明:本文为qq_51751420原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。