package com.test;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.rules.IColumnType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.junit.Test; import java.io.FileReader;
import java.io.IOException;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties; /**
* @author zsn
* MyBatis-Plus 代码生成器
*/
public class MyBatisPlusVerifyCodeControllerGenerator {
//包名
private static final String BASE_PACKAGE = "com.xxx";
private static final String MAPPER_PACKAGE = "dao";
private static final String SERVICE_PACKAGE = "service";
private static final String CONTROLLER_PACKAGE = "controller";
private static final String ENTITY_PACKAGE = "entity";
private static final String XML_PACKAGE = "mapper";
  //输出文件的路径
private static final String OUT_PATH = System.getProperty("user.dir") + "/src/main/java";
//代码生成者
private static final String AUTHOR = "张三";
// 需要生成代码的表的名字
private static final String[] INCLUDE_TABLE = {"tb_maintenance_type", "tb_maintenance_order", "tb_staff_plumber"};
//JDBC相关配置
private static String driver;
private static String url;
private static String user;
private static String password;
// private static final String[] EXCLUDE_TABLE = {"test"}; static {
Properties properties = new Properties();
try {
properties.load(new FileReader("src/main/resources/mysql.properties"));
driver = properties.getProperty("driver");
url = properties.getProperty("url");
user = properties.getProperty("user");
password = properties.getProperty("password");
} catch (IOException e) {
e.printStackTrace();
}
} public static void main(String[] args) {
// 全局配置:设置作者、输出路径、是否重写等属性
GlobalConfig globalConfig = new GlobalConfig().setOutputDir(OUT_PATH)// 输出目录
.setFileOverride(true)// 是否覆盖文件
.setActiveRecord(true) // 开启 activeRecord 模式
// .setEnableCache(false) // XML 二级缓存
// .setBaseResultMap(false) // XML ResultMap
// .setBaseColumnList(true) // XML columList
.setAuthor(AUTHOR)
.setIdType(IdType.AUTO)//主键策略
.setXmlName("%sMapper")
.setMapperName("%sDao")
.setServiceName("%sService") //设置service接口名字首字母没有I
.setServiceImplName("%sServiceImpl")
.setControllerName("%sController");
// 数据源配置
DataSourceConfig dataSource = new DataSourceConfig()
.setDbType(DbType.MYSQL)// 数据库类型
.setUrl(url)
.setDriverName(driver)
.setUsername(user)
.setPassword(password)
.setTypeConvert(new MySqlTypeConvert() {
@Override
public IColumnType processTypeConvert(GlobalConfig globalConfig, String
fieldType) {// 自定义数据库表字段类型转换(可选)
System.out.println("转换类型:" + fieldType);
// if ( fieldType.toLowerCase().contains( "tinyint" ) ) {
// return DbColumnType.BOOLEAN;
// }
return super.processTypeConvert(globalConfig, fieldType);
}
});
// 策略配置
StrategyConfig strategyConfig = new StrategyConfig()
.setCapitalMode(true)// 全局大写命名
.setTablePrefix("tb_")//表名前缀
.setEntityLombokModel(true)//使用lombok,如果没有集成Lombok,可以设置为false
.setNaming(NamingStrategy.underline_to_camel)// 表名生成策略
.setInclude(INCLUDE_TABLE) // 需要生成的表
// .setExclude(EXCLUDE_TABLE) // <include> 与 <exclude> 只能配置一项
// -------------- ② -------------
// .setEntityColumnConstant(true) // 【实体】是否生成字段常量(默认 false)
// .setSuperEntityClass("com.hc.bean.BaseEntity") //自定义实体父类
// .setSuperEntityColumns(new String[]{"test_id"}) // 自定义实体,公共字段
// .setSuperMapperClass("com.hc.bean.BaseMapper") //自定义mapper父类
// .setSuperServiceClass("com.hc.bean.BaseService") //自定义service父类
// .setSuperServiceImplClass("com.hc.bean.BaseServiceImpl") //自定义service实现类父类
// .setSuperControllerClass("com.hc.bean.TestController")//自定义controller父类
// .setEntityBuilderModel(true) // 【实体】是否为构建者模型(默认 false)
// .setEntityBooleanColumnRemoveIsPrefix(true)//是否移除Boolean类型is前缀
// .setRestControllerStyle(true)
// .setControllerMappingHyphenStyle(true)
;
// 包配置
PackageConfig packageConfig = new PackageConfig()
// .setModuleName(MODULE_NAME)
.setParent(BASE_PACKAGE) // 自定义包路径
.setEntity(ENTITY_PACKAGE)
.setMapper(MAPPER_PACKAGE)
.setXml(XML_PACKAGE)
.setService(SERVICE_PACKAGE)
.setController(CONTROLLER_PACKAGE);// 这里是控制器包名 AutoGenerator mpg = new AutoGenerator()
.setGlobalConfig(globalConfig)
.setDataSource(dataSource)
.setStrategy(strategyConfig)
.setPackageInfo(packageConfig)//进行包设置
.setTemplateEngine(new FreemarkerTemplateEngine());
mpg.execute(); // 执行生成
} public static List<String> getAllTableNamesByDatabase(String databaseName) throws Exception {
List<String> tables = new ArrayList();
Connection conn = getConnection();
PreparedStatement ps = conn.prepareStatement("select table_name from information_schema.TABLES where TABLE_SCHEMA=?");
ps.setString(1, databaseName);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
tables.add(rs.getString("TABLE_NAME"));
}
closeAll(conn, ps, rs);
return tables;
} public static Connection getConnection() throws Exception {
Class.forName(driver);
return DriverManager.getConnection(url, user, password);
} public static void closeAll(Connection conn, Statement stmt, ResultSet rs) {
try {
if (rs != null) {
rs.close();
}
} catch (SQLException ex) {
ex.printStackTrace();
} finally {
try {
if (stmt != null) {
stmt.close();
}
} catch (SQLException ex) {
ex.printStackTrace();
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
}
} /////////////////////////////////////下面代码用来产生表名////////////////////////////////////////////////////////////
@Test
public void fun() throws Exception {
List<String> db_test= getAllTableNamesByDatabase("db_test");
db_test.forEach(item -> System.out.print("\"" + item + "\","));
} }

在resource目录创建mysql.properties配置文件

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/db_test?useSSL=false&serverTimezone=UTC&characterEncoding=utf8&useUnicode=true
user=root
password=root

代码生成需要依赖 freemarker 否则报异常:java.lang.NoClassDefFoundError: freemarker/template/Configuration

springboot:使用以下方式添加依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
<version>2.1.8.RELEASE</version>
</dependency>

最后执行main()方法

MyBatisPlus代码生成 mvc项目的更多相关文章

  1. spring boot项目使用mybatis-plus代码生成实例

    前言 mybatis-plus官方地址 https://baomidou.com mybatis-plus是mybatis的增强,不对mybatis做任何改变,涵盖了代码生成,自定义ID生成器,快速实 ...

  2. C#编译器优化那点事 c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错 webAPI 控制器(Controller)太多怎么办? .NET MVC项目设置包含Areas中的页面为默认启动页 (五)Net Core使用静态文件 学习ASP.NET Core Razor 编程系列八——并发处理

    C#编译器优化那点事   使用C#编写程序,给最终用户的程序,是需要使用release配置的,而release配置和debug配置,有一个关键区别,就是release的编译器优化默认是启用的.优化代码 ...

  3. 采用MiniProfiler监控EF与.NET MVC项目(Entity Framework 延伸系列1)

    前言 Entity Framework 延伸系列目录 今天来说说EF与MVC项目的性能检测和监控 首先,先介绍一下今天我们使用的工具吧. MiniProfiler~ 这个东西的介绍如下: MVC Mi ...

  4. MVC项目中ExecutionTimeout不生效的解决方案

    我们做web服务器端开发时,经常会遇到一个需求场景,因为某些耗时处理造成页面的响应处理时间超长,技术角度就想能否给页面处理程序一个指定的超时时间,服务端处理程序执行时间超过这个指定的超时时间则中断处理 ...

  5. ASP.NET MVC项目实践技巧

    原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com 在.NET开发初期,微软提供的WEB开发模型是WebForm,试图消除Web和桌面的隔阂,建立一致的开发体验.但是 ...

  6. AngularJS2 + ASP.NET MVC项目

    环境:VS2015, NodeJS:v 6.5, npm: v3.10, AngularJs 2 通过将ASP.NET MVC项目与Angualr 2官网上的quick start整合的过程中遇到些问 ...

  7. IntelliJ IDEA上创建maven Spring MVC项目

    IntelliJ IDEA上创建Maven Spring MVC项目 各软件版本 利用maven骨架建立一个webapp 建立相应的目录 配置Maven和SpringMVC 配置Maven的pom.x ...

  8. 远程调试 ASP.NET MVC 项目

    Visual Studio 支持从一台计算机到另一台设备的远程调试.进行远程调试时,主机可以是任何支持 Visual Studio 的平台.远程设备可以是 x86.x64 或 ARM 平台. 本文将指 ...

  9. Visual Studio 2015 新建MVC项目 Package Manager Console不能使用 (HRESULT: 0x80131500)

    Visual studio 2015 突然新建不了MVC项目,报出错误: HRESULT: 0x80131500 在折腾了很长时间,最后在Github上看到这样一个贴 地址:https://githu ...

