今天来学习使用SqlSugar进行数据库交互。
SqlSugar是一款.NET开源 ORM框架,由果糖大数据科技团队维护和更新,官方文档。
学习目标:
1.使用三层架构
2.使用SqlSugar对数据库进行增、删、查、改
实现:
创建Web MVC项目,这里使用的是.Net Core2.1
目标一:使用三层架构
三层为下面三层:
表现层(UI)给用户交互的界面,如HTML页面。
业务层(BLL)实现业务逻辑,比如登录验证逻辑、查询数据的规则。
数据访问层(DAL)跟数据库的直接交互,目标二中的增、删、改、查就是在这层实现。
除三层外还有一层为实体层(Models),一般用于放置实体类,对于上面的三层实体层是必不可少的,可以作为参数在这几层中传送数据。
右键解决方案创建类库BLL、DAL、Model
创建完成后的项目文件结构如下图:
创建完成后配置引用关系,各个层之间的引用关系如下:
表现层(UI)引用:业务逻辑层(BLL)、实体层(Models)
业务逻辑层(BLL)引用:数据交互层(DAL)、实体层(Models)
数据交互层(DAL)引用:实体层(Models)
实体层(Models)引用:无
至此三层创建完成,接下来继续完成目标二。
目标二:使用SqlSugar对数据库进行增、删、查、改
第一步:数据交互层(DAL)
使用NuGet包管理安装SqlSugar,因为直接跟数据库交互的为数据访问层(DAL),所以在DAL层进行安装。 搜索 SqlSugarCore
(注意:在DAL层安装;还有注意版本兼容,会导致安装失败。因为这里使用的是.NetCore2.1,无法使用最新版SqlSugar,这里我选择的是5.0.2版本,具体差异可以查看SqlSugar文档)
安装完成后再DAL层创建数据交互帮助类DBHelper,创建SqlSugar数据库对象。这样我们就可以再别处使用Sqlsugar进行数据库交互了,DBHelper类代码如下↓:
using Models;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Text;
namespace DAL
{
/// <summary>
/// 数据交互帮助类
/// </summary>
public class DBHelper
{
/// <summary>
/// 数据库链接地址
/// </summary>
private static string connStr = "Data Source=.;Initial Catalog=数据库名称;Persist Security Info=True;User ID=sa;pwd=密码;";
/// <summary>
/// 创建数据库对象
/// </summary>
/// <returns></returns>
public static SqlSugarClient CreateSqlSugar()
{
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = connStr,//数据库链接地址
DbType = DbType.SqlServer,//数据库类型,本例使用的是SqlServer
IsAutoCloseConnection = true,//自动释放和关闭数据库连接,如果有事务事务结束时关闭,否则每次操作后关闭
});
return db;
}
}
}
接下来就可以愉快的进行对数据库的增、删、查、改了。
首先先再实体层(Models)创建t_User表实体类:
因为实体类主键的需要,在实体层(Models)也需要使用NuGet安装SqlSugar。
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Text;
namespace Models
{
/// <summary>
/// 用户表实体
/// </summary>
public class tb_User
{
/// <summary>
/// ID
/// 数据是自增需要加上IsIdentity
/// 数据库是主键需要加上IsPrimaryKey
/// 注意:要完全和数据库一致2个属性
/// </summary>
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int user_ID { get; set; }
/// <summary>
/// 账号
/// </summary>
public string user_Name { get; set; }
/// <summary>
/// 密码
/// </summary>
public string pwd { get; set; }
/// <summary>
/// 昵称
/// </summary>
public string user_nickName { get; set; }
/// <summary>
/// 角色
/// </summary>
public string roles { get; set; }
/// <summary>
/// 头像
/// </summary>
public string avatar { get; set; }
/// <summary>
/// 个人介绍
/// </summary>
public string introduction { get; set; }
}
/// <summary>
/// 用户查询条件
/// </summary>
public class UserWhere
{
/// <summary>
/// 用户名
/// </summary>
public string user_nickName { get; set; }
/// <summary>
/// 用户id
/// </summary>
public int user_ID { get; set; }
/// <summary>
/// 页码
/// </summary>
public int pageIndex { get; set; }
/// <summary>
/// 页大小
/// </summary>
public int pageSize { get; set; }
}
}
实体构建完成后开始编写数据交互层以t_User表为例,创建t_UserDAL类,在此仅展示部分用法其他更多用法可参照SqlSugar文档。代码如下:
using Models;
using System;
using System.Collections.Generic;
using System.Text;
namespace DAL
{
/// <summary>
/// 用户表数据交互层
/// </summary>
public class t_UserDAL
{
/// <summary>
/// 新增用户
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
public int inserUser(tb_User user)
{
try
{
//创建sqlSugar链接
var db = DBHelper.CreateSqlSugar();
//新增用户并返回插入行数
return db.Insertable(user).ExecuteCommand();
}
catch (Exception ex)
{
return 0;
}
}
/// <summary>
/// 根据条件删除
/// </summary>
/// <param name="user_ID"></param>
/// <returns></returns>
public int delUser(int user_ID)
{
try
{
//创建sqlSugar链接
var db = DBHelper.CreateSqlSugar();
//执行删除,根据条件删除,返回被执行条数
return db.Deleteable<tb_User>().Where(user => user.user_ID == user_ID).ExecuteCommand();
}
catch (Exception ex)
{
return 0;
}
}
/// <summary>
/// 更新用户
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
public int updateUser(tb_User user)
{
try
{
//创建sqlSugar链接
var db = DBHelper.CreateSqlSugar();
//执行更新,并返回条数
return db.Updateable(user).ExecuteCommand();
}
catch (Exception ex)
{
return 0;
}
}
/// <summary>
/// 分页查询用户信息
/// </summary>
/// <param name="para"></param>
/// <param name="total"></param>
/// <returns></returns>
public List<tb_User> getUserList(UserWhere para, ref int total)
{
try
{
//创建sqlSugar链接
var db = DBHelper.CreateSqlSugar();
//分页查询
var list = db.Queryable<tb_User>()
.WhereIF(!string.IsNullOrEmpty(para.user_nickName), x => x.user_nickName.Contains(para.user_nickName))//如果用户名不为空就执行该查询条件
.WhereIF(para.user_ID > 0, x => x.user_ID == para.user_ID)//如果id大于零就自行该查询条件
.ToPageList(para.pageIndex, para.pageSize, ref total);
return list;
}
catch (Exception ex)
{
return null;
}
}
}
}
第二步:业务逻辑层(BLL)
这层主要做数据的验证、返回信息的逻辑处理,在实际开发中可根据业务需要进行拓展。
using DAL;
using Models;
using System;
using System.Collections.Generic;
using System.Text;
namespace BLL
{
/// <summary>
/// 业务逻辑层
/// </summary>
public class t_UserBLL
{
public t_UserDAL userDAL;
public t_UserBLL()
{
this.userDAL = new t_UserDAL();//实例化数据交互层
}
/// <summary>
/// 新增用户
/// </summary>
/// <param name="user">用户信息</param>
/// <returns></returns>
public string inserUser(tb_User user)
{
if (string.IsNullOrEmpty(user.user_Name))
{
return "用户账号不能为空!";
}
if (string.IsNullOrEmpty(user.user_nickName))
{
return "用户昵称不能为空!";
}
if (string.IsNullOrEmpty(user.roles))
{
return "用户角色不能为空!";
}
if (string.IsNullOrEmpty(user.pwd))
{
return "用户密码不能为空!";
}
//放行
var number = userDAL.inserUser(user);
if (number > 0)
{
return "新增用户成功!数量" + number;
}
else
{
return "新增用户失败!";
}
}
/// <summary>
/// 删除用户
/// </summary>
/// <param name="user_ID">用户id主键</param>
/// <returns></returns>
public string delUser(int user_ID)
{
if (user_ID > 0)
{
if (userDAL.delUser(user_ID) > 0)
{
return "删除成功!";
}
else
{
return "删除失败!";
}
}
else
{
return "删除失败";
}
}
/// <summary>
/// 更新用户信息
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
public string updateUser(tb_User user)
{
if (user.user_ID <= 0)
{
return "用户id不正确!";
}
if (string.IsNullOrEmpty(user.user_Name))
{
return "用户账号不能为空!";
}
if (string.IsNullOrEmpty(user.user_nickName))
{
return "用户昵称不能为空!";
}
if (string.IsNullOrEmpty(user.roles))
{
return "用户角色不能为空!";
}
if (string.IsNullOrEmpty(user.pwd))
{
return "用户密码不能为空!";
}
//放行
var number = userDAL.updateUser(user);
if (number > 0)
{
return "更新用户成功!";
}
else
{
return "更新用户失败!";
}
}
/// <summary>
/// 分页查询用户信息
/// </summary>
/// <param name="para"></param>
/// <returns></returns>
public ReturnData getUserList(UserWhere para)
{
var result = new ReturnData();
try
{
int total = 0;
var list = userDAL.getUserList(para, ref total);
if (list.Count > 0)
{
result.data = list;
result.msg = "查询成功!";
result.total = total;
return result;
}
else
{
result.msg = "查询失败!";
return result;
}
}
catch (Exception ex)
{
return result;
}
}
}
}
分页查询返回参ReturnData如下:
using System;
using System.Collections.Generic;
using System.Text;
namespace Models
{
/// <summary>
/// 返回用户类
/// </summary>
public class ReturnData
{
public int code { get; set; } = 2001;
public object data { get; set; } = null;
public string msg { get; set; } = "操作失败!";
public int total { get; set; }
}
}
第三步:编写用户交互层(UI)
用户交互层部分代码如下:
using BLL;
using DemoMVC0704.Models;
using Microsoft.AspNetCore.Mvc;
using Models;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
namespace DemoMVC0704.Controllers
{
public class HomeController : Controller
{
public t_UserBLL userBLL;
public HomeController()
{
this.userBLL = new t_UserBLL();
}
public IActionResult Index()
{
var para = new UserWhere()
{
pageIndex = 1,
pageSize = 5
};
var result = new ReturnData();
result = userBLL.getUserList(para);
ViewBag.userList = result.data;
return View();
}
/// <summary>
/// 新增
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
public IActionResult inserUser(tb_User user)
{
var msg = userBLL.inserUser(user);
ViewData["msg"] = msg;
return View();
}
}
}
至此增、删、查、改操作完成。
最终呈现
点击新增后查询到新增的数据表示已经成功新增,并且数据库中已经存在该条数据。
最终的项目文件结构:
今天的.Net Core 使用SQL sugar进行增、删、改、查学习结束,需要源码的可以进行下载。