基于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 }

 

posted @ 2020-10-15 14:15  每天进步多一点  阅读(780)  评论(0编辑  收藏  举报