private static List <JlFieldDescription> GetDatabaseColumns_MySql(string connectionString, string tableName) { var dbName = connectionString.Split(new[] { "database=" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(';')[0]; var sql = @" SELECT COLUMN_NAME Name, COLUMN_COMMENT Description, DATA_TYPE DbType, IS_NULLABLE IsNullable, CHARACTER_MAXIMUM_LENGTH Length, Extra, COLUMN_KEY FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '" + dbName + "' AND TABLE_NAME like '{0}'"; sql = string.Format(sql, tableName); var dataTable = new DataTable(); JlDatabase.Fill(connectionString, sql, dataTable, databaseType: JlDatabaseType.MySql); return(dataTable.AsEnumerable().Select(row => new JlFieldDescription() { Name = JlString.ReplaceUnderline(row["Name"].ToString()), DbType = row["DbType"].ToString(), Length = JlConvert.TryToInt(row["Length"]), IsNullable = JlConvert.TryToBool(row["IsNullable"].ToString().ToLower() == "yes"), IsIdentity = JlConvert.TryToBool(row["Extra"].ToString().Contains("auto_increment")), ColumnKey = row["COLUMN_KEY"].ToString(), Description = HttpUtility.HtmlEncode(row["Description"].ToString()) }).ToList()); }
//Dao通用代码 private static string DaoBaseCode(CodeMakerGeneratCodeOut inModel, string content = null) { var result = new StringBuilder(); result.AppendLine(string.Format(@"package {0}; import java.io.IOException; import java.util.*; import java.math.*; import javax.sql.rowset.CachedRowSet; import {2}.{1}; import com.Fang.framework.*; public class {1}Dao{{ {3} }}", string.Format(inModel.CodeMakerGeneratCodeIn.Package, "dao"), JlString.ToUpperFirst(JlString.ReplaceUnderline(inModel.CodeMakerGeneratCodeIn.ClassNameResult)), string.Format(inModel.CodeMakerGeneratCodeIn.Package, "model"), content)); return(result.ToString()); }
public string RefEntity(CodeMakerGeneratCodeOut inModel) { var result = new StringBuilder(); var getterAndSetter = new StringBuilder(); result.AppendLine(string.Format(@"package {0}; import java.util.*; import java.math.*; public class {1} {{ ", string.Format(inModel.CodeMakerGeneratCodeIn.Package, "model"), JlString.ToUpperFirst(JlString.ReplaceUnderline(inModel.CodeMakerGeneratCodeIn.ClassNameResult)))); foreach (var f in inModel.FieldDescriptions) { if (!string.IsNullOrEmpty(f.Description)) { result.AppendLine( @" /** * " + f.Description.Replace("\n", " ") + @" */"); } result.AppendLine(@" private " + JlDbTypeMap.Map4J(f.DbType, true, inModel.databaseType) + " " + JlString.ToLowerFirst(f.SimpleName) + @"; "); getterAndSetter.AppendLine(string.Format(@" public {2} get{1}() {{ return {0}; }} public void set{1}({2} {0}) {{ this.{0} = {0}; }} ", JlString.ToLowerFirst(f.SimpleName), JlString.ToUpperFirst(f.SimpleName), JlDbTypeMap.Map4J(f.DbType, true, inModel.databaseType))); } result.Append(getterAndSetter); result.AppendLine("}"); return(result.ToString()); }
private static List <JlFieldDescription> GetDatabaseColumns_SqlServer(string connectionString, string tableName) { var sql = @" SELECT Name=C.name, DbType=T.name, PrimaryKey=ISNULL(IDX.PrimaryKey,N''), IsIdentity=CASE WHEN C.is_identity=1 THEN N'true'ELSE N'false' END, Length=C.max_length, IsNullable=CASE WHEN C.is_nullable=1 THEN N'true'ELSE N'false' END, Description=ISNULL(PFD.[value],N'') FROM sys.columns C INNER JOIN sys.objects O ON C.[object_id]=O.[object_id] AND O.type='U' AND O.is_ms_shipped=0 INNER JOIN sys.types T ON C.user_type_id=T.user_type_id LEFT JOIN sys.default_constraints D ON C.[object_id]=D.parent_object_id AND C.column_id=D.parent_column_id AND C.default_object_id=D.[object_id] LEFT JOIN sys.extended_properties PFD ON PFD.class=1 AND C.[object_id]=PFD.major_id AND C.column_id=PFD.minor_id -- AND PFD.name='Caption' -- 字段说明对应的描述名称(一个字段可以添加多个不同name的描述) LEFT JOIN sys.extended_properties PTB ON PTB.class=1 AND PTB.minor_id=0 AND C.[object_id]=PTB.major_id -- AND PFD.name='Caption' -- 表说明对应的描述名称(一个表可以添加多个不同name的描述) LEFT JOIN -- 索引及主键信息 ( SELECT IDXC.[object_id], IDXC.column_id, Sort=CASE INDEXKEY_PROPERTY(IDXC.[object_id],IDXC.index_id,IDXC.index_column_id,'IsDescending') WHEN 1 THEN 'DESC' WHEN 0 THEN 'ASC' ELSE '' END, PrimaryKey=CASE WHEN IDX.is_primary_key=1 THEN N'PRI'ELSE N'' END, IndexName=IDX.Name FROM sys.indexes IDX INNER JOIN sys.index_columns IDXC ON IDX.[object_id]=IDXC.[object_id] AND IDX.index_id=IDXC.index_id LEFT JOIN sys.key_constraints KC ON IDX.[object_id]=KC.[parent_object_id] AND IDX.index_id=KC.unique_index_id INNER JOIN -- 对于一个列包含多个索引的情况,只显示第1个索引信息 ( SELECT [object_id], Column_id, index_id=MIN(index_id) FROM sys.index_columns GROUP BY [object_id], Column_id ) IDXCUQ ON IDXC.[object_id]=IDXCUQ.[object_id] AND IDXC.Column_id=IDXCUQ.Column_id AND IDXC.index_id=IDXCUQ.index_id ) IDX ON C.[object_id]=IDX.[object_id] AND C.column_id=IDX.column_id where O.name = '{0}' order by c.column_id"; sql = string.Format(sql, tableName); var dataTable = new DataTable(); JlDatabase.Fill(connectionString, sql, dataTable); return(dataTable.AsEnumerable().Select(row => new JlFieldDescription() { Name = JlString.ReplaceUnderline(row["Name"].ToString()), DbType = row["DbType"].ToString(), Length = JlConvert.TryToInt(row["Length"]), IsNullable = JlConvert.TryToBool(row["IsNullable"].ToString()), IsIdentity = JlConvert.TryToBool(row["IsIdentity"].ToString()), Description = HttpUtility.HtmlEncode(row["Description"].ToString()), ColumnKey = row["PrimaryKey"].ToString() }).ToList()); }