配置一下代码就出来,MyBatis-Plus又一神器

配置一下代码就出来,MyBatis-Plus又一神器,第1张

配置一下代码就出来,MyBatis-Plus又一神器 学习要求

良好的java基础, 熟悉SpringBoot框架,熟悉Mybatis框架

教学目标

了解并掌握MyBatis-Plus代码生成器的实现

视频教程

MyBatisPlus实战教程与开发建议

概念

代码生成器,顾名思义就是通过程序生成想要的代码。其原理非常简单,可以简单理解为:模板 + 数据 = 输出。

比如:

模板--Mapper.ftl

package ${basepackage}.mapper;

import com.baomidou.mybatisplus.core.mapper.baseMapper;
import ${basepackage}.${domain};

public interface ${domain}Mapper extends baseMapper<${domain}> {
}

数据

{
    basepackage:"com.langfeiyes.mp",
    domain:"Department"
}

输入:数据 + 模板

将模板中${占位符} 替换成数据,并将渲染好的结果输出到DepartmentMapper.java文件中

package com.langfeiyes.mp.mapper;

import com.baomidou.mybatisplus.core.mapper.baseMapper;
import com.langfeiyes.mp.domain.Department;

public interface DepartmentMapper extends baseMapper {
}

那么此时的DepartmentMapper.java类就编写好了,后续如果将Department替换成Employee,那么EmployeeMapper.xml也就能快速编写成功。

package com.langfeiyes.mp.mapper;

import com.baomidou.mybatisplus.core.mapper.baseMapper;
import com.langfeiyes.mp.domainEmployee;

public interface EmployeeMapper extends baseMapper {
}

MyBatis-Plus 也提供一套代码生成器-AutoGenerator,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。

旧版

旧版代码生成器指的是mybatis-plus-generator 3.5.1 以下版本

以User用户为例子

步骤1:创建User数据表

CREATE TABLE `mybatis-plus`.`user`  (
  `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '用户id',
  `username` varchar(255) NULL COMMENT '用户名',
  `password` varchar(255) NULL COMMENT '密码',
  PRIMARY KEY (`id`)
);

步骤2:导入相关依赖


    com.baomidou
    mybatis-plus-generator
    3.5.0




    org.freemarker
    freemarker
    2.3.31




    com.ibeetl
    beetl
    3.9.3.RELEASE




    org.apache.velocity
    velocity-engine-core
    2.3

注意上面3个模板只需要导入一个即可,默认是Velocity

步骤3:编写代码生成器

package com.langfeiyes.mp.generator;

import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.sql.DataSource;

@Component
public class MyCodeGenerator {

    @Autowired
    private DataSource dataSource;

    //获取数据源-如果没有springboot环境,可以直接调用
    private DataSource getDataSource(){
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        druidDataSource.setUrl("jdbc:mysql://localhost:3306/mybatis-plus?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8");
        druidDataSource.setUsername("root");
        druidDataSource.setPassword("admin");
        return druidDataSource;
    }
    //获取全局配置
    private GlobalConfig getGlobalConfig(){
        String projectPath = System.getProperty("user.dir");
        GlobalConfig gc = new GlobalConfig.Builder()
                .outputDir(projectPath + "/src/main/java")  //输出目录
                .author("dafei")        //作者
                .openDir(true)          //是否打开目录
                //.enableSwagger()        //是否开启swagger模式
                //.fileOverride()         //如果文件已经存在则覆盖
                .build();
        return gc;
    }

    //获取包配置
    private PackageConfig getPageConfig(){
        PackageConfig packageConfig = new PackageConfig.Builder()
                .parent("com.langfeiyes")        //父包名,根包
                .moduleName("mp")                   //模块名
                .entity("entity")                   //指定实体对象包名,默认:entity
                .service("service")                 //指定服务接口包名,默认:service
                .serviceImpl("service.impl")        //指定服务接口实现类包名,默认:service.impl
                .mapper("mapper")                   //指定映射接口包名,默认:mapper
                .xml("xml")                         //指定映射xml文件包名,默认:mapper.xml
                .controller("controller")           //指定controller包名,默认:controller
                .build();                           //构建

        return packageConfig;
    }

    //获取模板配置
    private TemplateConfig getTemplateConfig(){
        TemplateConfig templateConfig = new TemplateConfig.Builder()
                //.entity("entity")                   //指定实体对象模板路径
                //.service("service",  //指定服务接口模板路径
                //        "serviceImpl")    //指定服务接口模板路径
                //.mapper("mapper")                   //指定映射接口模板路径
                //.mapperXml("xml")                         //指定映射xml文件模板路径
                //.controller("controller")           //指定controller模板路径
                .build();

        //注意,处理自定义模板,一般使用默认的
        return templateConfig;
    }

    //策略配置
    //配置数据库与数据表相关的
    public StrategyConfig getStrategy(){
        StrategyConfig config = new StrategyConfig.Builder()
                //.addFieldPrefix("字段前缀")
                //.addExclude("排除哪些表")
                //.addInclude("指定哪些表")
                .addInclude("user")
                //.addTablePrefix("添加表前缀")
                .build();

        return config;
    }


    public  void excute() {
        // 代码生成器
        AutoGenerator mpg = new AutoGenerator(new DataSourceConfig.Builder(dataSource).build())
                // 全局配置
                .global(getGlobalConfig())
                // 包配置
                .packageInfo(getPageConfig())
                //模板配置
                .template(getTemplateConfig())
                //策略配置
                .strategy(getStrategy())
                //注入配置
                .injection(null);
        //mpg.execute(new BeetlTemplateEngine());
        mpg.execute(new FreemarkerTemplateEngine());
        //mpg.execute(new VelocityTemplateEngine());
    }
}

步骤4:测试

@SpringBootTest
public class CodeBuilderTest {
    @Autowired
    MyCodeGenerator myCodeGenerator;
    @Test
    public void testCode() throws SQLException {
        myCodeGenerator.excute();
    }
}

注意:如果是低版本的druid,会包错误:SQLFeatureNotSupportedException

主要是druid数据源中dataSource.getConnection().getSchema() 没有实现,直接丢异常,换新版本即可


    com.alibaba
    druid-spring-boot-starter
    1.2.8
新版

新版代码生成器指的是mybatis-plus-generator 3.5.1 以上版本, *** 作最大的变化是使用了lambda语法

以User用户为例子

前面 *** 作 *** 作步骤都一样

步骤1:创建user用户表

步骤2:导入相关依赖


    com.baomidou
    mybatis-plus-generator
    3.5.1

步骤3:编写代码生成器代码

package com.langfeiyes.mp.generator;

import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.sql.DataSource;

@Component
public class MyCodeGenerator {

    @Autowired
    private DataSource dataSource;

    public  void excute() {
        FastAutoGenerator.create(new DataSourceConfig.Builder(dataSource))
                .globalConfig(builder -> builder
                        .outputDir(System.getProperty("user.dir") + "/src/main/java")  //输出目录
                        .author("dafei")        //作者
                        //.enableSwagger()        //是否开启swagger模式
                        //.fileOverride()         //如果文件已经存在则覆盖
                )
                .packageConfig(builder -> builder
                        .parent("com.langfeiyes")        //父包名,根包
                        .moduleName("mp")                   //模块名
                        .entity("domain")                   //指定实体对象包名,默认:entity
                        .service("service")                 //指定服务接口包名,默认:service
                        .serviceImpl("service.impl")        //指定服务接口实现类包名,默认:service.impl
                        .mapper("mapper")                   //指定映射接口包名,默认:mapper
                        .xml("xml")                         //指定映射xml文件包名,默认:mapper.xml
                        .controller("controller")           //指定controller包名,默认:controller
                )
                
                .strategyConfig(builder -> builder
                        //.addFieldPrefix("字段前缀")
                        //.addExclude("排除哪些表")
                        //.addInclude("指定哪些表")
                        .addInclude("user")
                        //.addTablePrefix("添加表前缀")
                )
                .templateEngine(new FreemarkerTemplateEngine())
                .execute();
    }

}

步骤4:测试

@SpringBootTest
public class CodeBuilderTest {
    @Autowired
    MyCodeGenerator myCodeGenerator;
    @Test
    public void testCode() throws SQLException {
        myCodeGenerator.excute();
    }
}

最终结果

总结

从代码简化程度来说还可以,如果有可能,更建议大家手写一个

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5719823.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存