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

com.janeluo.jfinalplus.kit.DDLKit Maven / Gradle / Ivy

There is a newer version: 2.2.0.r3
Show newest version
/**
 * Copyright (c) 2015-2016, BruceZCQ ([email protected]).
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.janeluo.jfinalplus.kit;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

/**
 * @author BruceZCQ
 *
 */
final public class DDLKit {

	public static final String BIGINT = "bigint";
	public static final String VARCHAR = "varchar";
	public static final String TEXT = "text";
	public static final String INT = "int";
	public static final String TINYINT = "tinyint";

	public static class Table{
		// 表名
		private String tableName = null;
		// 表注释
		private String comment = null;
		// 表的所有列
		HashMap columnsMap = new HashMap();
		// 表的所有primary key
		private List primaryKeys = new ArrayList();
		// 表的所有 unique Key
		private List uniqueKeys = new ArrayList();

		private Table(String tableName, String comment){
			this.tableName = tableName;
			if (!comment.startsWith("`")) {
				comment = "'" + comment;
			}
			if (!comment.endsWith("`")) {
				comment += "'";
			}
			this.comment = comment;
		}

		/**
		 * 添加一列到表中
		 * @param column , 列
		 * @return 返回添加列之后的Table
		 */
		public Table addColumn(Column column){
			if (null == column) {
				return this;
			}
			if (!this.columnsMap.containsKey(column.columnName)) {
				this.columnsMap.put(column.columnName, column);
			}
			if (column.primaryKey) {
				this.primaryKeys.add(column);
			}
			if (column.uniqueKey) {
				this.uniqueKeys.add(column);
			}
			return this;
		}

		/**
		 * 添加Columns
		 * @param columns
		 * @return
		 */
		public Table addColumns(List columns){
			if (null == columns) {
				return this;
			}

			for (Column column : columns) {
				this.addColumn(column);
			}
			return this;
		}

		/**
		 * 生成DDL
		 * @return ddl
		 */
		public String ddl(){
			StringBuilder sqlBuilder = new StringBuilder();
			//start ddl
			sqlBuilder.append("CREATE TABLE `").append(this.tableName).append("` (\n");
			sqlBuilder.append("`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '索引',\n");
			// all columns
			Iterator keyIterator = this.columnsMap.keySet().iterator();
			while (keyIterator.hasNext()) {
				Object key = keyIterator.next();
				sqlBuilder.append(this.columnsMap.get(key).ddl())
						.append(",\n");
			}
			// all primary keys
			sqlBuilder.append("PRIMARY KEY (`id`");
			for (Column column : this.primaryKeys) {
				sqlBuilder.append(",").append(column.columnName);
			}
			sqlBuilder.append(")");
			// all unique keys
			for (Column column : this.uniqueKeys) {
				sqlBuilder.append(",\nUNIQUE KEY").append(column.columnName).append("(").append(column.columnName).append(")");
			}
			//end ddl
			sqlBuilder.append("\n) COMMENT=").append(this.comment).append(";");
			return sqlBuilder.toString();
		}
	}

	public static class Column{
		// 列名
		private String columnName = null;
		// 列类型
		private String columnType = null;
		// 列大小
		private int columnSize = 10;
		// 默认值
		private StringBuilder defaultValue = new StringBuilder();
		// 列注释
		private String comment = null;
		// 是否primarykey
		private boolean primaryKey = false;
		// 是否uniquekey
		private boolean uniqueKey = false;

		/**
		 * 初始化Column
		 * @param columnName 列名
		 * @param columnType 列类型
		 * @param comment 列注释
		 * @param columnSize 列大小
		 * @param defaultValue 默认值
		 * @param primaryKey 是否为primary key
		 * @param uniqueKey 是否为unique key
		 */
		public Column(String columnName, String columnType, String comment,
				int columnSize, String defaultValue,
				boolean primaryKey, boolean uniqueKey){
			if (!columnName.startsWith("`")) {
				columnName = "`" + columnName;
			}
			if (!columnName.endsWith("`")) {
				columnName += "`";
			}
			this.columnName = columnName;
			this.columnType = columnType;

			if (null == defaultValue) {
				this.defaultValue.append("DEFAULT NULL");
			}else{
				String value = ("".equals(defaultValue)||"''".equals(defaultValue))?"''":"'"+defaultValue+"'";
				this.defaultValue.append("NOT NULL DEFAULT ").append(value);
			}

			if (!comment.startsWith("'")) {
				comment = "'" + comment;
			}
			if (!comment.endsWith("'")) {
				comment += "'";
			}
			this.comment = comment;
			this.columnSize = columnSize;
			this.primaryKey = primaryKey;
			this.uniqueKey = uniqueKey;
		}

		/**
		 * 生成Primary Key
		 * @param columnName 列名
		 * @param columnType 列类型
		 * @param columnSize 列的大小
		 * @return
		 */
		public Column primaryKeyColumn(String columnName, String columnType, String comment, int columnSize, String defalutValue){
			return (new Column(columnName, columnType, comment, columnSize, defalutValue, true, false));
		}

		/**
		 * 生成 unique Key
		 * @param columnName 列名
		 * @param columnType 列类型
		 * @param columnSize 列的大小
		 * @return
		 */
		public Column uniqueKeyColumn(String columnName, String columnType, String comment, int columnSize, String defalutValue){
			return (new Column(columnName, columnType, comment, columnSize, defalutValue, false, true));
		}

		/**
		 * column DDL
		 * @return
		 */
		public String ddl(){
			return new StringBuilder()
					.append(this.columnName).append(" ").append(this.columnType)
					.append("(").append(this.columnSize).append(") ").append(this.defaultValue)
					.append(" COMMENT ").append(this.comment).toString();
		}
	}

	public static Table createTable(String tableName, String comment){
		return (new Table(tableName, comment));
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy