ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

generator

2021-12-07 23:00:08  阅读:97  来源: 互联网

标签:return String generator colProp import public


<?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.whackon.generator</groupId>
	<artifactId>generator-mysql</artifactId>
	<version>1.0.0</version>
	<packaging>jar</packaging>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.3.12.RELEASE</version>
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>1.8</maven.compiler.target>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-freemarker</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-thymeleaf</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<pluginManagement>
			<plugins>
				<plugin>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-maven-plugin</artifactId>
					<executions>
						<execution>
							<goals>
								<goal>repackage</goal>
							</goals>
						</execution>
					</executions>
				</plugin>
				<plugin>
					<artifactId>maven-clean-plugin</artifactId>
					<version>3.1.0</version>
				</plugin>
				<plugin>
					<artifactId>maven-resources-plugin</artifactId>
					<version>3.0.2</version>
				</plugin>
				<plugin>
					<artifactId>maven-compiler-plugin</artifactId>
					<version>3.8.0</version>
				</plugin>
				<plugin>
					<artifactId>maven-surefire-plugin</artifactId>
					<version>2.22.1</version>
				</plugin>
				<plugin>
					<artifactId>maven-jar-plugin</artifactId>
					<version>3.0.2</version>
				</plugin>
				<plugin>
					<artifactId>maven-install-plugin</artifactId>
					<version>2.5.2</version>
				</plugin>
				<plugin>
					<artifactId>maven-deploy-plugin</artifactId>
					<version>2.8.2</version>
				</plugin>
				<plugin>
					<artifactId>maven-site-plugin</artifactId>
					<version>3.7.1</version>
				</plugin>
				<plugin>
					<artifactId>maven-project-info-reports-plugin</artifactId>
					<version>3.0.0</version>
				</plugin>
			</plugins>
		</pluginManagement>
	</build>
</project>
server:
  port: 80
spring:
  application:
    name: generator-mysql
  main:
    allow-bean-definition-overriding: true
  thymeleaf:
    cache: false
    encoding: UTF-8
    prefix: classpath:/view/
    suffix: .html

 

 system.properties

###### Freemarker 模板路径
freemarker.template.path=templates
###### JDBC 连接信息
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url.prefix=jdbc:mysql://
jdbc.url.suffix=?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true
package com.whackon.generator.controller;

import com.whackon.generator.pojo.vo.GeneratorVO;
import com.whackon.generator.service.GeneratorService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * <b>生成器控制层类</b>
 * @author Arthur
 * @version 1.0.0
 */
@Controller("generatorController")
public class GeneratorController {
	@Autowired
	private GeneratorService generatorService;
	@Autowired
	private HttpServletRequest request;
	@Autowired
	private HttpServletResponse response;

	/**
	 * <b>转发到首页面</b>
	 * @return
	 * @throws Exception
	 */
	@GetMapping("/")
	public String forwardPage() throws Exception {
		return "generator_index";
	}

	/**
	 * <b>生成代码文件</b>
	 * @param generatorVO
	 * @return
	 * @throws Exception
	 */
	@PostMapping("/generate")
	@ResponseBody
	public boolean createCodeFile(GeneratorVO generatorVO) throws Exception {
		try {
			generatorService.generateCodeFile(generatorVO);
			return true;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return false;
	}
}
package com.whackon.generator.dao;

import com.whackon.generator.pojo.entity.TableBean;

import java.sql.Connection;
import java.util.List;

/**
 * <b>生成器数据持久层接口</b>
 * @author Arthur
 * @version 1.0.0
 */
public interface GeneratorDao {
	/**
	 * <b>根据数据库名获得该库所有表字段信息</b>
	 * @param dbName
	 * @param connection
	 * @return
	 * @throws Exception
	 */
	List<TableBean> findTableBeanListByDBName(String dbName, Connection connection) throws Exception;
}
package com.whackon.generator.dao.impl;

import com.whackon.generator.dao.GeneratorDao;
import com.whackon.generator.pojo.entity.ColumnProperty;
import com.whackon.generator.pojo.entity.TableBean;
import com.whackon.generator.util.DataTypeUtil;
import com.whackon.generator.util.NameUtil;
import org.springframework.stereotype.Component;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

/**
 * <b>生成器数据持久层接口实现类</b>
 * @author Arthur
 * @version 1.0.0
 */
@Component("generatorDao")
public class GeneratorDaoImpl implements GeneratorDao {
	/**
	 * <b>根据数据库名获得该库所有表字段信息</b>
	 * @param dbName
	 * @param connection
	 * @return
	 * @throws Exception
	 */
	@Override
	public List<TableBean> findTableBeanListByDBName(String dbName, Connection connection) throws Exception {
		List<TableBean> tableBeanList = new ArrayList<TableBean>();
		// 根据数据库名查询所有的数据表信息
		String SQL = "select table_name tableName, table_comment tableComment from information_schema.tables " +
				"where table_schema=?";
		// 使用 Connection 创建 PreparedStatement 对象
		PreparedStatement statement = connection.prepareStatement(SQL);
		statement.setString(1, dbName);
		// 查询获得结果
		ResultSet resultSet = statement.executeQuery();
		while (resultSet.next()) {
			// 创建 TableBean 对象
			TableBean tableBean = new TableBean();
			// 分别设定属性
			tableBean.setTableName(resultSet.getString("tableName"));
			tableBean.setTableComment(resultSet.getString("tableComment"));
			tableBean.setTableAlias(NameUtil.getTableAliasNameFromTable(tableBean.getTableName()));
			tableBean.setBeanName(NameUtil.getBeanNameFromTable(tableBean.getTableName()));

			// 根据数据库表,获得该表的所有字段
			findColPropListByTable(dbName, tableBean, connection);

			tableBeanList.add(tableBean);
		}
		return tableBeanList;
	}

	private void findColPropListByTable(String dbName, TableBean tableBean, Connection connection)
			throws Exception {
		List<ColumnProperty> colPropList = new ArrayList<ColumnProperty>();
		String SQL = "select table_name tableName, column_name columnName, data_type dataType, " +
				"column_comment columnComment from information_schema.columns " +
				"where table_schema=? and table_name=? order by ordinal_position asc";
		// 使用 Connection 创建 PreparedStatement 对象
		PreparedStatement statement = connection.prepareStatement(SQL);
		statement.setString(1, dbName);
		statement.setString(2, tableBean.getTableName());
		// 进行查询
		ResultSet resultSet = statement.executeQuery();
		while (resultSet.next()) {
			ColumnProperty colProp = new ColumnProperty();
			colProp.setColName(resultSet.getString("columnName"));
			colProp.setColDataType(resultSet.getString("dataType"));
			colProp.setColComment(resultSet.getString("columnComment"));
			colProp.setTableName(resultSet.getString("tableName"));
			colProp.setTableAlias(tableBean.getTableAlias());
			colProp.setPropName(NameUtil.getPropertyNameFromColumn(colProp.getColName()));
			DataTypeUtil.getPropertyDataTypeFromColumn(colProp, tableBean);
			colProp.setGetterMethodName("get" + colProp.getPropName().substring(0,1).toUpperCase()
					+ colProp.getPropName().substring(1, colProp.getPropName().length()));
			colProp.setSetterMethodName("set" + colProp.getGetterMethodName().substring(
					3, colProp.getGetterMethodName().length()));
			colProp.setBeanName(tableBean.getBeanName());

			colPropList.add(colProp);
		}

		tableBean.setColPropList(colPropList);
	}
}
package com.whackon.generator.pojo.entity;

import java.io.Serializable;

/**
 * <b>字段属性信息</b>
 */
public class ColumnProperty implements Serializable {
	private String colName;                     // 字段名
	private String colDataType;                 // 字段类型
	private String colComment;                  // 字段注释
	private String tableName;                   // 数据表名
	private String tableAlias;                  // 数据表别名
	private String propName;                    // 属性名
	private String propFullDataType;            // 属性类型全限定名
	private String propShortDataType;           // 属性类型短命
	private String getterMethodName;            // get 方法名
	private String setterMethodName;            // set 方法名
	private String beanName;                    // 实体类名

	public String getColName() {
		return colName;
	}

	public void setColName(String colName) {
		this.colName = colName;
	}

	public String getColDataType() {
		return colDataType;
	}

