关于mybatis-plus-generator的简单使用示例详解

 更新时间:2024年03月05日 10:58:45   作者:Spirit_NKlaus  
在springboot项目中集成mybatis-plus是很方便开发的,最近看了一下plus的文档,简单用一下它的代码生成器,接下来通过实例代码讲解关于mybatis-plus-generator的简单使用,感兴趣的朋友跟随小编一起看看吧

在springboot项目中集成mybatis-plus是很方便开发的,最近看了一下plus的文档,简单用一下它的代码生成器,首先在一个简单的springboot项目中加入如下依赖

<!-- 引入mybatis-plus依赖 -->
<dependency>
	<groupId>com.baomidou</groupId>
	<artifactId>mybatis-plus-boot-starter</artifactId>
	<version>3.1.2</version>
</dependency>
<!-- 引入mybatis-plus-generator依赖 -->
<dependency>
	<groupId>com.baomidou</groupId>
	<artifactId>mybatis-plus-generator</artifactId>
	<version>3.3.2</version>
</dependency>
<!-- 引入freemarker依赖 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<!-- 引入mysql依赖 -->
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>5.1.45</version>
	<scope>runtime</scope>
</dependency>
<!--lombok-->
<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<optional>true</optional>
</dependency>

我这边呢习惯把mapper文件放在java源码路径下,而不是放在默认的resources目录下,项目启动有导致mapper注入不了,所以还得在pom的<build></build>标签之中加入如下配置,并在启动类上加上mapper扫描路径

<resources>
	<resource>
		<directory>src/main/java</directory>
		<includes>
			<include>**/*.xml</include>
		</includes>
		<filtering>false</filtering>
	</resource>
	<resource>
		<directory>src/main/resources</directory>
		<includes>
			<include>**/*.properties</include>
			<include>**/*.xml</include>
			<include>**/*.ftl</include>
		</includes>
		<filtering>false</filtering>
	</resource>
</resources>
@SpringBootApplication
@MapperScan(basePackages = {"com.fengyun.mallmanage"})
public class MallManageSystemApplication {
	public static void main(String[] args) {
		SpringApplication.run(MallManageSystemApplication.class, args);
	}
}

基本依赖和配置结束了,我参考了plus的官方文档,根据自己的需求稍微修改了一下它的生成器代码,官网地址

代码生成器 | MyBatis-Plus

