基于.Net Core 2.0 + SqlSugar ORM + MySql快速实现网站开发
来源:互联网 发布:照片电子相册制作软件 编辑:程序博客网 时间:2024/05/20 17:09
.Net Core 2.0 (以下简称Core)正式版已经发布有一段时间了, 博主也第一时间尝鲜了, 相比Core 1.0和1.1类库支持方面提高了不少, 开发起来也方便快捷很多了.
废话不多说了, 搭建开始. (PS: 博主使用的的是VS2017最新版本, 操作系统使用的是Windows 10专业版 64位)
Core的环境搭建我就不多说了, 贴个微软的官网, 自己去下载搭建一个就好了. 点我飞机票
一: 新建项目
选择.Net Core应用 --> ASP.NET Core Web应用 --> 确定
环境记得选择Core 2.0的, 新建完成后, 项目结构如下
大家会觉得很奇怪, 没有以前MVC必须有的Controllers和Views文件夹. 解释一下, 这是Core 2.0 MVC新出的特性, 视图可以不经过控制器处理, 直接显示. 但是有个要求限制, 不经过控制器的试图必须放在Pages文件夹里面, 比如我们刚刚新建的项目下的Pages文件夹, 打开看看
会发现有一些默认的页面, 打开Index.cshtml, 第一行代码是@page指令, 这也是不经过控制器的视图必须加的指令, @page指令.
其它的和以前的MVC差不多, 就不说了.
我们现在通过NuGet添加SqlSugar ORM的引用, 打开NuGet直接输入sqlsugar搜索就行
由于使用的Core, 所以选择sqlSugarCore版本, 如果是基于.Net Framework开发, 安装sqlSuagr版本即可
这里解释下为什么使用SqlSugar ORM
我使用的是Core环境, 现在直接Core的ORM框架不多, 除了EF和Dapper基本上就没有了, SqlSugar灵活性和效率相比比EF和Dapper高了不少, 易用性也比较高, 所以选择SqlSuagr, 确实是一款不错的ORM框架, 维护更新也挺完美的. 官网贴一下, 有需要的童鞋可以看看文档和介绍 SqlSugar点我
然后再安装MySql.Data, 因为使用的是mysql数据库, 需要这个依奈, 直接NuGet下载安装. PS: 选择预览版, mysql.data支持Core的正式版还没发布, 所以先使用预览版. 如图
这样子, 我们的环境基本上搭建完毕. 为了更好的使用SqlSugar, 我简单的封装了一个类, 代码如下, 可以参考
/// <summary> /// Sugar ORM父类, 封装一些基本的操作 /// </summary> /// <author>旷丽文</author> public class SugarBase { /// <summary> /// 获取ORM数据库连接对象(只操作数据库一次的使用, 否则会进行多次数据库连接和关闭) /// 默认超时时间为30秒 /// 默认为MySql数据库 /// 默认自动关闭数据库链接, 多次操作数据库请勿使用该属性, 可能会造成性能问题 /// 要自定义请使用GetIntance()方法或者直接使用Exec方法, 传委托 /// </summary> public static SqlSugarClient DB { get { return InitDB(30, DBType.MySql, true); } } /// <summary> /// 数据库连接字符串, 在配置文件中的connectionStrings节点中添加name为SqlSugar的节点信息即可, 会自动获取 /// </summary> public static string DBConnectionString { private get; set; } = Configs.DB_ConnectionString; /// <summary> /// 获得SqlSugarClient(使用该方法, 默认请手动释放资源, 如using(var db = SugarBase.GetIntance()){你的代码}, 如果把isAutoCloseConnection参数设置为true, 则无需手动释放, 会每次操作数据库释放一次, 可能会影响性能, 请自行判断使用) /// </summary> /// <param name="commandTimeOut">等待超时时间, 默认为30秒 (单位: 秒)</param> /// <param name="dbType">数据库类型, 默认为SQL Server</param> /// <param name="isAutoCloseConnection">是否自动关闭数据库连接, 默认不是, 如果设置为true, 则会在每次操作完数据库后, 即时关闭, 如果一个方法里面多次操作了数据库, 建议保持为false, 否则可能会引发性能问题</param> /// <returns></returns> /// <author>旷丽文</author> public static SqlSugarClient GetIntance(int commandTimeOut = 30, DBType dbType = DBType.MySql, bool isAutoCloseConnection = false) { return SugarBase.InitDB(commandTimeOut, dbType, isAutoCloseConnection); } /// <summary> /// 初始化ORM连接对象, 一般无需调用, 除非要自己写很复杂的数据库逻辑 /// </summary> /// <param name="commandTimeOut">等待超时时间, 默认为30秒 (单位: 秒)</param> /// <param name="dbType">数据库类型, 默认为SQL Server</param> /// <param name="isAutoCloseConnection">是否自动关闭数据库连接, 默认不是, 如果设置为true, 则会在每次操作完数据库后, 即时关闭, 如果一个方法里面多次操作了数据库, 建议保持为false, 否则可能会引发性能问题</param> /// <author>旷丽文</author> private static SqlSugarClient InitDB(int commandTimeOut = 30, DBType dbType = DBType.MySql, bool isAutoCloseConnection = false) { var db = new SqlSugarClient(new ConnectionConfig() { ConnectionString = SugarBase.DBConnectionString, DbType = dbType == DBType.SqlServer ? SqlSugar.DbType.SqlServer : SqlSugar.DbType.MySql, InitKeyType = InitKeyType.Attribute, IsAutoCloseConnection = isAutoCloseConnection }); db.Ado.CommandTimeOut = commandTimeOut; return db; } /// <summary> /// 执行数据库操作 /// </summary> /// <typeparam name="Result">返回值类型</typeparam> /// <param name="func">方法体</param> /// <returns></returns> /// <author>旷丽文</author> public static Result Exec<Result>(Func<SqlSugarClient, Result> func, int commandTimeOut = 30, DBType dbType = DBType.MySql) { if (func == null) throw new Exception("委托为null, 事务处理无意义"); using (var db = InitDB(commandTimeOut, dbType)) { try { return func(db); } catch (Exception ex) { throw ex; } finally { db.Dispose(); } } } /// <summary> /// 带事务处理的执行数据库操作 /// </summary> /// <typeparam name="Result">返回值类型</typeparam> /// <param name="func">方法体</param> /// <returns></returns> /// <author>旷丽文</author> public static Result ExecTran<Result>(Func<SqlSugarClient, Result> func, int commandTimeOut = 30, DBType dbType = DBType.MySql) { if (func == null) throw new Exception("委托为null, 事务处理无意义"); using (var db = InitDB(commandTimeOut, dbType)) { try { db.Ado.BeginTran(IsolationLevel.Unspecified); var result = func(db); db.Ado.CommitTran(); return result; } catch (Exception ex) { db.Ado.RollbackTran(); throw ex; } finally { db.Dispose(); } } } } /// <summary> /// 数据库类型 /// </summary> public enum DBType { SqlServer = 1, MySql = 2 }
新建视图和控制器什么的, 就不贴了, 直接贴代码
登录代码
public class HomeController : Controller { /// <summary> /// 登录页面 /// </summary> /// <returns></returns> [HttpGet] public IActionResult Login() => View(); /// <summary> /// 登录Ajax方法 /// </summary> /// <returns></returns> [HttpPost] public IActionResult LoginFunc(string account,string pwd) { var driver = DB.Queryable<T_driver>().Single(f => f.Account == account && f.Pwd == pwd); if (driver!=null) //存在则登录成功, 写入Cookie { Response.Cookies.Append("LoginInfo", driver.ID.ToString()); //这里把用户ID存入Cookie, 标识登录状态 return Content("SUCCESS"); } else { return Content("帐号密码不存在"); } } }
这里补充一下Core MVC获取的参数的两种方式, 一种是直接在Action上面写参数, 会自动获取, 如果不这样写的, 就用第二种方式, 和framework获取参数的方式略有不同
如我获取一个叫account的参数, 这样写
var account = string.Empty; var accountResult = Request.Query.TryGetValue("account", out StringValues accountValue); if (accountResult) { account = accountValue[0]; } else { //获取失败 }
就先写个登录Demo吧
可见Core 2.0对于1.1来说改动还是算大的了, 开发起来也方便多了, 比如自动实现了Cookie, 1.1需要手动添加的
配合SqlSugar ORM使用起来完成开发速度还是非常快的.
以上只是Core MVC的入门, 非常简单的登录Demo, 没有进行任何的逻辑处理和判断, 有需要的童鞋可以根据自己的需求实际开发, 下一篇将使用SqlSugar + MVC 做一套CURD
写的粗糙, 如果有什么不明白的地方, 可以加QQ群一起讨论, QQ群号: 225982985
- 基于.Net Core 2.0 + SqlSugar ORM + MySql快速实现网站开发
- 基于pdo-mysql实现的简单orm
- 用于.NET Core的ORM
- 实现基于ASP.NET MVC快速开发平台
- MySQL协议.NET Core实现(一)
- MySQL协议.NET Core实现(一)
- .net core快速上手
- .net core 基于 dapper 扩展的操作 mysql
- .NET Core快速入门教程 4、使用VS Code开发.NET Core控制台应用程序
- Asp.net Core基于MVC框架实现PostgreSQL操作
- Asp.net Core基于MVC框架实现PostgreSQL操作
- NET中的ORM实现-Grove
- .NET实现之(简易ORM)
- .net Core mvc开发
- ASP .Net Core 使用 Dapper 轻型ORM框架
- ASP .Net Core 使用 Dapper 轻型ORM框架
- Net Core下多种ORM框架特性及性能对比
- 如何快速实现一个基于Nginx的网站…
- 什么是客户端负载均衡
- Android-->build.gradle-->buildTypes
- android 坐标系
- CentOS 6通过yum安装gcc 4.9 5.2等高版本gcc
- 解决cropper.js3.0上传跨域图片不显示及toDataURL失败问题
- 基于.Net Core 2.0 + SqlSugar ORM + MySql快速实现网站开发
- 感恩教师节,悦书送好礼
- 通信协议——Http、TCP、UDP
- 快乐数(环路检测)
- 64-ia-32架构优化手册(7)
- 数据库快速获取数据库表字段名
- 基于Vue的图片放大镜组件封装
- 进行数据库插入操作的时候使用 PreparedStatement 更好
- Java基础——Servlet(八)文件上传下载