【Maven插件】CRUD非业务代码一键生成插件

249 阅读3分钟

primo-generator

项目地址:
github.com/chenhaoxian…

primo-generator-mybatis-plus-maven-plugin

自动生成代码插件,通过Maven插件配置,一键生成单表的所有CRUD操作,加速你的业务开发

持久层基于Mybatis-Plus

主要功能

  • 单表增删改查
  • 单表的条件查询,分页查询
  • 基于druid,数据库监控
  • 统一查询条件模型
  • 统一controller层模型

使用说明 一步到位

注意,必须要修改的点:

  • 其中的父类包名修改为自己需要的包名
  • 数据源的配置,连接、账号、密码

其他的一些配置项,按照自己的需要进行配置。

插件依赖

<plugin>
    <groupId>wiki.primo.generator</groupId>
    <artifactId>primo-generator-mybatis-plus-maven-plugin</artifactId>
    <version>1.0.0</version> 
    <configuration>
        <!-- 输出目录(默认java.io.tmpdir) ,项目路径下-->
        <outputDir>src/main/java/</outputDir>
        <!-- 是否覆盖同名文件(默认false) -->
        <fileOverride>true</fileOverride>
        <!-- mapper.xml 中添加二级缓存配置(默认true) -->
        <enableCache>true</enableCache>
        <!-- 开发者名称 -->
        <author>chenhx</author>
        <!-- 是否开启 ActiveRecord 模式(默认true) -->
        <activeRecord>false</activeRecord>
<!--query.open 此配置数据在0.0.5版本已经进行删除-->
        <query>
            <!-- 是否开启 条件分页查询以及相关类生成 -->
            <open>true</open>
        </query>
        <!-- 数据源配置,( **必配** ) -->
        <dataSource>
            <driverName>com.mysql.jdbc.Driver</driverName>
            <url>jdbc:mysql://127.0.0.1:3306/love?useUnicode=true&amp;characterEncoding=UTF-8&amp;zeroDateTimeBehavior=convertToNull&amp;serverTimezone=GMT%2B8</url>
            <username>root</username>
            <password>12345678</password>
        </dataSource>
        <strategy>
            <!-- 字段生成策略,四种类型,从名称就能看出来含义:
                nochange(默认),
                underline_to_camel,(下划线转驼峰)
                remove_prefix,(去除前缀,后面保持不变) 
                remove_prefix_and_camel(去除前缀,后面转驼峰)  -->
            <naming>underline_to_camel</naming>
            <!-- 表前缀 -->
            <tablePrefix> </tablePrefix>
            <!--Entity中的ID生成策略(默认 id_worker)AUTO - 自动-->
            <idGenType>auto</idGenType>
            <!--自定义超类-->
            <!--<superServiceClass>com.baomidou.base.BaseService</superServiceClass>-->
            <!-- include(包含) 与exclude(排除) 二选一配置
                 可以都不进行配置,则默认生成数据库下全部的表 -->
            <include>
                <property>user</property>
<!--            <property>table1</property>-->
            </include>
            <!-- 要排除的表 -->
            <!--<exclude>-->
            <!--<property>schema_version</property>-->
            <!--</exclude>-->
        </strategy>
        <packageInfo>
            <!-- 父级包名称,如果不写,下面的service等就需要写全包名(默认com.baomidou) -->
            <parent>wiki.primo.generator.mybatis.plus.springbootdemo</parent>
            <!--service包名(默认service)-->
            <service>service</service>
            <!--serviceImpl包名(默认service.impl)-->
            <serviceImpl>service.impl</serviceImpl>
            <!--entity包名(默认entity)-->
            <entity>entity</entity>
            <!--mapper包名(默认mapper)-->
            <mapper>mapper</mapper>
            <!--xml包名(默认mapper.xml)-->
            <xml>mapper.xml</xml>
            <query>query</query>
        </packageInfo>
<!--模板路径配置项-->
        <template>
            <!-- 定义controller模板的路径 -->
            <!--<controller>/template/controller1.java.vm</controller>-->
        </template>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version>
        </dependency>
    </dependencies>