随机推荐

  1. VBA 学习笔记 - 消息框

    学习资料:https://www.yiibai.com/vba/vba_macro_comments.html 注释 单引号或 REM 开头 丸子:多行注释咋办? 消息框(MsgBox) 函数功能:显 ...

  2. ASA-ACL类型

    安全设备支持下面5种不同类型的ACl: 标准ACL 扩展ACL(可匹配v4&v6流量) EtherType ACL (以太网类型ACL) WebType ACL(Web类型ACL) 1.标准A ...

  3. Nexus-产品认识

    传统的思科数据中心网络架构也包括如下层级结构:    • 核心层(一般是Nexus 7K来充当)    • 汇聚层(一般也是Nexus 7K充当,可能存在2台,或4台的设备)    • 接入层(一般会 ...

  4. Manacher算法--O(n)回文子串算法

    转自:http://blog.csdn.net/ggggiqnypgjg/article/details/6645824 O(n)回文子串算法 注:转载的这篇文章,我发现下面那个源代码有点bug... ...

  5. Nginx常用模块及作用

    Nginx模块详解 nginx模块分为两种,官方和第三方,我们通过命令 nginx -V 查看 nginx已经安装的模块! [root@localhost ~]# nginx -V nginx ver ...

  6. Nginx实现HTTP及TCP负载均衡

    这种通过一台apache的服务器把客户请求分别传递给两台tomcat叫负载均衡  ========================================= ================= ...

  7. FTP文件传输服务!

    一.FTP  连接及传输模式 1.控制连接:TCP 21,用于发送 FTP 命令信息2.数据连接:TCP 20,用于上传.下载数据3.数据连接的建立类型: (1)主动模式:服务器主动发起数据连接 (2 ...

  8. redis在Windows上启动报错

    The Windows version of Redis allocates a memory mapped heap for sharing with the forked process used ...

  9. 理解WPF中的视觉树和逻辑树

    轉載地址:http://blog.csdn.net/changtianshuiyue/article/details/26981797 理解WPF中的视觉树和逻辑树  Understanding th ...

  10. lnmp1.5安装memcache

    1.安装libevent 由于Memcache用到了libevent这个库用于Socket的处理,所以需要安装libevent. # wget http://www.monkey.org/~provo ...