写作背景:基于之前的教训,万事开头难。于是这边记录下结尾局部。方面前期能够间接应用,缩小学习老本。

依赖文件:

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>2.7.0</version>        <relativePath/> <!-- lookup parent from repository -->    </parent>    <groupId>com.example</groupId>    <artifactId>demo12</artifactId>    <version>0.0.1-SNAPSHOT</version>    <name>demo12</name>    <description>demo12</description>    <properties>        <java.version>17</java.version>    </properties>    <dependencies>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>            <version>5.1.24</version>            <scope>runtime</scope>        </dependency>        <dependency>            <groupId>org.projectlombok</groupId>            <artifactId>lombok</artifactId>            <optional>true</optional>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>        <dependency>            <groupId>com.baomidou</groupId>            <artifactId>mybatis-plus-boot-starter</artifactId>            <version>3.4.1</version>        </dependency>        <dependency>            <groupId>com.baomidou</groupId>            <artifactId>mybatis-plus-generator</artifactId>            <version>3.4.1</version>        </dependency>        <dependency>            <groupId>org.freemarker</groupId>            <artifactId>freemarker</artifactId>            <version>2.3.31</version>        </dependency>        <dependency>            <groupId>io.jsonwebtoken</groupId>            <artifactId>jjwt</artifactId>            <version>0.9.1</version>        </dependency>        <dependency>            <groupId>javax.xml.bind</groupId>            <artifactId>jaxb-api</artifactId>        </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>        </plugins>    </build></project>

Java版本,8.0

application.yaml

server:  port: 9999spring:  datasource:    driver-class-name: com.mysql.jdbc.Driver    url: jdbc:mysql://localhost:3306/crmeb?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimeZone=GMT+8    username: root    password: roottoken:  key: test

生成代码

package com.example.demo12.common;import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;import com.baomidou.mybatisplus.core.toolkit.StringPool;import com.baomidou.mybatisplus.core.toolkit.StringUtils;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 com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;import java.util.ArrayList;import java.util.List;import java.util.Scanner;// 演示例子,执行 main 办法控制台输出模块表名回车主动生成对应我的项目目录中public class CodeGenerator {    /**     * <p>     * 读取控制台内容     * </p>     */    public static String scanner(String tip) {        Scanner scanner = new Scanner(System.in);        StringBuilder help = new StringBuilder();        help.append("请输出" + tip + ":");        System.out.println(help.toString());        if (scanner.hasNext()) {            String ipt = scanner.next();            if (StringUtils.isNotBlank(ipt)) {                return ipt;            }        }        throw new MybatisPlusException("请输出正确的" + tip + "!");    }    public static void main(String[] args) {        // 代码生成器        AutoGenerator mpg = new AutoGenerator();        // 全局配置        GlobalConfig gc = new GlobalConfig();        String projectPath = System.getProperty("user.dir");        gc.setOutputDir(projectPath + "/src/main/java");        gc.setAuthor(" ");        gc.setOpen(false);        // gc.setSwagger2(true); 实体属性 Swagger2 注解        gc.setServiceName("%sService");        mpg.setGlobalConfig(gc);        // 数据源配置        DataSourceConfig dsc = new DataSourceConfig();        dsc.setUrl("jdbc:mysql://localhost:3306/crmeb?useUnicode=true&useSSL=false&characterEncoding=utf8");        // dsc.setSchemaName("public");        dsc.setDriverName("com.mysql.jdbc.Driver");        dsc.setUsername("root");        dsc.setPassword("root");        mpg.setDataSource(dsc);        // 包配置        PackageConfig pc = new PackageConfig();//        pc.setModuleName(scanner("demo12"));//        pc.setParent("com.example");        pc.setParent("com.example.demo12")            .setEntity("entity")            .setMapper("mapper")            .setService("service")            .setServiceImpl("service.impl")            .setController("controller");        mpg.setPackageInfo(pc);        // 自定义配置        InjectionConfig cfg = new InjectionConfig() {            @Override            public void initMap() {                // to do nothing            }        };        // 如果模板引擎是 freemarker        String templatePath = "/templates/mapper.xml.ftl";        // 如果模板引擎是 velocity        // String templatePath = "/templates/mapper.xml.vm";        // 自定义输入配置        List<FileOutConfig> focList = new ArrayList<>();        // 自定义配置会被优先输入        focList.add(new FileOutConfig(templatePath) {            @Override            public String outputFile(TableInfo tableInfo) {                // 自定义输入文件名 , 如果你 Entity 设置了前后缀、此处留神 xml 的名称会跟着发生变化!!                return projectPath + "/src/main/resources/mapper/" + pc.getModuleName()                        + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;            }        });        /*        cfg.setFileCreate(new IFileCreate() {            @Override            public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) {                // 判断自定义文件夹是否须要创立                checkDir("调用默认办法创立的目录,自定义目录用");                if (fileType == FileType.MAPPER) {                    // 曾经生成 mapper 文件判断存在,不想从新生成返回 false                    return !new File(filePath).exists();                }                // 容许生成模板文件                return true;            }        });        */        cfg.setFileOutConfigList(focList);        mpg.setCfg(cfg);        // 配置模板        TemplateConfig templateConfig = new TemplateConfig();        // 配置自定义输入模板        //指定自定义模板门路,留神不要带上.ftl/.vm, 会依据应用的模板引擎自动识别        // templateConfig.setEntity("templates/entity2.java");        // templateConfig.setService();        // templateConfig.setController();        templateConfig.setXml(null);        mpg.setTemplate(templateConfig);        // 策略配置        StrategyConfig strategy = new StrategyConfig();        strategy.setNaming(NamingStrategy.underline_to_camel);        strategy.setColumnNaming(NamingStrategy.underline_to_camel);//        strategy.setSuperEntityClass("你本人的父类实体,没有就不必设置!");        strategy.setEntityLombokModel(true);        strategy.setRestControllerStyle(true);        // 公共父类//        strategy.setSuperControllerClass("你本人的父类控制器,没有就不必设置!");        // 写于父类中的公共字段        strategy.setSuperEntityColumns("id");        strategy.setInclude(scanner("表名,多个英文逗号宰割").split(","));        strategy.setControllerMappingHyphenStyle(true);        strategy.setTablePrefix(pc.getModuleName() + "_");        mpg.setStrategy(strategy);        mpg.setTemplateEngine(new FreemarkerTemplateEngine());        mpg.execute();    }}

分页

package com.example.demo12.config;import com.baomidou.mybatisplus.annotation.DbType;import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;import org.mybatis.spring.annotation.MapperScan;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configuration@MapperScan("com.example.demo12.mapper")public class MybatisPlusConfig {    /**     * 增加分页插件     */    @Bean    public MybatisPlusInterceptor mybatisPlusInterceptor() {        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));//如果配置多个插件,切记分页最初增加        //interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); 如果有多数据源能够不配具体类型 否则都倡议配上具体的DbType        return interceptor;    }}

UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"        "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.example.demo12.mapper.UserMapper">    <select id = "listAll" resultType="com.example.demo12.entity.User">        select * from user    </select>    <select id = "userCount" resultType="java.lang.Integer">        select count(1) from user    </select>    <select id = "listTest" resultType="com.example.demo12.entity.User">        select * from user    </select>    <select id = "testUserCount" resultType="java.lang.Integer">        select count(1) from user    </select></mapper>