基於SqlSugar4編寫一個可視化代碼生成器


在開發過程中免不了創建實體類,字段少的表可以手動編寫,但是字段多還用手動創建的話不免有些浪費時間,假如一張表有100多個字段,手寫有些不現實。

這時我們會借助一些工具,如:動軟代碼生成器、各種ORM框架自帶的代碼生成器等等,都可以使用。

我們現在就基於SqlSugar(ORM框架)自己動手制造一個輪子,以SqlServer為例。我們先看一下成品效果,

 

使用流程:

  配置好數據庫鏈接,點擊【鏈接數據庫】獲取指定服務器上的數據庫名,點擊數據庫名,動態獲取數據庫下面的所有表,

點擊數據表,如果生成過了的會自動獲取生成的實體,如果沒有生成過,點擊【生成實體】自動生成顯示,直接復制即可使用。

注:server=xxx.xxx.x.xxx這里如果是本地沒有配置的話直接server=.即可。

 

   

開發環境:

編譯器:Visual Studio 2017

運行環境:windows7 x64

數據庫:SqlServer2012 

 

代碼實現步驟:

一、創建一個ASP.NET Web應用,命名為GenerateEntity

 

 

  

  

二、應用SqlSugar動態鏈接庫

 

  

三、編寫代碼

這里分為前端和后端,前端頁面展示,后端后台邏輯(注:由於我們是代碼展示,所以就不搞三層架構、工廠模式這些,直接在控制器中完成,有需要的同學可以根據項目需求進行更改

內部實現邏輯:

  • 在頁面上配置數據庫鏈接,點擊【鏈接數據庫】按鈕獲取指定數據庫的所有數據庫名顯示在左邊;
  • 點擊左邊的數據庫名稱,動態獲取指定數據庫下面所有的表顯示出來;
  • 點擊表名,生成過的就顯示生成的實體,沒有的則點擊【生成實體】按鈕生成(支持生成單表和數據庫表全部生成);

這里我直接貼出代碼,直接拷貝即可使用:

前端html頁面

  1 @{
  2     ViewBag.Title = "Home Page";
  3 }
  4 
  5 <script src="~/Scripts/jquery-3.3.1.js"></script>
  6 
  7 <div style="margin-top:10px;font-family:'Microsoft YaHei';font-size:18px; ">
  8     <div style="height:100px;width:100%;border:1px solid gray;padding:10px">
  9         <div>
 10             <span>鏈接數據庫:</span>
 11             <input style="width:800px;max-width:800px;" id="Link" value="server=xxx.xxx.x.xxx;uid=sa;pwd=xxx" />
 12             <a href="javascript:void(0)" onclick="LinkServer()">鏈接數據庫</a>
 13         </div>
 14         <div style="margin-top:10px">
 15             <span>數據庫名:</span>
 16             <input style="color:red;font-weight:600" id="ServerName" />
 17 
 18             <span>表名:</span>
 19             <input style="color:red;font-weight:600" id="TableName" />
 20 
 21             <span>生成類型:</span>
 22             <select id="type">
 23                 <option value="0">生成單個表</option>
 24                 <option value="1">生成所有表</option>
 25             </select>
 26             <a  href="javascript:void(0)" onclick="GenerateEntity()" style="margin-left:20px;font-weight:600;">生成實體</a>
 27             <br />
 28 
 29         </div>
 30     </div>
 31     <div style="height:720px;width:100%;">
 32         <div style="height:100%;width:40%;float:left; border:1px solid gray;font-size:20px">
 33 
 34             <div id="leftserver" style="float:left;border:1px solid gray;height:100%;width:40%;padding:10px;overflow: auto;">
 35 
 36             </div>
 37             <div id="lefttable" style="float:left;border:1px solid gray;height:100%;width:60%;padding:10px;overflow: auto;">
 38 
 39             </div>
 40         </div>
 41         <div  style="height:100%;width:60%;float:left;border:1px solid gray;overflow: auto;">
 42             <textarea style="width:100%;height:100%;max-width:10000px" id="righttable"></textarea>
 43         </div>
 44     </div>
 45 </div>
 46 
 47 <script type="text/javascript">
 48 
 49     //鏈接數據庫
 50     function LinkServer() {
 51         $.ajax({
 52             url: "/Home/LinkServer",
 53             data: { Link: $("#Link").val() },
 54             type: "POST",
 55             async: false,
 56             dataType: "json",
 57             success: function (data) {
 58                 if (data.res) {
 59                     if (data.info != "") {
 60                         $("#leftserver").html("");
 61                         var leftserver = "<span>數據庫名</span><hr />";
 62                         var info = eval("(" + data.info + ")");
 63                         for (var i = 0; i < info.length; i++) {
 64                             leftserver += "<a onclick=\"leftserver('" + info[i].Name + "')\">" + info[i].Name + "</a><br />";
 65                         }
 66 
 67                         $("#leftserver").html(leftserver);
 68                     }
 69                 }
 70                 else {
 71                     alert(data.msg);
 72                 }
 73             }
 74         });
 75     }
 76 
 77     //查詢指定數據庫的表
 78     function leftserver(Name) {
 79         $("#ServerName").val(Name)
 80         $.ajax({
 81             url: "/Home/GetTable",
 82             data: { Link: $("#Link").val(), Name: Name },
 83             type: "POST",
 84             async: false,
 85             dataType: "json",
 86             success: function (data) {
 87                 if (data.res) {
 88                     if (data.info != "") {
 89                         $("#lefttable").html("");
 90                         var lefttable = "<span>表名</span><hr />";
 91                         var info = eval("(" + data.info + ")");
 92                         for (var i = 0; i < info.length; i++) {
 93                             lefttable += "<a onclick=\"lefttable('" + info[i].Name + "')\">" + info[i].Name + "</a><br />";
 94                         }
 95 
 96                         $("#lefttable").html(lefttable);
 97                     }
 98                 }
 99                 else {
100                     alert(data.msg);
101                 }
102             }
103         });
104     }
105 
106     //查詢指定數據庫的表
107     function lefttable(Name) {
108         $("#TableName").val(Name);
109         $.ajax({
110             url: "/Home/GetGenerateEntity",
111             data: { TableName: Name },
112             type: "POST",
113             async: false,
114             dataType: "json",
115             success: function (data) {
116                 if (data.res) {
117                     document.getElementById("righttable").innerHTML = data.info;
118                 }
119                 else {
120                     alert(data.msg);
121                 }
122             }
123         });
124     }
125 
126     //生成實體
127     function GenerateEntity() {
128 
129         $.ajax({
130             url: "/Home/GenerateEntity",
131             data: {
132                 Link: $("#Link").val(),
133                 Name: $("#ServerName").val(),
134                 TableName: $("#TableName").val(),
135                 type: $("#type").val()
136             },
137             type: "POST",
138             async: false,
139             dataType: "json",
140             success: function (data) {
141                 if (data.res) {
142                     document.getElementById("righttable").innerHTML = data.info;
143                 }
144                 else {
145                     alert(data.msg);
146                 }
147             }
148         });
149     }
150 
151 </script>

 

后端控制器數據

  1 using SqlSugar;
  2 using System;
  3 using System.Collections.Generic;
  4 using System.Linq;
  5 using System.Text;
  6 using System.Web;
  7 using System.Web.Mvc;
  8 
  9 namespace GenerateEntity.Controllers
 10 {
 11     public class HomeController : Controller
 12     {
 13         public ActionResult Index()
 14         {
 15             return View();
 16         }
 17 
 18         public ActionResult About()
 19         {
 20             ViewBag.Message = "Your application description page.";
 21 
 22             return View();
 23         }
 24 
 25         public ActionResult Contact()
 26         {
 27             ViewBag.Message = "Your contact page.";
 28 
 29             return View();
 30         }
 31 
 32 
 33      
 34         //鏈接數據庫
 35         public JsonResult LinkServer(string Link)
 36         {
 37             ResultInfo result = new ResultInfo();
 38             try
 39             {
 40                 //配置數據庫連接
 41                 SqlSugarClient db = new SqlSugarClient(
 42                                     new ConnectionConfig()
 43                                     {
 44                                         ConnectionString = ""+ Link + ";database=master",
 45                                         DbType = DbType.SqlServer,//設置數據庫類型
 46                                     IsAutoCloseConnection = true,//自動釋放數據務,如果存在事務,在事務結束后釋放
 47                                     InitKeyType = InitKeyType.Attribute //從實體特性中讀取主鍵自增列信息
 48                                 });
 49                 string sql = @"SELECT top 100000 Name FROM Master..SysDatabases ORDER BY Name";  //查詢所有鏈接的所有數據庫名
 50                 var strList = db.SqlQueryable<databaseName>(sql).ToList();
 51                 result.info = Newtonsoft.Json.JsonConvert.SerializeObject(strList);
 52                 result.res = true;
 53                 result.msg = "鏈接成功!";
 54             }
 55             catch (Exception ex)
 56             {
 57                 result.msg = ex.Message;
 58             }
 59 
 60             return Json(result, JsonRequestBehavior.AllowGet);
 61         }
 62 
 63         //根據數據庫名查詢所有表
 64         public JsonResult GetTable(string Link,string Name)
 65         {
 66 
 67             ResultInfo result = new ResultInfo();
 68             try
 69             {
 70                 //配置數據庫連接
 71                 SqlSugarClient db = new SqlSugarClient(
 72                                     new ConnectionConfig()
 73                                     {
 74                                         ConnectionString = "" + Link + ";database="+ Name + "",
 75                                         DbType = DbType.SqlServer,//設置數據庫類型
 76                                         IsAutoCloseConnection = true,//自動釋放數據務,如果存在事務,在事務結束后釋放
 77                                         InitKeyType = InitKeyType.Attribute //從實體特性中讀取主鍵自增列信息
 78                                     });
 79 
 80                 string sql = @"SELECT top 10000 Name FROM SYSOBJECTS WHERE TYPE='U' ORDER BY Name";  //查詢所有鏈接的所有數據庫名
 81                 var strList = db.SqlQueryable<databaseName>(sql).ToList();
 82                 result.info = Newtonsoft.Json.JsonConvert.SerializeObject(strList);
 83                 result.res = true;
 84                 result.msg = "查詢成功!";
 85             }
 86             catch (Exception ex)
 87             {
 88                 result.msg = ex.Message;
 89             }
 90 
 91             return Json(result, JsonRequestBehavior.AllowGet);
 92         }
 93 
 94         //生成實體
 95         public JsonResult GenerateEntity(string Link, string Name,string TableName,string type)
 96         {
 97 
 98             ResultInfo result = new ResultInfo();
 99             try
100             {
101                 //配置數據庫連接
102                 SqlSugarClient db = new SqlSugarClient(
103                                     new ConnectionConfig()
104                                     {
105                                         ConnectionString = "" + Link + ";database=" + Name + "",
106                                         DbType = DbType.SqlServer,//設置數據庫類型
107                                         IsAutoCloseConnection = true,//自動釋放數據務,如果存在事務,在事務結束后釋放
108                                         InitKeyType = InitKeyType.Attribute //從實體特性中讀取主鍵自增列信息
109                                     });
110 
111                 string path = "C:\\Demo\\2";
112 
113                 if (type == "0")
114                 {
115                     path = "C:\\Demo\\2";
116                     db.DbFirst.Where(TableName).CreateClassFile(path);
117                     result.info = System.IO.File.ReadAllText(@"" + path + "\\" + TableName + ".cs" + "", Encoding.UTF8);
118                 }
119                 else if (type == "1")
120                 {
121                     path = "C:\\Demo\\3";
122                     db.DbFirst.IsCreateAttribute().CreateClassFile(path);
123                     result.info = "";
124                 }
125 
126                 
127                 
128                 result.res = true;
129                 result.msg = "生成成功!";
130             }
131             catch (Exception ex)
132             {
133                 result.msg = ex.Message;
134             }
135 
136             return Json(result, JsonRequestBehavior.AllowGet);
137         }
138 
139         //生成全部表時查看
140         public JsonResult GetGenerateEntity(string TableName)
141         {
142 
143             ResultInfo result = new ResultInfo();
144             try
145             {
146                 string path = "C:\\Demo\\3";
147                 result.info = System.IO.File.ReadAllText(@"" + path + "\\" + TableName + ".cs" + "", Encoding.UTF8);
148                 result.res = true;
149                 result.msg = "查詢成功!";
150             }
151             catch (Exception ex)
152             {
153                 result.msg = ex.Message;
154                 try
155                 {
156                     if (result.msg.Contains("未能找到文件"))
157                     {
158                        string path = "C:\\Demo\\2";
159                         result.info = System.IO.File.ReadAllText(@"" + path + "\\" + TableName + ".cs" + "", Encoding.UTF8);
160                         result.res = true;
161                         result.msg = "查詢成功!";
162                     }
163                 }
164                 catch (Exception)
165                 {
166                     result.msg = ex.Message;
167                 }
168             }
169 
170             return Json(result, JsonRequestBehavior.AllowGet);
171         }
172 
173         //數據庫名
174         public class databaseName
175         {
176             public string Name { get; set; }
177         }
178 
179         //封裝返回信息數據
180         public class ResultInfo
181         {
182             public ResultInfo()
183             {
184                 res = false;
185                 startcode = 449;
186                 info = "";
187             }
188             public bool res { get; set; }  //返回狀態(true or false)
189             public string msg { get; set; }  //返回信息
190             public int startcode { get; set; }  //返回http的狀態碼
191             public string info { get; set; }  //返回的結果(res為true時返回結果集,res為false時返回錯誤提示)
192         }
193 
194     }
195 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM