1. 程式人生 > >springboot專案Mybatis-Plus自動生產程式碼

springboot專案Mybatis-Plus自動生產程式碼

1.pom.xml配置檔案

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.liuchao</groupId>
	<artifactId>plus</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>plus</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.4.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<!--========================================【核心-start】mybatis-plus==================================-->
		<!-- mybatisplus與springboot整合 -->
		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatisplus-spring-boot-starter</artifactId>
			<version>1.0.5</version>
		</dependency>
		<!-- MP 核心庫 -->
		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-boot-starter</artifactId>
			<version>3.0.3</version>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.3.2</version>
		</dependency>
		<!-- 模板引擎 程式碼生成 -->
		<dependency>
			<groupId>org.apache.velocity</groupId>
			<artifactId>velocity</artifactId>
			<version>1.7</version>
		</dependency>
		<!--=========================================【核心-end】mybatis-plus==================================-->
		<!--mysql連線-->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>
		<!-- alibaba的druid資料庫連線池 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid-spring-boot-starter</artifactId>
			<version>1.1.9</version>
		</dependency>
		<!--熱部署-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<optional>true</optional>
		</dependency>

		<!-- tomcat外掛 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.tomcat.embed</groupId>
			<artifactId>tomcat-embed-jasper</artifactId>
			<!-- <scope>provided</scope>-->
		</dependency>
		<!--AOP-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-aop</artifactId>
		</dependency>
		<!--lombok-->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.16.10</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<!--==========================================================================================-->
		<!--公共工具類-->
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>3.4</version>
		</dependency>
		<!-- log4j-->
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>
		<!--json-->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-core</artifactId>
			<version>2.9.6</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.9.6</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.datatype</groupId>
			<artifactId>jackson-datatype-joda</artifactId>
			<version>2.8.2</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.module</groupId>
			<artifactId>jackson-module-parameter-names</artifactId>
			<version>2.9.6</version>
		</dependency>
		<!-- 分頁外掛 -->
		<dependency>
			<groupId>com.github.pagehelper</groupId>
			<artifactId>pagehelper-spring-boot-starter</artifactId>
			<version>1.2.5</version>
		</dependency>

		<!-- servlet 依賴包 -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<scope>provided</scope>
		</dependency>
		<!-- JSTL 的JSP 標準標籤庫 -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
		</dependency>
		<!-- shiro 核心 ==============================================================-->
		<dependency>
			<groupId>org.apache.shiro</groupId>
			<artifactId>shiro-core</artifactId>
			<version>1.3.2</version>
		</dependency>
		<!-- shiro許可權控制框架 -->
		<dependency>
			<groupId>org.apache.shiro</groupId>
			<artifactId>shiro-spring</artifactId>
			<version>1.3.2</version>
		</dependency>
		<!-- shiro快取 -->
		<dependency>
			<groupId>org.apache.shiro</groupId>
			<artifactId>shiro-ehcache</artifactId>
			<version>1.3.2</version>
		</dependency>
	</dependencies>


	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>

			<!--==============================以前的mybatis生產程式碼的老外掛可以扔掉了============================-->
			<!--<plugin>
				<groupId>org.mybatis.generator</groupId>
				<artifactId>mybatis-generator-maven-plugin</artifactId>
				<version>1.3.2</version>
				<configuration>
					<configurationFile>src/main/resources/generator/generatorConfig.xml</configurationFile>
					<verbose>true</verbose>
					<overwrite>true</overwrite>
				</configuration>
				<executions>
					<execution>
						<id>Generate MyBatis Artifacts</id>
						<goals>
							<goal>generate</goal>
						</goals>
					</execution>
				</executions>
				<dependencies>
					<dependency>
						<groupId>org.mybatis.generator</groupId>
						<artifactId>mybatis-generator-core</artifactId>
						<version>1.3.2</version>
					</dependency>
				</dependencies>
			</plugin>-->
		</plugins>
	</build>


</project>

2.設定springboot的配置檔案application.yml(新增該段程式碼)

#設定xml檔案生成的路徑
mybatis-plus:
    mapper-locations: classpath:/mapper/*.xml
    type-aliases-package: com.liuchao.model
    configuration.cache-enabled: false
    global-config.db-config.db-type: mysql
    configuration.jdbc-type-for-null: null

3.使用生成程式碼工具類生成程式碼

package com.liuchao;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.apache.commons.lang.StringUtils;

import java.util.Scanner;

/**
 * @Program: mybatisplus
 * @Description:
 * @Author: liuchao
 * @Create: 2018-11-12 14:29
 * @Version 1.0
 **/
public class CodeGeneration {

    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("liuchao");//開發人員
                 gc.setOpen(true);//是否開啟輸出目錄
                 gc.setServiceName("%sService");//service 命名方式
                 gc.setServiceImplName("%sServiceImpl");//service impl 命名方式
                 // 自定義檔案命名,注意 %s 會自動填充表實體屬性!
                 gc.setMapperName("%sMapper");
                 gc.setXmlName("%sMapper");
                 gc.setFileOverride(true);
                 gc.setActiveRecord(true);
                 gc.setEnableCache(false);// XML 二級快取
                 gc.setBaseResultMap(true);// XML ResultMap
                 gc.setBaseColumnList(false);// XML columList
                 mpg.setGlobalConfig(gc);

                 // 資料來源配置
                 DataSourceConfig dsc = new DataSourceConfig();
                  dsc.setDriverName("com.mysql.jdbc.Driver");
                  dsc.setUsername("liuchao");
                  dsc.setPassword("123");
                  dsc.setUrl("jdbc:mysql://127.0.0.1:3306/test2?useSSL=false");
                 /*dsc.setUrl("jdbc:mysql://127.0.0.1:3306/xxxxx?useUnicode=true&useSSL=false&characterEncoding=utf8");
                 // dsc.setSchemaName("public"); 資料庫 schema name
                 dsc.setDriverName("com.mysql.jdbc.Driver");
                 dsc.setUsername("root");
                 dsc.setPassword("******");*/
                 mpg.setDataSource(dsc);

                 // 包配置
                 PackageConfig pc = new PackageConfig();
                 //pc.setModuleName(scanner("模組名"));//父包模組名
                 pc.setParent("com.liuchao");//父包名。// 自定義包路徑  如果為空,將下面子包名必須寫全部, 否則就只需寫子包名
                  pc.setController("controller");
                  pc.setService("service");
                  pc.setServiceImpl("service.impl");
                  pc.setXml("xml");
                 mpg.setPackageInfo(pc);

                 // 自定義配置
         /*        InjectionConfig cfg = new InjectionConfig() {
 77             @Override
 78             public void initMap() {
 79                 // to do nothing
 80             }
 81         };
 82         List<FileOutConfig> focList = new ArrayList<>();
 83         focList.add(new FileOutConfig("/templates/mapper.xml.ftl") {
 84             @Override
 85             public String outputFile(TableInfo tableInfo) {
 86                 // 自定義輸入檔名稱
 87                 return projectPath + "/src/main/resources/mapper/" + pc.getModuleName()
 88                         + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
 89             }
 90         });*/
          /*       cfg.setFileOutConfigList(focList);
 92         mpg.setCfg(cfg);*/
                 mpg.setTemplate(new TemplateConfig());

                 // 策略配置
                 StrategyConfig strategy = new StrategyConfig();
                 strategy.setNaming(NamingStrategy.underline_to_camel);//資料庫表對映到實體的命名策略
                 strategy.setColumnNaming(NamingStrategy.underline_to_camel);//資料庫表字段對映到實體的命名策略, 未指定按照 naming 執行
               //  strategy.setSuperEntityClass("com.baomidou.ant.common.BaseEntity");//自定義繼承的Entity類全稱,帶包名
                 strategy.setEntityLombokModel(true);//【實體】是否為lombok模型(預設 false)
                 //strategy.setRestControllerStyle(true);//生成 @RestController 控制器

                 //strategy.setSuperControllerClass("com.baomidou.ant.common.BaseController");//自定義繼承的Controller類全稱,帶包名
                 strategy.setInclude("user","module","module_role","img_urls","movie_detail","movie_main","movie_type","role","user_role");//需要包含的表名,允許正則表示式
                 //strategy.setSuperEntityColumns("id");//自定義基礎的Entity類,公共欄位
                 strategy.setControllerMappingHyphenStyle(true);//駝峰轉連字元
                 //strategy.setTablePrefix("tb_");//表字首
                 mpg.setStrategy(strategy);
                 //mpg.setTemplateEngine(new FreemarkerTemplateEngine());
                 mpg.execute();
             }

}

4.生成之後的目錄結構