From 1871d2b624e1c33d185fd5239799d3941f5e36f8 Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期四, 20 十月 2022 14:38:22 +0800 Subject: [PATCH] 1 --- JavaCode/FrmMyBatisPlus.cs | 276 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 272 insertions(+), 4 deletions(-) diff --git a/JavaCode/FrmMyBatisPlus.cs b/JavaCode/FrmMyBatisPlus.cs index 9958b53..4abbf6c 100644 --- a/JavaCode/FrmMyBatisPlus.cs +++ b/JavaCode/FrmMyBatisPlus.cs @@ -3,9 +3,12 @@ using System.Collections.Generic; using System.ComponentModel; using System.Data; +using System.Diagnostics; using System.Drawing; +using System.IO; using System.Linq; using System.Text; +using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Windows.Forms; @@ -31,7 +34,8 @@ } #endregion - // 135502,69701 29257,20582 + + #region 鏌ヨ琛ㄧ粨鏋勶細135502,69701 29257,20582 private void btnReadTab_Click(object sender, EventArgs e) { try @@ -39,7 +43,7 @@ string tabName = this.txtTabPre.Text.Trim(); string tabFilter = string.IsNullOrEmpty(tabName) ? "" : string.Format("and c.relname like '{0}%'", tabName); - string sql = string.Format("select c.relname as \"tab\", cast(obj_description(c.oid) as varchar) as \"desc\", a.attnum as \"num\", a.attname as \"col\",concat_ws('', t.typname, SUBSTRING(format_type(a.atttypid, a.atttypmod) from '(.*)')) as \"type\", d.description as \"bak\" from pg_attribute a left join pg_description d on d.objoid = a.attrelid and d.objsubid = a.attnum left join pg_class c on a.attrelid = c.oid left join pg_type t on a.atttypid = t.oid where a.attnum >= 0 and reltype>0 and relnamespace in ({0}) {1} order by c.relname desc, a.attnum asc", this.txtNS.Text.Trim(), tabFilter); + string sql = string.Format("select c.relname \"tab\", cast(obj_description(c.oid) as varchar) \"desc\", a.attnum \"num\", a.attname \"col\", t.typname \"type\", d.description \"bak\" from pg_attribute a left join pg_description d on d.objoid = a.attrelid and d.objsubid = a.attnum left join pg_class c on a.attrelid = c.oid left join pg_type t on a.atttypid = t.oid where a.attnum >= 0 and reltype>0 and relnamespace in ({0}) {1} order by c.relname desc, a.attnum asc", this.txtNS.Text.Trim(), tabFilter); DataTable dt = _dbHelper.GetDataTable(sql, null); _list = ModelHandler.FillModel<TabInfo>(dt); @@ -102,10 +106,273 @@ this.dgvTab.CurrentCell = this.dgvTab.Rows[1].Cells[0]; } } + #endregion - private void btnGenerate_Click(object sender, EventArgs e) + #region 鎸夐挳浜嬩欢 + private void btnGeneMapper_Click(object sender, EventArgs e) { - // + try + { + string path = Path.Combine(baseDir, "BsGenerate\\Mapper"); + + List<string> names = GetTabList(); + foreach (string name in names) + { + List<TabInfo> tabs = GetTabInfo(name); + GenerateMapper(path, name, tabs); + } + + OpenFolder(path); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message); + } + } + + private void btnGeneEntity_Click(object sender, EventArgs e) + { + try + { + string path = Path.Combine(baseDir, "BsGenerate\\Entity"); + + List<string> names = GetTabList(); + foreach (string name in names) + { + List<TabInfo> tabs = GetTabInfo(name); + GenerateEntity(path, name, tabs); + } + + OpenFolder(path); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message); + } + } + + private void btnGeneAll_Click(object sender, EventArgs e) + { + try + { + string mapperPath = Path.Combine(baseDir, "BsGenerate\\Mapper"); + string entityPath = Path.Combine(baseDir, "BsGenerate\\Entity"); + + List<string> names = GetTabList(); + foreach (string name in names) + { + List<TabInfo> tabs = GetTabInfo(name); + GenerateMapper(mapperPath, name, tabs); + GenerateEntity(entityPath, name, tabs); + } + + string path = Path.Combine(baseDir, "BsGenerate"); + OpenFolder(path); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message); + } + } + #endregion + + #region 鐢熸垚 Mapper + private void GenerateMapper(string path, string name, List<TabInfo> tabs) + { + if (!Directory.Exists(path)) Directory.CreateDirectory(path); + + string tabName = this.txtTabNS.Text.Trim() + name; + string shortName = NameConvert(name, true); + + string mapperNS = this.txtMapperNS.Text.Trim(); + string mapperName = shortName + "Mapper"; + + string entityNS = this.txtEntityNS.Text.Trim(); + string entityName = shortName + "Entity"; + + string bak = string.IsNullOrWhiteSpace(tabs[0].desc) ? shortName : tabs[0].desc.Replace("琛�", ""); + + string wkt = this.HasGeom(tabs) ? + " /**\r\n" + + " * 鏍规嵁ID鏌ヨWKT\r\n" + + " *\r\n" + + " * @param gid\r\n" + + " * @return\r\n" + + " */\r\n" + + " @Select(\"select st_astext(geom) geom from " + tabName + " where gid = #{gid}\")\r\n" + + " String selectWktById(@Param(\"gid\") Integer gid);" : ""; + + string xml = File.ReadAllText(Path.Combine(baseDir, "BsTemplate\\Mapper.java")); + xml = xml + .Replace("{mapperNS}", mapperNS) + .Replace("{mapperName}", mapperName) + .Replace("{entityNS}", entityNS) + .Replace("{entityName}", entityName) + .Replace("{wkt}", wkt) + .Replace("{bak}", bak); + + string fileName = shortName + "Mapper.java"; + File.WriteAllText(Path.Combine(path, fileName), xml); + } + #endregion + + #region 鐢熸垚 Entity + private void GenerateEntity(string path, string name, List<TabInfo> tabs) + { + if (!Directory.Exists(path)) Directory.CreateDirectory(path); + + string tabName = this.txtTabNS.Text.Trim() + name; + string shortName = NameConvert(name, true); + + string entityNS = this.txtEntityNS.Text.Trim(); + string entityName = shortName + "Entity"; + + string bak = string.IsNullOrWhiteSpace(tabs[0].desc) ? shortName : tabs[0].desc.Replace("琛�", ""); + long uid = (long)Math.Floor((new Random()).NextDouble() * 1000000000000000000D); + + string xml = File.ReadAllText(Path.Combine(baseDir, "BsTemplate\\Entity.java")); + xml = xml + .Replace("{entityNS}", entityNS) + .Replace("{entityName}", entityName) + .Replace("{bak}", bak) + .Replace("{tabName}", tabName) + .Replace("{uid}", uid.ToString()); + + StringBuilder sb = new StringBuilder(); + foreach (TabInfo ti in tabs) + { + string type = GetJavaType(ti); + if (ti.col == "gid") sb.Append("\r\n @TableId(type = IdType.AUTO)"); + if (ti.col == "geom") sb.Append("\r\n @TableField(select = false)"); + if (ti.col == "class") + { + sb.Append("\r\n @TableField(value = \"class\")"); + ti.col = "clazz"; + } + + string colName = NameConvert(ti.col, false); + sb.Append("\r\n private " + type + " " + colName + ";\r\n"); + } + sb.Append("\r\n public " + entityName + "() {\r\n }\r\n"); + + foreach (TabInfo ti in tabs) + { + string type = GetJavaType(ti); + string col1 = NameConvert(ti.col, true); + string col2 = NameConvert(ti.col, false); + + sb.Append("\r\n public " + type + " get" + col1 + "() {\r\n return " + col2 + ";\r\n }\r\n"); + sb.Append("\r\n public void set" + col1 + "(" + type + " " + col2 + ") {\r\n this." + col2 + " = " + col2 + ";\r\n }\r\n"); + } + sb.Append("}\r\n"); + sb.Insert(0, xml); + + string fileName = shortName + "Entity.java"; + File.WriteAllText(Path.Combine(path, fileName), sb.ToString()); + } + #endregion + + #region 鍏叡鏂规硶 + private List<string> GetTabList() + { + List<string> list = new List<string>(); + for (int i = 0, c = this.tabList.SelectedItems.Count; i < c; i++) + { + string item = this.tabList.SelectedItems[i] as String; + if (!string.IsNullOrEmpty(item)) + { + list.Add(item); + } + } + + return list; + } + + private List<TabInfo> GetTabInfo(string name) + { + List<TabInfo> tabs = (from p in _list where p.tab == name orderby p.num select p).ToList<TabInfo>(); + + return tabs; + } + + private static string NameConvert(string name, bool firstUpper) + { + string[] strs = name.Split(new char[] { '_' }); + + string str = ""; + for (int i = 0, c = strs.Length; i < c; i++) + { + if (i == 0 && !firstUpper) + { + str += strs[i]; + continue; + } + str += ToUpperFirst(strs[i]); + } + + return str; + } + + public static string ToUpperFirst(string str) + { + return Regex.Replace(str, @"^\w", t => t.Value.ToUpper()); + } + + private string GetJavaType(TabInfo ti) + { + switch (ti.type) + { + case "timestamp": + return "Timestamp"; + case "float4": // float + return "Float"; + case "float8": // double + return "Double"; + case "bool": // boolean + return "Boolean"; + case "numeric": + return "BigDecimal"; + case "int8": // long + return "Long"; + case "int2": + case "int4": // int + return "Integer"; + default: + return "String"; + } + } + + private bool HasGeom(List<TabInfo> tabs) + { + foreach (TabInfo ti in tabs) + { + if (ti.col == "geom") return true; + } + + return false; + } + + private static void OpenFolder(string folderPath) + { + if (string.IsNullOrEmpty(folderPath)) return; + + Process process = new Process(); + ProcessStartInfo psi = new ProcessStartInfo("Explorer.exe"); + psi.Arguments = folderPath; + process.StartInfo = psi; + + try + { + process.Start(); + } + catch (Exception ex) + { + throw ex; + } + finally + { + process.Close(); + } } private String QueryPrimaryKey(string tab) @@ -116,5 +383,6 @@ return obj == null ? null : obj.ToString(); } + #endregion } } -- Gitblit v1.9.3