前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >快速学习-代码生成器搭建环境

快速学习-代码生成器搭建环境

作者头像
cwl_java
发布2020-02-11 14:10:40
2710
发布2020-02-11 14:10:40
举报
文章被收录于专栏:cwl_Java

4 代码生成器搭建环境

4.1 思路分析

工具的执行逻辑如下图所示:

如上分析,得知完成代码生成器需要以下几个操作:

  1. 用户填写的数据库信息,工程搭建信息需要构造到实体类对象中方便操作
  2. 数据库表信息,数据库字段信息需要构造到实体类中
  3. 构造Freemarker数据模型,将数据库表对象和基本配置存入到Map集合中
  4. 借助Freemarker完成代码生成
  5. 自定义公共代码模板

4.2 搭建环境

4.2.1 配置坐标

代码语言:javascript
复制
<dependencies>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.20</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
    </dependencies>

4.2.2 配置实体类

(1) UI页面获取的数据库配置,封装到数据库实体类中

代码语言:javascript
复制
//数据库实体类
public class DataBase {
    private static String mysqlUrl = "jdbc:mysql://[ip]:[port]/[db]?
useUnicode=true&amp;characterEncoding=UTF8";
    private static String oracleUrl = "jdbc:oracle:thin:@[ip]:[port]:[db]";
    private String dbType;//数据库类型
    private String driver;
    private String userName;
    private String passWord;
    private String url;
    public DataBase() {}
    public DataBase(String dbType) {
        this(dbType,"127.0.0.1","3306","");
   }
    public DataBase(String dbType,String db) {
        this(dbType,"127.0.0.1","3306",db);
   }
    public DataBase(String dbType,String ip,String port,String db) {
        this.dbType = dbType;
        if("MYSQL".endsWith(dbType.toUpperCase())) {
            this.driver="com.mysql.jdbc.Driver";
            this.url=mysqlUrl.replace("[ip]",ip).replace("[port]",port).replace("
[db]",db);
       }else{
            this.driver="oracle.jdbc.driver.OracleDriver";
            this.url=oracleUrl.replace("[ip]",ip).replace("[port]",port).replace("
[db]",db);
       }
   }
    public String getDbType() {
        return dbType;
   }
    public void setDbType(String dbType) {
        this.dbType = dbType;
   }
    public String getDriver() {
        return driver;
         }
    public void setDriver(String driver) {
        this.driver = driver;
   }
    public String getUserName() {
        return userName;
   }
    public void setUserName(String userName) {
        this.userName = userName;
   }
    public String getPassWord() {
        return passWord;
   }
    public void setPassWord(String passWord) {
        this.passWord = passWord;
   }
    public String getUrl() {
        return url;
   }
    public void setUrl(String url) {
        this.url = url;
   }
}

(2) UI页面获取的自动生成工程配置,封装到设置实体类中

代码语言:javascript
复制
public class Settings {
    private String project="example";
    private String pPackage="com.example.demo";
    private String projectComment;
    private String author;
    private String path1="com";
    private String path2="example";
    private String path3="demo";
    private String pathAll;
    public Settings(String project, String pPackage, String projectComment, String
author) {
        if(StringHelper.isNotBlank(project)) {
            this.project = project;
       }
        if(StringHelper.isNotBlank(pPackage)) {
            this.pPackage = pPackage;
       }
        this.projectComment = projectComment;
         this.author = author;
        String[] paths = pPackage.split("\\.");
        path1 = paths[0];
        path2 = paths.length>1?paths[1]:path2;
        path3 = paths.length>2?paths[2]:path3;
        pathAll = pPackage.replaceAll(".","/");
   }
    public Map<String, Object> getSettingMap(){
        Map<String, Object> map = new HashMap<>();
        Field[] declaredFields = Settings.class.getDeclaredFields();
        for (Field field : declaredFields) {
            field.setAccessible(true);
            try{
                map.put(field.getName(), field.get(this));
           }catch (Exception e){}
       }
        return map;
   }
    public String getProject() {
        return project;
   }
    public void setProject(String project) {
        this.project = project;
   }
    public String getpPackage() {
        return pPackage;
   }
    public void setpPackage(String pPackage) {
        this.pPackage = pPackage;
   }
    public String getProjectComment() {
        return projectComment;
   }
    public void setProjectComment(String projectComment) {
        this.projectComment = projectComment;
   }
    public String getAuthor() {
        return author;
   }
    public void setAuthor(String author) {
        this.author = author;
   }
    public String getPath1() {
     return path1;
   }
    public void setPath1(String path1) {
        this.path1 = path1;
   }
    public String getPath2() {
        return path2;
   }
    public void setPath2(String path2) {
        this.path2 = path2;
   }
    public String getPath3() {
        return path3;
   }
    public void setPath3(String path3) {
        this.path3 = path3;
   }
    public String getPathAll() {
        return pathAll;
   }
    public void setPathAll(String pathAll) {
        this.pathAll = pathAll;
   }
}

(3) 将查询数据表的元数据封装到Table实体类

代码语言:javascript
复制
public class Table {
 
 private String name;//表名称
 private String name2;//处理后的表名称
 private String comment;//介绍
 private String key;// 主键列
 private List<Column> columns;//列集合
 public String getName() {
	 return name;
 }
 public void setName(String name) {
	 this.name = name;
 }
 public String getName2() {
	 return name2;
 }
 public void setName2(String name2) {
	 this.name2 = name2;
 }
 public String getComment() {
	 return comment;
 }
 public void setComment(String comment) {
	 this.comment = comment;
 }
 public String getKey() {
	 return key;
 }
 public void setKey(String key) {
	 this.key = key;
 }
 public List<Column> getColumns() {
	 return columns;
 }
 public void setColumns(List<Column> columns) {
	 this.columns = columns;
 }
}

(4)将查询数据字段的元数据封装到Column实体类

代码语言:javascript
复制
/**
* 列对象
*/
public class Column {
 
	 private String columnName;//列名称
	 private String columnName2;//列名称(处理后的列名称)
	 private String columnType;//列类型
	 private String columnDbType;//列数据库类型
	 private String columnComment;//列备注D
	 private String columnKey;//是否是主键
	 public String getColumnName() {
		 return columnName;
	 }
	 public void setColumnName(String columnName) {
		 this.columnName = columnName;
	 }
	 public String getColumnName2() {
	 	return columnName2;
	 }
	 public void setColumnName2(String columnName2) {
		 this.columnName2 = columnName2;
	 }
	 public String getColumnType() {
		 return columnType;
	 }
	 public void setColumnType(String columnType) {
		 this.columnType = columnType;
	 }
	 public String getColumnDbType() {
		 return columnDbType;
	 }
	 public void setColumnDbType(String columnDbType) {
		 this.columnDbType = columnDbType;
	 }
	 public String getColumnComment() {
		 return columnComment;
	 }
	 public void setColumnComment(String columnComment) {
		 this.columnComment = columnComment;
	 }
	 public String getColumnKey() {
		 return columnKey;
	 }
	 public void setColumnKey(String columnKey) {
		 this.columnKey = columnKey;
	 }
}

4.2.3 导入工具类

导入资料中提供的工具类

FileUtils:文件处理工具类:

  1. getRelativePath:获取文件的相对路径
  2. searchAllFile :查询文件夹下所有文件
  3. mkdir :创建文件目录

PropertiesMaps:

  1. 加载所有properties并存入Map集合中:
  2. 加载代码生成器的基本配置文件
  3. 加载用户的自定义配置文件
  4. 所有配置文件需要放置到"/properties"文件夹下

StringHelper:

  1. 字符串处理工具类
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 4 代码生成器搭建环境
    • 4.1 思路分析
      • 4.2 搭建环境
        • 4.2.1 配置坐标
        • 4.2.2 配置实体类
        • 4.2.3 导入工具类
    相关产品与服务
    数据库
    云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档