</plugin>

其他运行项目必备的配置

当添加插件依赖后,已经可以运行项目生成的代码了。

但是运行项目,会报错,那么进行下面几步后,可以解决。

一 添加依赖

必备的jar包依赖,版本请自行控制

<!--Spring Boot web依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--mybatis-plus依赖-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.2.0</version>
</dependency>
<!--druid依赖-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.14</version>
</dependency>
<!--MySQL JDBC驱动-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

二 扫描Mapper

在@SpringBootApplication注解的启动类上加入

//第二步:扫描mapper
@MapperScan("你mapper接口所在的包名")

三 mybati plus配置

##mybatis-plus mapper xml 文件地址
mybatis-plus.mapper-locations=classpath*:mapper/*Mapper.xml
##mybatis-plus type-aliases 文件地址
mybatis-plus.type-aliases-package=entity实体类的包名(例:wiki.primo.generator.mybatis.plus.springbootdemo.entity)
# 驼峰下划线转换
mybatis-plus.configuration.map-underscore-to-camel-case=true
# 配置的缓存的全局开关
mybatis-plus.configuration.cache-enabled=true
# 延时加载的开关
mybatis-plus.configuration.lazy-loading-enabled=true

四 其他

数据源配置、druid监控配置以及其他的配置,请查看演示项目下的application.properties文件

后续若有其他功能,会及时更新演示项目的配置

使用演示

primo-generator-maven-plugin-spring-boot-demo

springboot项目使用primo-generator-maven-plugin演示

可以看到,这个项目下目前是没有类的
在这里插入图片描述

在项目的pom文件中开始进行添加插件的依赖(如果是子模块,在子模块的pom中添加)

在这里插入图片描述

我在这里只配置了一个表user进行生成

<!-- include(包含) 与exclude(排除) 二选一配置
     可以都不进行配置,则默认生成数据库下全部的表 -->
<include>
    <property>user</property>
</include>

当配置项都配置好之后,就可以运行了。

有两种方式运行:
(1)IDEA可以直接在Maven视图中双击运行

在这里插入图片描述

(2)也可以通过命令行执行:

mvn -DskipTests=true wiki.primo.generator:primo-generator-mybatis-plus-maven-plugin:code

执行完成后,可以看到如下的代码生成

在这里插入图片描述

若生成后,有报错,请查看必备的配置,看看依赖和mapper扫描是否添加。

版本更新说明

请使用最新版本,从1.0.0开始上传到中央仓库

1.0.0

  • 删除query.open开关的配置,强制开启条件分页查询以及相关类生成
  • 将一些配置的数据进行通用的一个抽取,方便后期进行扩展类
  • druid管理HTML页面上的“Reset All”功能开启

0.0.4

  • service层与controller层的page接口,页数与数量参数分离
  • QueryBo类分离查询条件属性,避免与数据库表列名一致导致异常
  • service层增加通过QueryWrapper查询的分页接口
  • service层增加单一数据的返回查询接口
  • 实体类生成toString方法
  • service层增加修改接口
  • 分页500的限制放开
  • service层增加根据一列的条件修改实体接口
  • service层增加list查询接口

0.0.3

  • 增加controller层的增删改查操作
  • 增加ResultModel的自动生成
  • 增加ResultCodeEnum的自动生成
  • 增加MybatisPlusConfig的自动生成
  • 支持配置的表生成,或者排除表生成代码

0.0.2

  • 生成Query类,根据查询条件分页查询。支持配置是否生成分页查询方法
<query>
<!-- 是否开启 条件分页查询以及相关类生成 -->
    <open>true</open>
</query>

0.0.1

  • 仅支持单库全表生成
  • 支持设置entityColumnConstant,控制是否启用属性常量,默认开启
  • 自动给列名加上``关键字转义符
  • 跳过已经存在的文件,fileOverride
  • 支持单表/全库表生成配置,include

其他

有什么问题,或者有什么其他的功能需求,欢迎提出