1. 程式人生 > 實用技巧 >手把手教你基於SqlSugar4編寫一個視覺化程式碼生成器(生成實體,以SqlServer為例,文末附原始碼)

手把手教你基於SqlSugar4編寫一個視覺化程式碼生成器(生成實體,以SqlServer為例,文末附原始碼)

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

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

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


使用流程:

  配置好資料庫連結,點選【連結資料庫】獲取指定伺服器上的資料庫名,點選資料庫名,動態獲取資料庫下面的所有表,

點選資料表,如果生成過了的會自動獲取生成的實體,如果沒有生成過,點選【生成實體】自動生成顯示,直接複製即可使用。

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



開發環境:

編譯器:Visual Studio 2017

執行環境:windows7 x64

資料庫:SqlServer2012


程式碼實現步驟:

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


二、應用SqlSugar動態連結庫


三、編寫程式碼

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

內部實現邏輯:

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

這裡我直接貼出程式碼,直接拷貝即可使用:

前端html頁面

@{
ViewBag.Title = "Home Page";
} <script src="~/Scripts/jquery-3.3.1.js"></script> <div style="margin-top:10px;font-family:'Microsoft YaHei';font-size:18px; ">
<div style="height:100px;width:100%;border:1px solid gray;padding:10px">
<div>
<span>連結資料庫:</span>
<input style="width:800px;max-width:800px;" id="Link" value="server=192.168.0.154;uid=sa;pwd=jutong!%(!%(" />
<a href="javascript:void(0)" onclick="LinkServer()">連結資料庫</a>
</div>
<div style="margin-top:10px">
<span>資料庫名:</span>
<input style="color:red;font-weight:600" id="ServerName" /> <span>表名:</span>
<input style="color:red;font-weight:600" id="TableName" /> <span>生成型別:</span>
<select id="type">
<option value="">生成單個表</option>
<option value="">生成所有表</option>
</select>
<a href="javascript:void(0)" onclick="GenerateEntity()" style="margin-left:20px;font-weight:600;">生成實體</a>
<br /> </div>
</div>
<div style="height:720px;width:100%;">
<div style="height:100%;width:40%;float:left; border:1px solid gray;font-size:20px"> <div id="leftserver" style="float:left;border:1px solid gray;height:100%;width:40%;padding:10px;overflow: auto;"> </div>
<div id="lefttable" style="float:left;border:1px solid gray;height:100%;width:60%;padding:10px;overflow: auto;"> </div>
</div>
<div style="height:100%;width:60%;float:left;border:1px solid gray;overflow: auto;">
<textarea style="width:100%;height:100%;max-width:10000px" id="righttable"></textarea>
</div>
</div>
</div> <script type="text/javascript"> //連結資料庫
function LinkServer() {
$.ajax({
url: "/Home/LinkServer",
data: { Link: $("#Link").val() },
type: "POST",
async: false,
dataType: "json",
success: function (data) {
if (data.res) {
if (data.info != "") {
$("#leftserver").html("");
var leftserver = "<span>資料庫名</span><hr />";
var info = eval("(" + data.info + ")");
for (var i = ; i < info.length; i++) {
leftserver += "<a onclick=\"leftserver('" + info[i].Name + "')\">" + info[i].Name + "</a><br />";
} $("#leftserver").html(leftserver);
}
}
else {
alert(data.msg);
}
}
});
} //查詢指定資料庫的表
function leftserver(Name) {
$("#ServerName").val(Name)
$.ajax({
url: "/Home/GetTable",
data: { Link: $("#Link").val(), Name: Name },
type: "POST",
async: false,
dataType: "json",
success: function (data) {
if (data.res) {
if (data.info != "") {
$("#lefttable").html("");
var lefttable = "<span>表名</span><hr />";
var info = eval("(" + data.info + ")");
for (var i = ; i < info.length; i++) {
lefttable += "<a onclick=\"lefttable('" + info[i].Name + "')\">" + info[i].Name + "</a><br />";
} $("#lefttable").html(lefttable);
}
}
else {
alert(data.msg);
}
}
});
} //查詢指定資料庫的表
function lefttable(Name) {
$("#TableName").val(Name);
$.ajax({
url: "/Home/GetGenerateEntity",
data: { TableName: Name },
type: "POST",
async: false,
dataType: "json",
success: function (data) {
if (data.res) {
document.getElementById("righttable").innerHTML = data.info;
}
else {
alert(data.msg);
}
}
});
} //生成實體
function GenerateEntity() { $.ajax({
url: "/Home/GenerateEntity",
data: {
Link: $("#Link").val(),
Name: $("#ServerName").val(),
TableName: $("#TableName").val(),
type: $("#type").val()
},
type: "POST",
async: false,
dataType: "json",
success: function (data) {
if (data.res) {
document.getElementById("righttable").innerHTML = data.info;
}
else {
alert(data.msg);
}
}
});
} </script>

後端控制器資料

using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Mvc; namespace GenerateEntity.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
} public ActionResult About()
{
ViewBag.Message = "Your application description page."; return View();
} public ActionResult Contact()
{
ViewBag.Message = "Your contact page."; return View();
} //連結資料庫
public JsonResult LinkServer(string Link)
{
ResultInfo result = new ResultInfo();
try
{
//配置資料庫連線
SqlSugarClient db = new SqlSugarClient(
new ConnectionConfig()
{
ConnectionString = ""+ Link + ";database=master",
DbType = DbType.SqlServer,//設定資料庫型別
IsAutoCloseConnection = true,//自動釋放資料務,如果存在事務,在事務結束後釋放
InitKeyType = InitKeyType.Attribute //從實體特性中讀取主鍵自增列資訊
});
string sql = @"SELECT top 100000 Name FROM Master..SysDatabases ORDER BY Name"; //查詢所有連結的所有資料庫名
var strList = db.SqlQueryable<databaseName>(sql).ToList();
result.info = Newtonsoft.Json.JsonConvert.SerializeObject(strList);
result.res = true;
result.msg = "連結成功!";
}
catch (Exception ex)
{
result.msg = ex.Message;
} return Json(result, JsonRequestBehavior.AllowGet);
} //根據資料庫名查詢所有表
public JsonResult GetTable(string Link,string Name)
{ ResultInfo result = new ResultInfo();
try
{
//配置資料庫連線
SqlSugarClient db = new SqlSugarClient(
new ConnectionConfig()
{
ConnectionString = "" + Link + ";database="+ Name + "",
DbType = DbType.SqlServer,//設定資料庫型別
IsAutoCloseConnection = true,//自動釋放資料務,如果存在事務,在事務結束後釋放
InitKeyType = InitKeyType.Attribute //從實體特性中讀取主鍵自增列資訊
}); string sql = @"SELECT top 10000 Name FROM SYSOBJECTS WHERE TYPE='U' ORDER BY Name"; //查詢所有連結的所有資料庫名
var strList = db.SqlQueryable<databaseName>(sql).ToList();
result.info = Newtonsoft.Json.JsonConvert.SerializeObject(strList);
result.res = true;
result.msg = "查詢成功!";
}
catch (Exception ex)
{
result.msg = ex.Message;
} return Json(result, JsonRequestBehavior.AllowGet);
} //生成實體
public JsonResult GenerateEntity(string Link, string Name,string TableName,string type)
{ ResultInfo result = new ResultInfo();
try
{
//配置資料庫連線
SqlSugarClient db = new SqlSugarClient(
new ConnectionConfig()
{
ConnectionString = "" + Link + ";database=" + Name + "",
DbType = DbType.SqlServer,//設定資料庫型別
IsAutoCloseConnection = true,//自動釋放資料務,如果存在事務,在事務結束後釋放
InitKeyType = InitKeyType.Attribute //從實體特性中讀取主鍵自增列資訊
}); string path = "C:\\Demo\\2"; if (type == "")
{
path = "C:\\Demo\\2";
db.DbFirst.Where(TableName).CreateClassFile(path);
result.info = System.IO.File.ReadAllText(@"" + path + "\\" + TableName + ".cs" + "", Encoding.UTF8);
}
else if (type == "")
{
path = "C:\\Demo\\3";
db.DbFirst.IsCreateAttribute().CreateClassFile(path);
result.info = "";
} result.res = true;
result.msg = "生成成功!";
}
catch (Exception ex)
{
result.msg = ex.Message;
} return Json(result, JsonRequestBehavior.AllowGet);
} //生成全部表時檢視
public JsonResult GetGenerateEntity(string TableName)
{ ResultInfo result = new ResultInfo();
try
{
string path = "C:\\Demo\\3";
result.info = System.IO.File.ReadAllText(@"" + path + "\\" + TableName + ".cs" + "", Encoding.UTF8);
result.res = true;
result.msg = "查詢成功!";
}
catch (Exception ex)
{
result.msg = ex.Message;
try
{
if (result.msg.Contains("未能找到檔案"))
{
string path = "C:\\Demo\\2";
result.info = System.IO.File.ReadAllText(@"" + path + "\\" + TableName + ".cs" + "", Encoding.UTF8);
result.res = true;
result.msg = "查詢成功!";
}
}
catch (Exception)
{
result.msg = ex.Message;
}
} return Json(result, JsonRequestBehavior.AllowGet);
} //資料庫名
public class databaseName
{
public string Name { get; set; }
} //封裝返回資訊資料
public class ResultInfo
{
public ResultInfo()
{
res = false;
startcode = ;
info = "";
}
public bool res { get; set; } //返回狀態(true or false)
public string msg { get; set; } //返回資訊
public int startcode { get; set; } //返回http的狀態碼
public string info { get; set; } //返回的結果(res為true時返回結果集,res為false時返回錯誤提示)
} }
}

這樣一套視覺化程式碼生成器就出來了,我們把他釋出到IIS上面,然後設定為瀏覽器標籤(收藏),這樣就可以快捷使用了。

我們執行一下看看,是不是感覺很方便呀!

歡迎關注訂閱我的微信公眾平臺【熊澤有話說】,更多好玩易學知識等你來取
作者:熊澤-學習中的苦與樂
公眾號:熊澤有話說

出處:https://www.cnblogs.com/xiongze520/p/13181241.html


創作不易,版權歸作者和部落格園共有,轉載或者部分轉載、摘錄,請在文章明顯位置註明作者和原文連結。