/**
 * mybatis-plus代码生成器,生成实体,mapper,mapper.xml,service,serviceImpl,controller
 * 演示例子,执行 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.isNotEmpty(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("YuanXing");
        //是否打开输出的目录,默认true
        gc.setOpen(false);
        //覆盖已有的文件,默认false(第一次生成时放开)
//        gc.setFileOverride(true);
        gc.setBaseResultMap(true);
        gc.setBaseColumnList(true);
        // 设置日期类型为Date(若不设置时间类型都会变成LocalDateTime部分连接池例如druid是无法识别的)
        gc.setDateType(DateType.ONLY_DATE);
        mpg.setGlobalConfig(gc);
        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/malldata-dev?useUnicode=true&characterEncoding=UTF-8&useSSL=false");
        dsc.setDriverName("com.mysql.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("密码");
        mpg.setDataSource(dsc);
        // 包配置
        PackageConfig pc = new PackageConfig();
//        pc.setModuleName(scanner("模块名"));
        pc.setParent("com.fengyun.mallmanage");
        //自定义实体包名(不同的模块自己手动修改)
        pc.setEntity("mapper.goods.entity");
        //自定义mapper包名(不同的模块自己手动修改)
        pc.setMapper("mapper.goods");
        //自定义mapper.xml包名(不同的模块自己手动修改)
        pc.setXml("mapper.goods");
        //自定义service包名(不同的模块自己手动修改)
        pc.setService("service.goods");
        //自定义serviceImpl包名(不同的模块自己手动修改)
        pc.setServiceImpl("service.goods.impl");
        //自定义controller包名(不同的模块自己手动修改)
        pc.setController("controller.goods");
        mpg.setPackageInfo(pc);
        // 自定义配置
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                // to do nothing
            }
        };
        // 如果模板引擎是 freemarker
        String xmlPath = "/templates/mapper.xml.ftl";
        // 自定义输出配置
        List<FileOutConfig> focList = new ArrayList<>();
        // 自定义配置会被优先输出
        focList.add(new FileOutConfig(xmlPath) {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
                return projectPath + "/src/main/java/com/fengyun/mallmanage/mapper/goods"
                        + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
            }
        });
        cfg.setFileOutConfigList(focList);
        mpg.setCfg(cfg);
        cfg.setFileOutConfigList(focList);
        mpg.setCfg(cfg);
        // 配置模板
        TemplateConfig templateConfig = new TemplateConfig();
        templateConfig.setXml(null);
        mpg.setTemplate(templateConfig);
        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        //是否为lombok模型,默认为false
        strategy.setEntityLombokModel(true);
        //前后端分离时可开启
//        strategy.setRestControllerStyle(true);
        strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
        //RequestMapping驼峰转连字符
//        strategy.setControllerMappingHyphenStyle(true);
        //生成实体时生成生成数据库字段注解
        strategy.setEntityTableFieldAnnotationEnable(true);
        mpg.setStrategy(strategy);
        mpg.setTemplateEngine(new FreemarkerTemplateEngine());
        mpg.execute();
    }
}

然后运行即可

需要注意的是由于我在代码生成器代码中包配置的时候注释掉了输入模块名(即这一段pc.setModuleName(scanner("模块名"));),所以会导致controller中的RequestMapping的路径有两个//表名的驼峰命名,假设输入模块名的话RequestMapping的路径就会是/模块名/表名的驼峰命名,但是这样的话生成的类的包就不是我现在这样的了,这个看自己的需求吧,具体可以看一下生成包的源码

更多Java内容,请点击下方名片。

到此这篇关于关于mybatis-plus-generator的简单使用的文章就介绍到这了,更多相关mybatis-plus-generator使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅谈Java8 判空新写法

    浅谈Java8 判空新写法

    在开发过程中很多时候会遇到判空校验,如果不做判空校验则会产生NullPointerException异常,本文就来介绍一下Java8 判空新写法,感兴趣的可以了解一下
    2021-09-09
  • 浅谈Java内存区域划分和内存分配策略

    浅谈Java内存区域划分和内存分配策略

    这篇文章主要介绍了浅谈Java内存区域划分和内存分配策略,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • 隐藏idea的.idea和.mvn文件的解决方案

    隐藏idea的.idea和.mvn文件的解决方案

    这篇文章主要介绍了隐藏idea的.idea和.mvn文件的解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • Java报错:Error:java: 程序包org.springframework.boot不存在解决办法

    Java报错:Error:java: 程序包org.springframework.boot不存在解决办法

    建完springboot项目时,点击启动,有可能会报错,下面这篇文章主要给大家介绍了关于Java报错:Error:java: 程序包org.springframework.boot不存在的解决办法,需要的朋友可以参考下
    2024-02-02
  • Apache Shrio安全框架实现原理及实例详解

    Apache Shrio安全框架实现原理及实例详解

    这篇文章主要介绍了Apache Shrio安全框架实现原理及实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • java实现文件和base64相互转换

    java实现文件和base64相互转换

    这篇文章主要为大家详细介绍了java如何实现文件和base64相互转换,文中的示例代码讲解详细,具有一定的参考价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • Springboot实现前后端分离excel下载

    Springboot实现前后端分离excel下载

    这篇文章主要介绍了Springboot实现前后端分离excel下载,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Java代码性能测试实战之ContiPerf安装使用

    Java代码性能测试实战之ContiPerf安装使用

    这篇文章主要为大家介绍了Java代码性能测试实战之ContiPerf安装使用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • SpringMVC学习之JSON和全局异常处理详解

    SpringMVC学习之JSON和全局异常处理详解

    在项目上线之后,往往会出现一些不可预料的异常信息,对于逻辑性或设计性问题,开发人员或者维护人员需要通过日志,查看异常信息并排除异常,这篇文章主要给大家介绍了关于SpringMVC学习之JSON和全局异常处理的相关资料,需要的朋友可以参考下
    2022-10-10
  • 关于RestTemplate中的Get请求

    关于RestTemplate中的Get请求

    这篇文章主要介绍了关于RestTemplate中的Get请求,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07

最新评论