All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.jyoghurt.generator.java.CreateBean Maven / Gradle / Ivy

The newest version!
package com.github.jyoghurt.generator.java;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class CreateBean {
	static String url;
	static String username;
	static String password;
	static String rt = "\r\n\t";
	static String dbInstance;
	//modify by limiao 20160307 如下字段不生成到domain
//	private static final List ingoreColumns = Arrays.asList("createDateTime", "modifyDateTime", "operatorId",
//			"operatorName");
	private static final List ingoreColumns = Arrays.asList("founderId", "founderName", "modifierId",
			"modifierName","deleteFlag","createDateTime","modifyDateTime");
	String SQLTables = "show tables";
	static {
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@SuppressWarnings("static-access")
	public void setMysqlInfo(String url, String username, String password, String dbInstance) {
		this.url = url;
		this.username = username;
		this.password = password;
		this.dbInstance = dbInstance;
	}

	public Connection getConnection() throws SQLException {
		System.out.println(url);
		return DriverManager.getConnection(url, username, password);
	}

	public List getTables() throws SQLException {
		Connection con = this.getConnection();
		PreparedStatement ps = con.prepareStatement(SQLTables);
		ResultSet rs = ps.executeQuery();
		List list = new ArrayList();
		while (rs.next()) {
			String tableName = rs.getString(1);
			list.add(tableName);
		}
		rs.close();
		ps.close();
		con.close();
		return list;
	}


	public List getColumnDatas(String tableName) throws SQLException {
		String SQLColumns = "SELECT distinct COLUMN_NAME, DATA_TYPE, COLUMN_COMMENT,COLUMN_KEY,CHARACTER_MAXIMUM_LENGTH" +
				",IS_NULLABLE  FROM information_schema.columns WHERE table_name =  '" + tableName + "' " + "and table_schema='" + dbInstance + "' ";
		Connection con = this.getConnection();
		PreparedStatement ps = con.prepareStatement(SQLColumns);
		List columnList = new ArrayList();
		ResultSet rs = ps.executeQuery();
		StringBuffer str = new StringBuffer();
		StringBuffer getset = new StringBuffer();
		while (rs.next()) {
			String name = rs.getString(1);
			String type = rs.getString(2);
			String comment = rs.getString(3);
			String priKey = rs.getString(4);
			Long length=rs.getLong(5);
			String isNullable= rs.getString(6);
			type = this.getType(type);
			if (ingoreColumns.contains(name)) {
				continue;
			}
			ColumnData cd = new ColumnData();
			cd.setColumnName(name);
			cd.setDataType(type);
			cd.setColumnComment(comment);
			cd.setColumnNameContainEntity("${entity." + name + " }");
			cd.setIsPriKey("PRI".equals(priKey));
			cd.setColumnLength(length);
			cd.setIsNullable("NO".equals(isNullable));
			columnList.add(cd);
		}
		argv = str.toString();
		method = getset.toString();
		rs.close();
		ps.close();
		con.close();
		return columnList;
	}

	private String method;
	private String argv;


	public String getBeanFeilds(String tableName) throws SQLException {
		List dataList = getColumnDatas(tableName);
		StringBuffer str = new StringBuffer();
		StringBuffer getset = new StringBuffer();
		for (ColumnData d : dataList) {

			String name = getTablesColumnToAttributeName(d.getColumnName());
			String type = d.getDataType();
			String comment = d.getColumnComment();
			// type=this.getType(type);
			String maxChar = name.substring(0, 1).toUpperCase();
			str.append("\r\n\t/** \r\n\t * ").append(comment).append("  \r\n\t */");
			if (d.getIsPriKey()) {
				str.append("\r\n\[email protected]");
			}
			str.append("\r\n\t").append("private ").append(type + " ").append(name).append(";");
			String method = maxChar + name.substring(1, name.length());
			getset.append("\r\n\t\r\n\t").append("public ").append(type + " ").append("get" + method + "() {\r\n\t");
			getset.append("    return this.").append(name).append(";\r\n\t}");
			getset.append("\r\n\t\r\n\t").append("public ").append(getTablesNameToClassName(tableName)).append(" ")
					.append("set" + method + "(" + type + " " + name + ") {\r\n\t");
			getset.append("\tthis.").append(name).append(" = ").append(name).append(";\r\n\t\treturn this;\r\n\t}");
		}
		argv = str.toString();
		method = getset.toString();
		return argv + method;
	}

	public String getType(String type) {
		switch (type = type.toLowerCase()) {
			case "char":
			case "varchar":
			case "text":
				return "String";
			case "int":
				return "Integer";
			case "bigint":
				return "java.math.BigInteger";
			case "decimal":
				return "java.math.BigDecimal";
			case "timestamp":
			case "date":
			case "datetime":
				// return "java.sql.Timestamp";
				return "java.util.Date";
			case "float":
				return "Float";
			case "double":
				return "Double";
			case "tinyint":
				return "Boolean";
			default:
				return null;
		}
	}

	public void getPackage(int type, String createPath, String content, String packageName, String className,
			String extendsClassName, String... importName) throws Exception {
		if (null == packageName) {
			packageName = "";
		}
		StringBuffer sb = new StringBuffer();
		sb.append("package ").append(packageName).append(";\r\n");
		sb.append("\r\n");
		for (int i = 0; i < importName.length; i++) {
			sb.append("import ").append(importName[i]).append(";\r\n");
		}
		sb.append("\r\n");
		sb.append("/**\r\n *  entity. @author wolf Date:"
				+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "\r\n */");
		sb.append("\r\n");
		sb.append("\r\npublic class ").append(className);
		if (null != extendsClassName) {
			sb.append(" extends ").append(extendsClassName);
		}
		if (type == 1) { // bean
			sb.append(" ").append("implements java.io.Serializable {\r\n");
		} else {
			sb.append(" {\r\n");
		}
		sb.append("\r\n\t");
		sb.append("private static final long serialVersionUID = 1L;\r\n\t");
		String temp = className.substring(0, 1).toLowerCase();
		temp += className.substring(1, className.length());
		if (type == 1) {
			sb.append("private " + className + " " + temp + "; // entity ");
		}
		sb.append(content);
		sb.append("\r\n}");
		System.out.println(sb.toString());
		this.createFile(createPath, "", sb.toString());
	}

	public String getTablesNameToClassName(String tableName) {
		String[] split = tableName.split("_");
		if (split.length > 1) {
			StringBuffer sb = new StringBuffer();
			for (int i = 0; i < split.length; i++) {
				String tempTableName = split[i].substring(0, 1).toUpperCase()
						+ split[i].substring(1).toLowerCase();
				sb.append(tempTableName);
			}
			System.out.println(sb.toString());
			return sb.toString();
		} else {
			String tempTables = split[0].substring(0, 1).toUpperCase() + split[0].substring(1, split[0].length());
			return tempTables;
		}
	}


	public String getTablesColumnToAttributeName(String columnName) {
		String[] split = columnName.split("_");
		if (split.length > 1) {
			StringBuffer sb = new StringBuffer();
			for (int i = 0; i < split.length; i++) {
				String tempTableName = "";
				if (i == 0) {
					tempTableName = split[i].substring(0, 1).toLowerCase() + split[i].substring(1, split[i].length());
				} else {
					tempTableName = split[i].substring(0, 1).toUpperCase() + split[i].substring(1, split[i].length());
				}
				sb.append(tempTableName);
			}
			System.out.println(sb.toString());
			return sb.toString();
		} else {
			String tempTables = split[0].substring(0, 1).toLowerCase() + split[0].substring(1, split[0].length());
			return tempTables;
		}
	}


	public void createFile(String path, String fileName, String str) throws IOException {
		FileWriter writer = new FileWriter(new File(path + fileName));
		writer.write(new String(str.getBytes("utf-8")));
		writer.flush();
		writer.close();
	}


	static String selectStr = "select ";
	static String from = " from ";

	public Map getAutoCreateSql(String tableName) throws Exception {
		Map sqlMap = new HashMap();
		List columnDatas = getColumnDatas(tableName);
		String columns = this.getColumnSplit(columnDatas);
		String[] columnList = getColumnList(columns); // 表所有字段
		String columnFields = getColumnFields(columns); // 表所有字段 按","隔开
		String insert = "insert into " + tableName + "(" + columns.replaceAll("\\|", ",") + ")\r\n values(#{"
				+ columns.replaceAll("\\|", "},#{") + "})";
		String update = getUpdateSql(tableName, columnList);
		String updateSelective = getUpdateSelectiveSql(tableName, columnDatas);
		String selectById = getSelectByIdSql(tableName, columnList);
		String delete = getDeleteSql(tableName, columnList);
		String batchDelete = getBatchDeleteSql(tableName, columnList);
		sqlMap.put("columnList", columnList);
		sqlMap.put("columnFields", columnFields);
		sqlMap.put("insert", insert);
		sqlMap.put("update", update);
		sqlMap.put("delete", delete);
		sqlMap.put("updateSelective", updateSelective);
		sqlMap.put("selectById", selectById);
		sqlMap.put("batchDelete", batchDelete);
		return sqlMap;
	}


	public String getDeleteSql(String tableName, String[] columnsList) throws SQLException {
		StringBuffer sb = new StringBuffer();
		sb.append("delete ");
		sb.append("\t from ").append(tableName).append(" where ");
		sb.append(columnsList[0]).append(" = #{").append(columnsList[0]).append("}");
		return sb.toString();
	}


	public String getBatchDeleteSql(String tableName, String[] columnsList) throws SQLException {
		StringBuffer sb = new StringBuffer();
		sb.append("delete ");
		sb.append("\t from ").append(tableName).append(" where ");
		sb.append(columnsList[0]).append(" in ");
		return sb.toString();
	}


	public String getSelectByIdSql(String tableName, String[] columnsList) throws SQLException {
		StringBuffer sb = new StringBuffer();
		sb.append("select  \r\n");
		sb.append("\t from ").append(tableName).append(" where ");
		sb.append(columnsList[0]).append(" = #{").append(columnsList[0]).append("}");
		return sb.toString();
	}


	public String getColumnFields(String columns) throws SQLException {
		String fields = columns;
		if (fields != null && !"".equals(fields)) {
			fields = fields.replaceAll("[|]", ",");
		}
		return fields;
	}


	public String[] getColumnList(String columns) throws SQLException {
		String[] columnList = columns.split("[|]");
		return columnList;
	}


	public String getUpdateSql(String tableName, String[] columnsList) throws SQLException {
		StringBuffer sb = new StringBuffer();

		for (int i = 1; i < columnsList.length; i++) {
			String column = columnsList[i];
			sb.append(column + "=#{" + column + "}");
			// 最后一个字段不需要","
			if ((i + 1) < columnsList.length) {
				sb.append(",");
			}
		}
		String update = "update " + tableName + " set " + sb.toString() + " where " + columnsList[0] + "=#{"
				+ columnsList[0] + "}";
		return update;
	}

	public String getUpdateSelectiveSql(String tableName, List columnList) throws SQLException {
		StringBuffer sb = new StringBuffer();
		ColumnData cd = columnList.get(0); // 获取第一条记录,主键
		sb.append("\t\r\n");
		for (int i = 1; i < columnList.size(); i++) {
			ColumnData data = columnList.get(i);
			String columnName = data.getColumnName();
			sb.append("\t\r\n\t\t");
			sb.append(columnName + "=#{" + columnName + "},\r\n");
			sb.append("\t\r\n");
		}
		sb.append("\t");
		String update = "update " + tableName + " set \r\n" + sb.toString() + " where " + cd.getColumnName() + "=#{"
				+ cd.getColumnName() + "}";
		return update;
	}


	public String getColumnSplit(List columnList) throws SQLException {
		StringBuffer commonColumns = new StringBuffer();
		for (ColumnData data : columnList) {
			commonColumns.append(data.getColumnName() + "|");
		}
		return commonColumns.delete(commonColumns.length() - 1, commonColumns.length()).toString();
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy