在开发过程中免不了创建实体类,字段少的表可以手动编写,但是字段多还用手动创建的话不免有些浪费时间,假如一张表有100多个字段,手写有些不现实。

这时我们会借助一些工具,如:动软代码生成器、各种ORM框架自带的代码生成器等等,都可以使用。

我们现在就基于SqlSugar(ORM框架)自己动手制造一个轮子,以SqlServer为例。我们先看一下成品效果,


使用流程:

  配置好数据库链接,点击【链接数据库】获取指定服务器上的数据库名,点击数据库名,动态获取数据库下面的所有表,

点击数据表,如果生成过了的会自动获取生成的实体,如果没有生成过,点击【生成实体】自动生成显示,直接复制即可使用。

注:server=xxx.xxx.x.xxx这里如果是本地没有配置的话直接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=xxx.xxx.x.xxx;uid=sa;pwd=xxx" />            <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="0">生成单个表option>                <option value="1">生成所有表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 = "数据库名";                        var info = eval("(" + data.info + ")");                        for (var i = 0; i < info.length; i++) {                            leftserver += " + info[i].Name + "')\">" + info[i].Name + "";                        }                        $("#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 = "表名";                        var info = eval("(" + data.info + ")");                        for (var i = 0; i < info.length; i++) {                            lefttable += " + info[i].Name + "')\">" + info[i].Name + "";                        }                        $("#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(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(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 == "0")                {                    path = "C:\\Demo\\2";                    db.DbFirst.Where(TableName).CreateClassFile(path);                    result.info = System.IO.File.ReadAllText(@"" + path + "\\" + TableName + ".cs" + "", Encoding.UTF8);                }                else if (type == "1")                {                    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 = 449;                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创作不易,版权归作者和博客园共有,转载或者部分转载、摘录,请在文章明显位置注明作者和原文链接。 

vue代码生成器可视化界面_手把手教你基于SqlSugar4编写一个可视化代码生成器(生成实体,以SqlServer为例,文末附源码)...相关推荐

  1. python拿什么做可视化界面好-手把手教你用Python做个可视化的“剪刀石头布”小游戏...

    /1 前言/ 最近在学习PyQt5可视化界面,这是一个内容非常丰富的gui库,相对于tkinter库,功能更加强大,界面更加美观,操作也不难.于是我开始小试牛刀,用PyQt5做个可视化的"剪 ...

  2. 20份可视化大屏模板,直接套用真香(文末附源码)

    最近有不少小伙伴问我:有没有数据可视化大屏模板,而且要B格很高的. 这不,立马安排.特地给大家准备了20张精美.炫酷而且十分实用的可视化大屏模板,涉及机械.加工.零售.银行.交通等行业. 只要你有数据 ...

  3. python程序员专用壁纸_程序员炫技必备:用Python生成马赛克画!(文末附源码)...

    原标题:程序员炫技必备:用Python生成马赛克画!(文末附源码) 源 | Python与数据分析文 | 强哥 大家知道马赛克画是什么吗?不是动作片里的马赛克哦~~ 马赛克画是一张由小图拼成的大图,本 ...

  4. 手把手教你使用nodejs编写一个【使用远程仓库模板,快速创建项目模块】的cli(命令行)

    目录 实现步骤 初始化cli项目 项目目录 创建交互式命令 拉取远程仓库代码,读取仓库中的模板 拉取远程仓库代码 ora 终端 loading 读取仓库中的模板 将选择的模板复制写入目标项目 Comm ...

  5. python二手交易平台代码_PYTHON爬虫实战_垃圾佬闲鱼爬虫转转爬虫数据整合自用二手急速响应捡垃圾平台_3(附源码持续更新)...

    说明 文章首发于HURUWO的博客小站,本平台做同步备份发布. 如有浏览或访问异常图片加载失败或者相关疑问可前往原博客下评论浏览. 原文链接 PYTHON爬虫实战_垃圾佬闲鱼爬虫转转爬虫数据整合自用二 ...

  6. python界面设计-手把手教你用Python设计一个简单的命令行界面

    原标题:手把手教你用Python设计一个简单的命令行界面 对 Python 程序来说,完备的命令行界面可以提升团队的工作效率,减少调用时可能碰到的困扰.今天,我们就来教大家如何设计功能完整的 Pyth ...

  7. add-apt-repository:找不到命令_手把手教你使用nodejs编写cli(命令行)

    手把手教你使用nodejs编写cli(命令行) 前端日常开发中,会遇见各种各样的cli,比如一行命令帮你打包的webpack,一行命令帮你生成vue项目模板的vue-cli,还有创建react项目的c ...

  8. 如何用python开发游戏_手把手教你用Python完成一个控制台小游戏-阿里云开发者社区...

    很多人想学Python程序设计或者已经了解过一点Python程序设计基础,却没办法开发出一个项目. 今天,通过演示一个简单的控制台小游戏制作,手把手教你如何用Python编写一个游戏程序,即便你是个新 ...

  9. button按钮onclick触发不了_手把手教你深入CSS实现一个粒子动效的按钮

    按钮(button)可能是网页中最常见的组件之一了,大部分都平淡无奇,如果你碰到的是一个这样的按钮,会不会忍不住多点几次呢? 转载链接: https://github.com/XboxYan/note ...

最新文章

  1. docker挂载本地目录的方法总结:
  2. mockjs针对value生成随机数值(随机字符串,数值,日期,url,图片地址,email,ip等)
  3. 【练习】c++分别用链队列和普通队列输出杨辉三角
  4. ITK:将内核应用于非零图像中的每个像素
  5. 前端学习(2810):完成安卓打包
  6. tushare查看a股是否跌到位
  7. php 留言板分页显示,php有分页的留言板,留言成功后怎么返回当前页?
  8. 合泰单片机市场占有率_holtek单片机图文全面详解
  9. WCF、WebAPI、WebService之间的区别
  10. 人生是自己的选择,双11技术大队长的育女心经
  11. 51单片机的初了解(4)
  12. 心语家园系统维护工具箱v1.0
  13. TensorRT 进阶用法
  14. 计算机并口被禁用,电脑并口被禁用怎么办
  15. php系统不能输入中文,word无法输入汉字 如何解决Word不能输入中文的问题
  16. curaengine linux编译,CuraEngine_vs-master 在vs编译的curaengine - 下载 - 搜珍网
  17. Laravel Scout 包在 Elasticsearch 中的使用记录
  18. Chrome 印象笔记.剪裁登录弹出国际版
  19. Python自动登录网页网易云音乐
  20. 【论文解读 WWW 2019 | MVAE】Multimodal Variational Autoencoder for Fake News Detection

热门文章

  1. Python—进程、线程、协程
  2. 用lua扩展你的Nginx(整理)
  3. nginx的模块开发
  4. 大剑无锋之如何查看一个java进程的堆内存使用情况(jps,jstack,jmap)【面试推荐】
  5. MapReduce 源码分析(一)准备阶段
  6. leetcode 978. Longest Turbulent Subarray | 978. 最长湍流子数组(Java)
  7. Arch Linux 没有声音:Intel sound card snd_hda_intel not working 解决方法
  8. leetcode 628. Maximum Product of Three Numbers | 628. 三个数的最大乘积(Java)
  9. 技术人员究竟应该如何保持快速学习的能力?
  10. 【EasyUI tree】Python 异步菜单树的实现