	public void setColDataType(String colDataType) {
		this.colDataType = colDataType;
	}

	public String getColComment() {
		return colComment;
	}

	public void setColComment(String colComment) {
		this.colComment = colComment;
	}

	public String getTableName() {
		return tableName;
	}

	public void setTableName(String tableName) {
		this.tableName = tableName;
	}

	public String getTableAlias() {
		return tableAlias;
	}

	public void setTableAlias(String tableAlias) {
		this.tableAlias = tableAlias;
	}

	public String getPropName() {
		return propName;
	}

	public void setPropName(String propName) {
		this.propName = propName;
	}

	public String getPropFullDataType() {
		return propFullDataType;
	}

	public void setPropFullDataType(String propFullDataType) {
		this.propFullDataType = propFullDataType;
	}

	public String getPropShortDataType() {
		return propShortDataType;
	}

	public void setPropShortDataType(String propShortDataType) {
		this.propShortDataType = propShortDataType;
	}

	public String getGetterMethodName() {
		return getterMethodName;
	}

	public void setGetterMethodName(String getterMethodName) {
		this.getterMethodName = getterMethodName;
	}

	public String getSetterMethodName() {
		return setterMethodName;
	}

	public void setSetterMethodName(String setterMethodName) {
		this.setterMethodName = setterMethodName;
	}

	public String getBeanName() {
		return beanName;
	}

	public void setBeanName(String beanName) {
		this.beanName = beanName;
	}
}
package com.whackon.generator.pojo.entity;

import java.io.Serializable;
import java.util.List;

/**
 * <b>数据表对象实体信息</b>
 */
public class TableBean implements Serializable {
	private static final long serialVersionUID = 1360869488379493240L;
	private String tableName;                       // 数据库表明
	private String tableComment;                    // 数据库表注释
	private String tableAlias;                      // 数据表别名
	private String beanName;                        // 类名
	private boolean hasDate;                        // 是否包含有 Date 类型
	private List<ColumnProperty> colPropList;       // 对应字段属性列表

	public String getTableName() {
		return tableName;
	}

	public void setTableName(String tableName) {
		this.tableName = tableName;
	}

	public String getTableComment() {
		return tableComment;
	}

	public void setTableComment(String tableComment) {
		this.tableComment = tableComment;
	}

	public String getTableAlias() {
		return tableAlias;
	}

	public void setTableAlias(String tableAlias) {
		this.tableAlias = tableAlias;
	}

	public String getBeanName() {
		return beanName;
	}

	public void setBeanName(String beanName) {
		this.beanName = beanName;
	}

	public boolean getHasDate() {
		return hasDate;
	}

	public void setHasDate(boolean hasDate) {
		this.hasDate = hasDate;
	}

	public List<ColumnProperty> getColPropList() {
		return colPropList;
	}

	public void setColPropList(List<ColumnProperty> colPropList) {
		this.colPropList = colPropList;
	}
}
package com.whackon.generator.pojo.enums;

/**
 * <b>名称类型枚举信息</b>
 * @author Arthur
 * @version 1.0.0
 */
public enum NameTypeEnum {
	NAME_ENTITY,
	NAME_PROPERTY,
	NAME_GET_METHOD,
	NAME_SET_METHOD
}
package com.whackon.generator.pojo.vo;

import java.io.Serializable;

/**
 * <b>代码生成视图对象</b>
 */
public class GeneratorVO implements Serializable {
	private static final long serialVersionUID = 5342443082452383889L;
	private String dbIP;                        // 数据库连接 IP 地址
	private String dbPort;                      // 数据库连接端口号
	private String dbName;                      // 数据库名
	private String dbUser;                      // 数据库登录用户名
	private String dbPassword;                  // 数据库登录密码
	private String outFolderPath;               // 生成文件文件夹

	public String getDbIP() {
		return dbIP;
	}

	public void setDbIP(String dbIP) {
		this.dbIP = dbIP;
	}

	public String getDbPort() {
		return dbPort;
	}

	public void setDbPort(String dbPort) {
		this.dbPort = dbPort;
	}

	public String getDbName() {
		return dbName;
	}

	public void setDbName(String dbName) {
		this.dbName = dbName;
	}

	public String getDbUser() {
		return dbUser;
	}

	public void setDbUser(String dbUser) {
		this.dbUser = dbUser;
	}

	public String getDbPassword() {
		return dbPassword;
	}

	public void setDbPassword(String dbPassword) {
		this.dbPassword = dbPassword;
	}

	public String getOutFolderPath() {
		return outFolderPath;
	}

	public void setOutFolderPath(String outFolderPath) {
		this.outFolderPath = outFolderPath;
	}
}
package com.whackon.generator.service;

import com.whackon.generator.pojo.vo.GeneratorVO;

/**
 * <b>生成器业务层接口</b>
 * @author Arthur
 * @version 1.0.0
 */
public interface GeneratorService {
	/**
	 * <b>根据用户信息生成代码文件</b>
	 * @param generatorVO
	 * @return
	 * @throws Exception
	 */
	boolean generateCodeFile(GeneratorVO generatorVO) throws Exception;
}
package com.whackon.generator.service.impl;

import com.whackon.generator.dao.GeneratorDao;
import com.whackon.generator.pojo.entity.TableBean;
import com.whackon.generator.pojo.vo.GeneratorVO;
import com.whackon.generator.service.GeneratorService;
import com.whackon.generator.util.ConnectionUtil;
import com.whackon.generator.util.FileUtil;
import com.whackon.generator.util.FreemarkerUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.io.File;
import java.sql.Connection;
import java.util.List;

/**
 * <b>生成器业务层接口</b>
 * @author Arthur
 * @version 1.0.0
 */
@Component("generatorService")
public class GeneratorServiceImpl implements GeneratorService {
	@Autowired
	private GeneratorDao generatorDao;

