com.janeluo.jfinalplus.kit.DDLKit Maven / Gradle / Ivy
/**
* 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