1. 程式人生 > >MyBatis Generator——Maven模式生成程式碼

MyBatis Generator——Maven模式生成程式碼

使用Maven執行MyBatis Generator

  MyBatis Generator (MBG)包含一個Maven外掛,用於整合到Maven構建中。用於將其整合到Maven構建中。按照約定策略與Maven的配置保持一致,在Maven構建中包含MBG是非常簡單的。最小配置如下所示:

<project ...>
     ...
     <build>
       ...
       <plugins>
        ...
        <plugin>
          <groupId>org.mybatis.generator</groupId>
          <artifactId>mybatis-generator-maven-plugin</artifactId>
          <version>1.3
.5</version> </plugin> ... </plugins> ... </build> ... </project>

Maven目標和執行

MBG Maven外掛包含一個目標:

mybatis-generator:generate

  這個目標不是由Maven自動執行的。它可以以兩種方式執行。

  可以從命令列執行該命令:

mvn mybatis-generator:generate

  您可以使用標準Maven命令列屬性將引數傳遞給目標。例如:

mvn -Dmybatis.generator.overwrite=true mybatis-generator:generate

  這將執行MBG,並指示它覆蓋它可能找到的任何現有的Java檔案。

  在持續構建環境中,您可能想要自動地執行Maven構建的MBG。這可以通過配置目標自動執行來實現。下面的例子如下:

<project ...>
     ...
     <build>
       ...
       <plugins>
        ...
        <plugin>
          <groupId>org.mybatis.generator</groupId>
          <artifactId>mybatis-generator-maven-plugin</artifactId>
          <version>1.3
.5</version> <executions> <execution> <id>Generate MyBatis Artifacts</id> <goals> <goal>generate</goal> </goals> </execution> </executions> </plugin> ... </plugins> ... </build> ... </project>

mybatis-generator的使用舉例

建立建立相應的SQL

/*
SQLyog 企業版 - MySQL GUI v8.14
MySQL - 5.7.12-log : Database - test1
*********************************************************************
*/

/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @[email protected]@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`test1` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin */;

USE `test1`;

/*Table structure for table `sys_acl` */

DROP TABLE IF EXISTS `sys_acl`;

CREATE TABLE `sys_acl` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '許可權id',
  `code` varchar(20) COLLATE utf8_bin NOT NULL COMMENT '許可權碼',
  `name` varchar(20) COLLATE utf8_bin NOT NULL COMMENT '許可權名稱',
  `acl_module_id` int(11) NOT NULL COMMENT '許可權所在的許可權模組id',
  `url` varchar(100) COLLATE utf8_bin NOT NULL COMMENT '請求的url,可以填正則表示式',
  `type` int(11) NOT NULL DEFAULT '0' COMMENT '型別:1、選單;2、按鈕;3、其它',
  `status` int(11) NOT NULL COMMENT '狀態:1、正常;0、凍結',
  `seq` int(11) DEFAULT NULL COMMENT '許可權在當前模組下的順序,由小到大',
  `remark` varchar(200) COLLATE utf8_bin DEFAULT NULL COMMENT '備註',
  `operator` varchar(20) COLLATE utf8_bin NOT NULL COMMENT '操作者',
  `operate_time` datetime NOT NULL COMMENT '最後一次更新時間',
  `operate_ip` varchar(20) COLLATE utf8_bin NOT NULL COMMENT '最後一次更新ip',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

/*Data for the table `sys_acl` */

/*Table structure for table `sys_dept` */

DROP TABLE IF EXISTS `sys_dept`;

CREATE TABLE `sys_dept` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '部門id',
  `name` varchar(20) COLLATE utf8_bin NOT NULL COMMENT '部門名稱',
  `parent_id` int(11) NOT NULL DEFAULT '0' COMMENT '上級id',
  `level` varchar(200) COLLATE utf8_bin NOT NULL COMMENT '部門層級',
  `seq` int(11) NOT NULL DEFAULT '0' COMMENT '部門在當前層級下的順序,預設由小到大',
  `remark` varchar(200) COLLATE utf8_bin DEFAULT NULL COMMENT '備註',
  `oprator` varchar(20) COLLATE utf8_bin NOT NULL COMMENT '操作者',
  `operate_time` datetime NOT NULL COMMENT '最後一次操作時間',
  `operate_ip` varchar(20) COLLATE utf8_bin NOT NULL COMMENT '最後一次更新操作者的ip地址',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

/*Data for the table `sys_dept` */

insert  into `sys_dept`(`id`,`name`,`parent_id`,`level`,`seq`,`remark`,`oprator`,`operate_time`,`operate_ip`) values (1,'技術部',0,'0',1,'技術部','system','2017-11-29 09:40:38','127.0.0.1'),(2,'後端開發',1,'0.1',1,'後端','system-update','2017-12-07 11:49:24','127.0.0.1'),(3,'前端開發',1,'0.1',2,'','system-update','2017-12-29 17:13:04','127.0.0.1'),(4,'UI設計',1,'0.1',3,'','system','2017-12-07 10:51:01','127.0.0.1');

/*Table structure for table `sys_user` */

DROP TABLE IF EXISTS `sys_user`;

CREATE TABLE `sys_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '使用者id',
  `username` varchar(20) COLLATE utf8_bin NOT NULL COMMENT '使用者名稱',
  `telephone` varchar(13) COLLATE utf8_bin NOT NULL COMMENT '手機號',
  `mail` varchar(50) COLLATE utf8_bin NOT NULL COMMENT '郵箱',
  `password` varchar(40) COLLATE utf8_bin NOT NULL COMMENT '加密後的密碼',
  `dept_id` int(11) NOT NULL COMMENT '使用者所在部門的id',
  `status` int(1) NOT NULL COMMENT '狀態:1:正常;0、凍結狀態;2、刪除',
  `remark` varchar(200) COLLATE utf8_bin DEFAULT NULL COMMENT '備註',
  `operator` varchar(20) COLLATE utf8_bin NOT NULL COMMENT '操作者',
  `operate_time` datetime NOT NULL COMMENT '最後一次操作時間',
  `operate_ip` varchar(20) COLLATE utf8_bin NOT NULL COMMENT '最後一次更新ip',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

/*Data for the table `sys_user` */

insert  into `sys_user`(`id`,`username`,`telephone`,`mail`,`password`,`dept_id`,`status`,`remark`,`operator`,`operate_time`,`operate_ip`) values (1,'Admin','18612344321','[email protected]','E10ADC3949BA59ABBE56E057F20F883E',1,1,'admin','system','2017-12-29 15:25:17','127.0.0.1'),(2,'jimin','13188889999','[email protected]','E10ADC3949BA59ABBE56E057F20F883E',1,1,'jimin,zheng','Admin','2017-12-30 11:59:10','127.0.0.1'),(4,'zhangzhenyi','15028855973','[email protected]','E10ADC3949BA59ABBE56E057F20F883E',1,1,'','Admin','2018-01-08 15:12:21','0:0:0:0:0:0:0:1');

/*!40101 SET [email protected]_SQL_MODE */;
/*!40014 SET [email protected]_FOREIGN_KEY_CHECKS */;
/*!40014 SET [email protected]_UNIQUE_CHECKS */;
/*!40111 SET [email protected]_SQL_NOTES */;

新增pom外掛及依賴

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>mybatis-generator-parent</artifactId>
        <groupId>com.lyc</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>mybatis-generator-maven</artifactId>
    <packaging>jar</packaging>

    <name>mybatis-generator-maven</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
                <version>3.5</version>
            </plugin>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.5</version>
                <executions>
                    <execution>
                        <id>Generate MyBatis Artifacts</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
                <dependencies>
                    <!-- mysql -->
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.30</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <!--配置檔案的路徑-->
                    <configurationFile>${basedir}/src/main/resources/generatorConfig.xml</configurationFile>
                    <overwrite>true</overwrite>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

建立generatorConfig.xml配置檔案

  該配置檔案和之前寫的MyBatis Generator——命令列生成程式碼是類似的,詳細可以檢視前面的文章,在此我就不再一一複述。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <context id="test" targetRuntime="MyBatis3">
        <plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin"></plugin>
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin"></plugin>
        <commentGenerator>
            <!-- 這個元素用來去除指定生成的註釋中是否包含生成的日期 false:表示保護 -->
            <!-- 如果生成日期,會造成即使修改一個欄位,整個實體類所有屬性都會發生變化,不利於版本控制,所以設定為true -->
            <property name="suppressDate" value="true" />
            <!-- 是否去除自動生成的註釋 true:是 : false:否 -->
            <property name="suppressAllComments" value="false" />
        </commentGenerator>
        <!--資料庫連結URL,使用者名稱、密碼 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost/test1" userId="root" password="zhangzhenyi">
        </jdbcConnection>
        <javaTypeResolver>
            <!-- This property is used to specify whether MyBatis Generator should
                force the use of java.math.BigDecimal for DECIMAL and NUMERIC fields, -->
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>
        <!-- 生成模型的包名和位置 -->
        <javaModelGenerator targetPackage="com.lyc.model" targetProject="target">
            <property name="enableSubPackages" value="true" />
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!-- 生成對映檔案的包名和位置 -->
        <sqlMapGenerator targetPackage="com.lyc.mapper" targetProject="target">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>
        <!-- 生成DAO的包名和位置 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.lyc.dao" targetProject="target">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>

        <!-- 要生成哪些表 -->
        <table tableName="sys_user" domainObjectName="SysUser" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />
        <table tableName="sys_dept" domainObjectName="SysDept" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />
        <table tableName="sys_acl" domainObjectName="SysAcl" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />
    </context>
</generatorConfiguration>

在命令列中執行

mvn compile
mvn mybatis-generator:generate

在IDEA的Maven Projects面板中執行

這裡寫圖片描述

執行結果

這裡寫圖片描述

注意事項

  當我們發現控制檯中展示出下列資訊時:

The specified target project directory target does not exist

  這就說明target目錄沒有建立,所以說需要我們先建立相應的目錄,我們可以通過優先執行maven的構建命令加以解決:

mvn compile