原本這一章要介紹Redis+AOP優化權限,但是發現仍是須要先介紹一些MyBatis Plus自動生成代碼java
MyBatis-Plus (opens new window)(簡稱 MP)是一個 MyBatis (opens new window)的加強工具,在 MyBatis 的基礎上只作加強不作改變,爲簡化開發、提升效率而生。mysql
任何能使用 mybatis 進行 crud, 而且支持標準 sql 的數據庫算法
AutoGenerator 是 MyBatis-Plus 的代碼生成器,經過 AutoGenerator 能夠快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各個模塊的代碼,極大的提高了開發效率。spring
<!--lombok依賴--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <!--集成druid鏈接池--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency> <!--Mysql數據庫驅動--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.10</version> </dependency> <!--MyBatis Plus 依賴--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.3.2</version> </dependency> <!--MyBatis Plus 代碼生成器--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.3.2</version> </dependency> <!--Hutool Java工具包--> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>4.5.7</version> </dependency> <!--Velocity模板引擎--> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.2</version> </dependency> <!--Swagger-UI API文檔生產工具--> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.7.0</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.7.0</version> </dependency>
MyBatis-Plus 支持 Velocity(默認)、Freemarker、Beetl,用戶能夠選擇本身熟悉的模板引擎,若是都不知足您的要求,能夠採用自定義模板引擎。本文使用默認依賴sql
<dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.2</version> </dependency>
MyBatis-Plus 的代碼生成器提供了大量的自定義參數供用戶選擇,可以知足絕大部分人的使用需求。數據庫
全局策略 globalConfig 配置apache
outputDir緩存
以下配置 %s 爲佔位符springboot
entityNamemybatis
/** * 全局配置 * @param projectPath * @return */ public static GlobalConfig initGlobal(String projectPath){ GlobalConfig gc = new GlobalConfig(); gc.setOutputDir(projectPath + "/src/main/java"); gc.setAuthor("zbb"); gc.setOpen(false); gc.setSwagger2(true); gc.setBaseResultMap(true); gc.setFileOverride(true); gc.setDateType(DateType.ONLY_DATE); gc.setEntityName("%s"); gc.setMapperName("%sMapper"); gc.setXmlName("%sMapper"); gc.setServiceName("%sService"); gc.setServiceImplName("%sServiceImpl"); gc.setControllerName("%sController"); return gc; }
dbQuery
/** * * 配置 DataSourceConfig * @return */ public static DataSourceConfig initDataSource(){ Props props = new Props("application.properties"); DataSourceConfig dataSourceConfig = new DataSourceConfig(); dataSourceConfig.setUrl(props.getStr("dataSource.url")); dataSourceConfig.setDriverName(props.getStr("dataSource.driverName")); dataSourceConfig.setUsername(props.getStr("dataSource.username")); dataSourceConfig.setPassword(props.getStr("dataSource.password")); return dataSourceConfig; }
parent
/** * 包配置 * @param packname * @return */ public static PackageConfig initPackage(String packname){ Props props = new Props("application.properties"); PackageConfig packageConfig = new PackageConfig(); packageConfig.setModuleName(packname); packageConfig.setParent(props.getStr("package.base")); packageConfig.setEntity("model"); return packageConfig; }
entity
/** * 模板配置 * @return */ public static TemplateConfig initTemplate() { TemplateConfig templateConfig = new TemplateConfig(); //能夠對controller、service、entity模板進行配置 templateConfig.setXml(null); return templateConfig; }
map
該配置用於判斷某個類是否須要覆蓋建立,固然你能夠本身實現差別算法 merge 文件
initMap
/** * 自定義屬性注入 */ public static InjectionConfig initInjection(String projectPath, String moduleName) { // 自定義配置 InjectionConfig injectionConfig = new InjectionConfig() { @Override public void initMap() { // 可用於自定義屬性 } }; // 模板引擎是Velocity String templatePath = "/templates/mapper.xml.vm"; // 自定義輸出配置 List<FileOutConfig> focList = new ArrayList<>(); // 自定義配置會被優先輸出 focList.add(new FileOutConfig(templatePath) { @Override public String outputFile(TableInfo tableInfo) { // 自定義輸出文件名 , 若是你 Entity 設置了先後綴、此處注意 xml 的名稱會跟着發生變化!! return projectPath + "/src/main/resources/mapper/" + moduleName + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML; } }); injectionConfig.setFileOutConfigList(focList); return injectionConfig; }
/** * 策略配置 */ public static StrategyConfig initStrategy(String[] tableNames) { StrategyConfig strategyConfig = new StrategyConfig(); strategyConfig.setNaming(NamingStrategy.underline_to_camel); strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel); strategyConfig.setEntityLombokModel(true); strategyConfig.setRestControllerStyle(true); //當表名中帶*號時能夠啓用通配符模式 if (tableNames.length == 1 && tableNames[0].contains("*")) { String[] likeStr = tableNames[0].split("_"); String likePrefix = likeStr[0] + "_"; strategyConfig.setLikeTable(new LikeTable(likePrefix)); } else { strategyConfig.setInclude(tableNames); } return strategyConfig; }
public static void main(String[] args) { String projectPath = System.getProperty("user.dir"); String moduleName = scanner("模塊名"); String[] tableNames = scanner("表名,多個英文逗號分割").split(","); // 代碼生成器 AutoGenerator autoGenerator = new AutoGenerator(); autoGenerator.setGlobalConfig(initGlobal(projectPath)); autoGenerator.setDataSource(initDataSource()); autoGenerator.setPackageInfo(initPackage(moduleName)); autoGenerator.setCfg(initInjection(projectPath, moduleName)); autoGenerator.setTemplate(initTemplate()); autoGenerator.setStrategy(initStrategy(tableNames)); autoGenerator.setTemplateEngine(new VelocityTemplateEngine()); autoGenerator.execute(); }
/** * <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 (StrUtil.isNotEmpty(ipt)) { return ipt; } } throw new MybatisPlusException("請輸入正確的" + tip + "!"); }
dataSource.url=jdbc:mysql://db:3306/mymes?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai dataSource.driverName=com.mysql.jdbc.Driver dataSource.username=reader dataSource.password=123456 package.base=com.springboot.mymes_demo.modules
注:
在輸入代表的時候輸入xx_*表示xx前綴的全部表 若輸入全名,則生成對於的表
公衆號https://mp.weixin.qq.com/s/nfat2WWWUXdmfUGFBAVEuA