• 基于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;100%;border:1px solid gray;padding:10px">
      9         <div>
     10             <span>链接数据库:</span>
     11             <input style="800px;max-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;100%;">
     32         <div style="height:100%;40%;float:left; border:1px solid gray;font-size:20px">
     33 
     34             <div id="leftserver" style="float:left;border:1px solid gray;height:100%;40%;padding:10px;overflow: auto;">
     35 
     36             </div>
     37             <div id="lefttable" style="float:left;border:1px solid gray;height:100%;60%;padding:10px;overflow: auto;">
     38 
     39             </div>
     40         </div>
     41         <div  style="height:100%;60%;float:left;border:1px solid gray;overflow: auto;">
     42             <textarea style="100%;height:100%;max-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 }
  • 相关阅读:
    链表及其各种函数操作的实现方法
    插入排序
    欧几里得算法
    Cookie和Session
    RestTemplate 中文乱码
    java8 按两个属性分组,并返回扁平List; stream排序
    Spring 读取资源
    linux搭建Git
    IDEA 快捷键
    Linux常用命令
  • 原文地址:https://www.cnblogs.com/lgx5/p/13820295.html
Copyright © 2020-2023  润新知