	/**
	 * <b>根据用户信息生成代码文件</b>
	 * @param generatorVO
	 * @return
	 * @throws Exception
	 */
	@Override
	public boolean generateCodeFile(GeneratorVO generatorVO) throws Exception {
		// 获得数据库连接对象
		Connection connection = ConnectionUtil.getConnection(generatorVO.getDbIP(), generatorVO.getDbPort()
				, generatorVO.getDbName(), generatorVO.getDbUser(), generatorVO.getDbPassword());
		// 查询数据库信息
		List<TableBean> tableBeanList = generatorDao.findTableBeanListByDBName(generatorVO.getDbName(), connection);
		// 循环数据库表信息,生成相关文件
		for (TableBean tableBean : tableBeanList) {
			// 生成实体类文件
			FileUtil.createFolder(generatorVO.getOutFolderPath() + File.separator + "entity");
			File entityFile = FileUtil.createFile(generatorVO.getOutFolderPath()
					+ File.separator + "entity" + File.separator + tableBean.getBeanName() + ".java");
			FreemarkerUtil.generateCodeFile(tableBean, entityFile, "entity");

			// 生成视图类文件
			FileUtil.createFolder(generatorVO.getOutFolderPath() + File.separator + "vo");
			File voFile = FileUtil.createFile(generatorVO.getOutFolderPath()
					+ File.separator + "vo" + File.separator + tableBean.getBeanName() + "VO.java");
			FreemarkerUtil.generateCodeFile(tableBean, voFile, "vo");

			// 生成 DAO 接口文件
			FileUtil.createFolder(generatorVO.getOutFolderPath() + File.separator + "dao");
			File daoFile = FileUtil.createFile(generatorVO.getOutFolderPath()
					+ File.separator + "dao" + File.separator + tableBean.getBeanName() + "Dao.java");
			FreemarkerUtil.generateCodeFile(tableBean, daoFile, "dao");

			// 生成 Mapper 映射文件
			FileUtil.createFolder(generatorVO.getOutFolderPath() + File.separator + "mapper");
			File mapperFile = FileUtil.createFile(generatorVO.getOutFolderPath()
					+ File.separator + "mapper" + File.separator + tableBean.getBeanName() + ".Mapper.xml");
			FreemarkerUtil.generateCodeFile(tableBean, mapperFile, "mapper");
		}
		return true;
	}
}
package com.whackon.generator.util;

import java.sql.Connection;
import java.sql.DriverManager;

/**
 * <b>数据库连接工具类</b>
 * @author Arthur
 * @version 1.0.0
 */
public class ConnectionUtil {
	static {
		try {
			Class.forName(SystemConstants.JDBC_DRIVER);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * <b>根据用户所给定连接信息,获得 Connection 对象</b>
	 * @param dbIP
	 * @param dbPort
	 * @param dbName
	 * @param dbUser
	 * @param dbPassword
	 * @return
	 */
	public static Connection getConnection(String dbIP, String dbPort, String dbName,
	                                       String dbUser, String dbPassword) {
		// 根据用户信息拼接完整的 URL
		//jdbc.driverClass=com.mysql.cj.jdbc.Driver
		//jdbc.url=jdbc:mysql://localhost:3306/ums_db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false&AllowPublicKeyRetrieval=true
		//jdbc.username=root
		//jdbc.password=1234
		String url = SystemConstants.JDBC_URL_PREFIX + dbIP + ":" + dbPort + "/" + dbName + SystemConstants.JDBC_URL_SUFFIX;

		try {
			// 根据连接信息创建连接对象
			return DriverManager.getConnection(url, dbUser, dbPassword);
		} catch (Exception e) {
			e.printStackTrace();
		}

		return null;
	}
}
package com.whackon.generator.util;

import com.whackon.generator.pojo.entity.ColumnProperty;
import com.whackon.generator.pojo.entity.TableBean;

/**
 * <b>数据类型工具类</b>
 * @author Arthur
 * @version 1.0.0
 */
public class DataTypeUtil {
	/**
	 * <b>根据数据库字段获得属性类型</b>
	 * @param colProp
	 * @param tableBean
	 */
	public static void getPropertyDataTypeFromColumn(ColumnProperty colProp, TableBean tableBean) {
		if ("int".equalsIgnoreCase(colProp.getColDataType())) {
			colProp.setPropShortDataType("Integer");
			colProp.setPropFullDataType("java.lang.Integer");
		} else if ("varchar".equalsIgnoreCase(colProp.getColDataType())) {
			colProp.setPropShortDataType("String");
			colProp.setPropFullDataType("java.lang.String");
		} else if ("decimal".equalsIgnoreCase(colProp.getColDataType())) {
			colProp.setPropShortDataType("Double");
			colProp.setPropFullDataType("java.lang.Double");
		} else if ("date".equalsIgnoreCase(colProp.getColDataType())
				|| "timestamp".equals(colProp.getColDataType())) {
			colProp.setPropShortDataType("Date");
			colProp.setPropFullDataType("java.util.Date");
			tableBean.setHasDate(true);
		}
	}
}
package com.whackon.generator.util;

import java.io.File;

/**
 * <b>文件操作工具类</b>
 * @author Arthur
 * @version 1.0.0
 */
public class FileUtil {

	/**
	 * <b>根据目录路径创建目录 File 对象</b>
	 * @param folderPath
	 * @return
	 */
	public static File createFolder(String folderPath) {
		try {
			// 根据路径创建 File 对象
			File folder = new File(folderPath);
			if (!folder.exists()) {
				folder.mkdirs();
			}
			return folder;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * <b>根据文件路径创建文件 File 对象</b>
	 * @param filePath
	 * @return
	 */
	public static File createFile(String filePath) {
		try {
			// 根据路径创建 File 对象
			File file = new File(filePath);
			if (!file.exists()) {
				file.createNewFile();
			}
			return file;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
}
package com.whackon.generator.util;

import freemarker.template.Configuration;
import freemarker.template.Template;
import org.springframework.util.ResourceUtils;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;

/**
 * <b>Freemarker 工具类</b>
 * @author Arthur
 * @version 1.0.0
 */
public class FreemarkerUtil {

	/**
	 * <b>根据用户参数、输出文件夹路径、输出文件和模板生成代码文件</b>
	 * @param param
	 * @param outFile
	 * @param templateName
	 * @return
	 */
	public static boolean generateCodeFile(Object param, File outFile, String templateName) {
		// 创建 Freemarker 的 Configuration 对象
		Configuration configuration = new Configuration(Configuration.VERSION_2_3_31);
		try {
			String templatePath = ResourceUtils.getURL("classpath:").getPath()
					+ SystemConstants.FREEMARKER_TEMPLATE_PATH;
			// 加载模板所在路径
			configuration.setDirectoryForTemplateLoading(new File(templatePath));
			// 设置编码格式为 UTF-8
			configuration.setDefaultEncoding("UTF-8");
			// 根据生成所使用的模板名称获得模板对象
			Template template = configuration.getTemplate(templateName + ".ftl");
			// 根据输出文件 File 对象,创建输出流
			BufferedWriter bw = new BufferedWriter(new FileWriter(outFile));
			// 生成代码文件
			template.process(param, bw);
			bw.close();
			return true;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return false;
	}
}
package com.whackon.generator.util;

/**
 * <b>名称工具类</b>
 */
public class NameUtil {
	/**
	 * <b>根据数据库表名获得表的别名</b>
	 * @param tableName
	 * @return
	 */
	public static String getTableAliasNameFromTable(String tableName) {
		// 使用 “_” 对数据库表名进行切割
		String[] tableNameArys = tableName.split("_");
		StringBuffer sb = new StringBuffer();
		for (String tableNamePart : tableNameArys) {
			sb.append(tableNamePart.substring(0, 1).toLowerCase());
		}
		return sb.toString();
	}

	/**
	 * <b>根据数据表名获得类名</b>
	 * @param tableName
	 * @return
	 */
	public static String getBeanNameFromTable(String tableName) {
		// 使用 “_” 对数据库表名进行切割
		String[] tableNameArys = tableName.split("_");
		if (tableNameArys.length == 1) {
			// 此时数据表只有一个名字
			return tableName.substring(0,1).toUpperCase() + tableName.substring(1, tableName.length());
		} else {
			// 数据库表有若干部分组成
			// 去掉第一个部分的前缀信息
			StringBuffer sb = new StringBuffer();
			for (int i = 1; i < tableNameArys.length; i++) {
				sb.append(tableNameArys[i].substring(0, 1).toUpperCase());
				sb.append(tableNameArys[i].substring(1, tableNameArys[i].length()));
			}
			return sb.toString();
		}
	}

	public static String getPropertyNameFromColumn(String colName) {
		String[] colNameArys = colName.split("_");
		StringBuffer sb = new StringBuffer();
		// 生成属性名
		sb.append(colNameArys[0].substring(0,1).toLowerCase());
		sb.append(colNameArys[0].substring(1,colNameArys[0].length()));
		if (colNameArys.length > 1) {
			for (int i = 1; i < colNameArys.length; i++) {
				sb.append(colNameArys[i].substring(0, 1).toUpperCase());
				sb.append(colNameArys[i].substring(1, colNameArys[i].length()));
			}
		}
		return sb.toString();
	}
}
package com.whackon.generator.util;

import java.util.Properties;

/**
 * <b>系统常量工具类</b>
 * @author Arthur
 * @version 1.0.0
 */
public class SystemConstants {
	private static Properties props = new Properties();

	static {
		try {
			props.load(SystemConstants.class.getClassLoader().getResourceAsStream("props/system.properties"));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * <b>Freemarker 模板路径</b>
	 */
	public static final String FREEMARKER_TEMPLATE_PATH = props.getProperty("freemarker.template.path");

	/**
	 * <b>JDBC 连接信息:连接驱动类</b>
	 */
	public static final String JDBC_DRIVER = props.getProperty("jdbc.driver");

	/**
	 * <b>JDBC 连接信息:链接地址前缀</b>
	 */
	public static final String JDBC_URL_PREFIX = props.getProperty("jdbc.url.prefix");

	/**
	 * <b>JDBC 连接信息:链接地址后缀</b>
	 */
	public static final String JDBC_URL_SUFFIX = props.getProperty("jdbc.url.suffix");
}
package com.whackon.generator;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * <b>代码生成器 MySQL 版启动类</b>
 * @author Arthur
 * @version 1.0.0
 */
@SpringBootApplication
public class GeneratorStarter {
	public static void main(String[] args) {
		SpringApplication.run(GeneratorStarter.class, args);
	}
}

 模板

import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * <b>${tableComment}数据持久层接口</b>
 * @author lenovo
 * @version 1.0.0
 */
@Repository
public interface ${beanName}Dao {
	/**
	 * <b>根据查询对象查询列表</b>
	 * @param query
	 * @return
	 * @throws Exception
	 */
	List<${beanName}> findListByQuery(${beanName} query) throws Exception;

	/**
	 * <b>保存对象信息</b>
	 * @param entity
	 * @return
	 * @throws Exception
	 */
	int save(${beanName} entity) throws Exception;

	/**
	 * <b>修改对象信息</b>
	 * @param entity
	 * @return
	 * @throws Exception
	 */
	int update(${beanName} entity) throws Exception;
}
<#if hasDate>
import java.util.Date;
</#if>

/**
 * <b>${tableComment}实体信息</b>
 * @author lenovo
 * @version 1.0.0
 */
public class ${beanName} extends BaseEntity {
<#list colPropList as colProp>
    private ${colProp.propShortDataType} ${colProp.propName};                      // ${colProp.colComment}
</#list>

	public static ${beanName} getEntity(${beanName}VO vo) {
		// 将视图属性切换为实体属性
		${beanName} entity = new ${beanName}();
		// 使用 Spring 的 beanUtils 对普通属性进行切换
		BeanUtils.copyProperties(vo, entity);
		// 切换关联属性


		entity.setStatus(vo.getStatus());
		entity.setCreateAdmin(vo.getCreateAdmin());
		entity.setCreateTime(vo.getCreateTime());
		entity.setUpdateAdmin(vo.getUpdateAdmin());
		entity.setUpdateTime(vo.getUpdateTime());
		return entity;
	}
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
		"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ekgc.medial.clinic.admin.dao.${beanName}Dao">
	<select id="findListByQuery" parameterType="${beanName}" resultMap="resultMap">
		select
		<#list colPropList as colProp>
		    ${tableAlias}.${colProp.colName},
		</#list>
		from
			${tableName} ${tableAlias}
		<where>
			<trim suffixOverrides="and">
            <#list colPropList as colProp>
                <if test="${colProp.propName} != null and ${colProp.propName} != ''">${tableAlias}.${colProp.colName}=<#noparse>#{</#noparse>${colProp.propName}<#noparse>}</#noparse> and </if>
			</#list>
			</trim>
		</where>
	</select>

	<insert id="save" parameterType="${beanName}">
		insert into ${tableName}(
			<trim suffixOverrides=",">
	        <#list colPropList as colProp>
		        <if test="${colProp.propName} != null and ${colProp.propName} != ''">${colProp.colName}, </if>
			</#list>
			</trim>
		) values(
			<trim suffixOverrides=",">
	        <#list colPropList as colProp>
				<if test="${colProp.propName} != null and ${colProp.propName} != ''"><#noparse>#{</#noparse>${colProp.propName}<#noparse>}</#noparse>, </if>
	        </#list>
			</trim>
		)
	</insert>

	<update id="update" parameterType="${beanName}">
		update ${tableName}
		<set>
			<trim suffixOverrides=",">
            <#list colPropList as colProp>
				<if test="${colProp.propName} != null and ${colProp.propName} != ''">${colProp.colName}=<#noparse>#{</#noparse>${colProp.propName}<#noparse>}</#noparse>, </if>
            </#list>
			</trim>
		</set>
		<where>
			<trim suffixOverrides="and">
				<if test="id != null and id != ''">id=<#noparse>#{</#noparse>id<#noparse>}</#noparse> and </if>
			</trim>
		</where>
	</update>

	<resultMap id="resultMap" type="${beanName}">
		<id property="id" javaType="java.lang.String" column="id"/>
    <#list colPropList as colProp>
	    <result property="${colProp.propName}" javaType="${colProp.propFullDataType}" column="${colProp.colName}"/>
	</#list>
	</resultMap>
</mapper>
<#if hasDate>
	import java.util.Date;
</#if>

/**
 * <b>${tableComment}视图信息</b>
 * @author lenovo
 * @version 1.0.0
 */
@ApiModel(value = "急诊功能模块 - ${tableComment}视图信息")
public class ${beanName}VO extends BaseVO {
<#list colPropList as colProp>
	@ApiModelProperty(value = "${colProp.colComment}")
	private ${colProp.propShortDataType} ${colProp.propName};                      // ${colProp.colComment}
</#list>

	public static ${beanName}VO getVO(${beanName} entity) {
		// 将实体属性切换为视图属性
		${beanName}VO vo = new ${beanName}VO();
		// 使用 Spring 的 beanUtils 对普通属性进行切换
		BeanUtils.copyProperties(entity, vo);
		// 切换关联属性



		vo.setStatus(entity.getStatus());
		vo.setCreateAdmin(entity.getCreateAdmin());
		vo.setCreateTime(entity.getCreateTime());
		vo.setUpdateAdmin(entity.getUpdateAdmin());
		vo.setUpdateTime(entity.getUpdateTime());
		return vo;
	}
}
<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<title>Title</title>
		<link rel="stylesheet" type="text/css" href="/css/font-awesome.min.css">
		<link rel="stylesheet" type="text/css" href="/css/bootstrap.min.css">
		<script type="application/javascript" src="/js/jquery-3.6.0.min.js"></script>
		<script type="application/javascript" src="/js/bootstrap.min.js"></script>
		<style rel="stylesheet" type="text/css">
			div {
				width: 642px;
				height: 590px;
				border-radius: 30px;
				padding: 50px;
				margin: auto;
				position: absolute;
				top: 0;
				bottom: 0;
				left: 0;
				right: 0;
			}

			caption {
				text-align: center;
			}

			table {
				border-collapse: separate;
				border-spacing: 10px;
			}

			.columntd {
				text-align: right;
				font: bold normal 18px 微软雅黑;
			}
		</style>
		<script type="application/javascript">
			function createFile() {
				var formData = $("#myForm").serialize();
				$.ajax({
					url: "/generate",
					type: "post",
					data: formData,
					dataType: "json",
					success: function (data) {
						if (data) {
							alert("生成成功!");
						} else {
							alert("生成失败!");
						}
					}
				});
			}
		</script>
	</head>
	<body>
		<div>
			<form id="myForm">
				<table>
					<caption>
						<h1>Stupid 代码生成器</h1>
						<span>【MySQL 版 v1.0.0】</span>
					</caption>
					<tr>
						<td class="columntd">
							<span>数据库 IP 地址:</span>
						</td>
						<td>
							<input type="text" id="dbIP" name="dbIP" class="form-control" style="width: 300px;" placeholder="请填写您的数据库连接 IP 地址"/>
						</td>
					</tr>
					<tr>
						<td class="columntd">
							<span>数据库连接端口号:</span>
						</td>
						<td>
							<input type="text" id="dbPort" name="dbPort" class="form-control" style="width: 300px;" placeholder="请填写您的数据库连接端口号"/>
						</td>
					</tr>
					<tr>
						<td class="columntd">
							<span>连接数据库名:</span>
						</td>
						<td>
							<input type="text" id="dbName" name="dbName" class="form-control" style="width: 300px;" placeholder="请填写您要连接的数据库名"/>
						</td>
					</tr>
					<tr>
						<td class="columntd">
							<span>数据库登录用户名:</span>
						</td>
						<td>
							<input type="text" id="dbUser" name="dbUser" class="form-control" style="width: 300px;" placeholder="请填写您的数据库登录用户名"/>
						</td>
					</tr>
					<tr>
						<td class="columntd">
							<span>数据库登录密码:</span>
						</td>
						<td>
							<input type="text" id="dbPassword" name="dbPassword" class="form-control" style="width: 300px;" placeholder="请填写您的数据库登录密码"/>
						</td>
					</tr>
					<tr>
						<td class="columntd">
							<span>生成文件夹路径:</span>
						</td>
						<td>
							<input type="text" id="outFolderPath" name="outFolderPath" class="form-control" style="width: 300px;" placeholder="请填写生成文件的存放路径"/>
						</td>
					</tr>
					<tr>
						<td colspan="2" class="columntd">
							<a href="javascript:createFile();" class="btn btn-success">
								<i class="fa fa-check"></i>&nbsp;
								<span>生成文件</span>
							</a>
						</td>
					</tr>
				</table>
			</form>
		</div>
	</body>
</html>

标签:return,String,generator,colProp,import,public
来源: https://blog.csdn.net/m0_60322480/article/details/121779358

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有