MVC+Ninject+三层架构+代码生成 -- 总结(四、數據層)
1.數據層使用了SqlSugar 庫類 。
數據層使用了SqlSugar 庫類 ,有興趣的 可以學習 http://www.codeisbug.com/Doc/8/1133,個人覺得比EF 簡單,容易上手,推薦+1。
數據層使用代碼生成,所以考慮得比較多。
1.GetAllList()--獲取全部數據
2.GetAllListByCache()--通過緩存獲取全部數據
3.GetListByCondition(string queryJson)--通過條件獲取數據
4.GetListByPage(PageInfo pageInfo, string queryJson)--通過 條件 和 分頁 信息 獲取數據
5.GetEntity(string keyValue)--通過主鍵 獲取 單條實體
6.DelEntity(string keyValue)--通過主鍵 刪除 單條實體
7.DelListByCondition(string queryJson)--通過條件 刪除 單條實體
8.DelEntityByKeys(int[] keyValues)--通過主鍵 刪除 數據
9.SaveForm(string keyValue, T Entity)--保存數據(新增、修改)
2.動軟代碼
<#@ template language="c#" HostSpecific="True" #>
<#@ output extension= ".cs" #>
<#
TableHost host = (TableHost)(Host);
string DbParaHead=host.DbParaHead;
string DbParaDbType=host.DbParaDbType;
string preParameter=host.preParameter;
string ModelSpace = host.NameSpace+".Model."+ host.GetModelClass(host.TableName);
string TableName = host.GetModelClass(host.TableName).Split('_')[];
ColumnInfo identityKey=host.IdentityKey;
string returnValue = "void";
if (identityKey!=null)
{
returnValue = CodeCommon.DbTypeToCS(identityKey.TypeName);
}
#>
using System;
using System.Collections.Generic;
using CommonLibrary.Serializer;
using CommonContract.Condition;
using CommonContract.Entity;
using CommonLibrary.Cache;
using CommonLibrary.SqlDB;
using CommonLibrary.ExtendsMethod; namespace MIT.Application.Dao
<# if( host.Folder.Length > ){ #>
.<#= host.Folder #>
<# } #>
{
<# if( host.TableDescription.Length > ) {#>
//<#= host.TableDescription #>
<# } #> public class <#= TableName #>Dao
{ public const string <#= TableName #>CacheKey = "<#= TableName #>CacheKey"; /// <summary>
/// 獲取所有數據
/// </summary>
public List<<#= TableName #>Entity> GetList()
{
var db =SqlSugarHelper.GetInstance();
List<<#= TableName #>Entity> list = db.Queryable<<#= TableName #>Entity>()
.OrderBy(it => it.SortCode)
.ToList();
return list;
} /// <summary>
/// 通過緩存獲取所有數據
/// </summary>
public List<<#= TableName #>Entity> GetListByCache()
{
List<<#= TableName #>Entity> list = PageCacheManager.Current.GetCache<<#= TableName #>Entity>(<#= TableName #>CacheKey);
if (list == null)
{
list = GetList();
PageCacheManager.Current.AddCache(<#= TableName #>CacheKey,list);
}
return list;
} /// <summary>
/// 通過條件獲取所有數據
/// </summary>
public List<<#= TableName #>Entity> GetListByCondition(string queryJson)
{
var db = SqlSugarHelper.GetInstance();
var queryParam = JsonHelper.ToJObject(queryJson);
// string UserName = queryParam["UserName"].ToConvertString();
// string UserAccount = queryParam["UserAccount"].ToConvertString();
List<<#= TableName #>Entity> list = db.Queryable<<#= TableName #>Entity>()
// .WhereIF(!UserName.IsEmpty(), it => it.UserName.Contains(UserName))
// .WhereIF(!UserAccount.IsEmpty(), it => it.UserAccount.Contains(UserAccount))
.OrderBy(it => it.SortCode)
.ToList();
return list;
} /// <summary>
/// 通過分页獲取數據
/// </summary>
public List<<#= TableName #>Entity> GetListByPage(PageInfo pageInfo, string queryJson)
{
var db =SqlSugarHelper.GetInstance();
int totalCount = ;
var queryParam = JsonHelper.ToJObject(queryJson);
// string UserName = queryParam["UserName"].ToConvertString();
// string UserAccount = queryParam["UserAccount"].ToConvertString();
List<<#= TableName #>Entity> list = db.Queryable<<#= TableName #>Entity>()
// .WhereIF(!UserName.IsEmpty(), it => it.UserName.Contains(UserName))
// .WhereIF(!UserAccount.IsEmpty(), it => it.UserAccount.Contains(UserAccount))
.OrderBy(it => it.SortCode)
.ToPageList(pageInfo.page, pageInfo.rows, ref totalCount); pageInfo.records = totalCount ;
return list;
} /// <summary>
/// 通過主鍵獲取實體
/// </summary>
/// <param name="keyValue">主键值</param>
/// <returns></returns>
public <#= TableName #>Entity GetEntity(string keyValue)
{
var db = SqlSugarHelper.GetInstance();
<#= TableName #>Entity entity = db.Queryable<<#= TableName #>Entity>().InSingle(keyValue);
return entity;
} /// <summary>
/// 通過主鍵删數據
/// </summary>
/// <param name="keyValue">主键值</param>
/// <returns></returns>
public int RemoveForm(string keyValue)
{
var db = SqlSugarHelper.GetInstance();
PageCacheManager.Current.RemoveCache(<#= TableName #>CacheKey);
return db.Deleteable<<#= TableName #>Entity>().In(keyValue).ExecuteCommand();
} /// <summary>
/// 通過條件删數據
/// </summary>
/// <param name="queryJson">條件</param>
/// <returns></returns>
public int RemoveFormByCondition(string queryJson)
{
var db = SqlSugarHelper.GetInstance();
PageCacheManager.Current.RemoveCache(<#= TableName #>CacheKey);
return db.Deleteable<<#= TableName #>Entity>()
// .Where(it => it.Id == 1)
// .WhereIF(!queryParam["UserName"].IsEmpty(), it => it.UserName.Contains(queryParam["UserName"].ToString()))
.ExecuteCommand();;
} /// <summary>
/// 批量删除數據
/// </summary>
/// <param name="keyValues">主键值</param>
/// <returns></returns>
public int RemoveFormByKeys(int[] keyValues)
{
var db = SqlSugarHelper.GetInstance();
PageCacheManager.Current.RemoveCache(<#= TableName #>CacheKey);
return db.Deleteable<<#= TableName #>Entity>().In(keyValues).ExecuteCommand();;
} /// <summary>
/// 保存數據(新增、修改)
/// </summary>
/// <param name="keyValue">主键值</param>
/// <param name="Entity">实体</param>
/// <returns></returns>
public int SaveForm(string keyValue, <#= TableName #>Entity Entity)
{
var db = SqlSugarHelper.GetInstance();
PageCacheManager.Current.RemoveCache(<#= TableName #>CacheKey);
int keyVal = ;
if (!string.IsNullOrEmpty(keyValue))
{
//根据实体更新(主键要有值,主键是更新条件)
int ModifyRow = db.Updateable(Entity)
.IgnoreColumns(it => new { it.CreateDate, it.CreateUserId , it.CreateUserName})
.Where(true)
.ExecuteCommand();
keyVal = ModifyRow > ? keyValue.ToInt() : ;
}
else
{
//插入并返回自增列用ExecuteReutrnIdentity
//可以设置NULL列不插入和是否强制插入自增列
keyVal = db.Insertable(Entity)
.Where(true/* Is no insert null */, false/*off identity*/)
.ExecuteCommand();
}
return keyVal; }
}
}
3.C# 代碼
using CommonContract.Entity;
using CommonLibrary.SqlDB;
using System;
using System.Collections.Generic;
using System.Data;
using CommonLibrary.Serializer;
using CommonLibrary.ExtendsMethod;
using CommonLibrary.Cache;
using System.Threading;
using CommonContract.Condition; namespace MIT.Application.Dao.BaseManager
{
//WB_tb_BackStageUser 后台用户 public class UserDao
{ public const string UserInfoCacheKey = "UserInfoCacheKey"; /// <summary>
/// 獲取所有數據
/// </summary>
public List<UserEntity> GetList()
{
var db = SqlSugarHelper.GetInstance();
List<UserEntity> list = db.Queryable<UserEntity>()
.OrderBy(it => it.CreateDate)
.ToList();
return list;
} /// <summary>
/// 通過緩存獲取所有數據
/// </summary>
public List<UserEntity> GetListByCache()
{
List<UserEntity> list = PageCacheManager.Current.GetCache<UserEntity>(UserInfoCacheKey);
if (list == null)
{
list = GetList();
PageCacheManager.Current.AddCache(UserInfoCacheKey, list);
}
return list;
} /// <summary>
/// 通過條件獲取所有數據
/// </summary>
public List<UserEntity> GetListByCondition(string queryJson)
{
var db = SqlSugarHelper.GetInstance();
var queryParam = JsonHelper.ToJObject(queryJson);
string UserName = queryParam["UserName"].ToConvertString();
string UserAccount = queryParam["UserAccount"].ToConvertString();
List<UserEntity> list = db.Queryable<UserEntity>()
.WhereIF(!UserName.IsEmpty(), it => it.RealName.Contains(UserName))
.WhereIF(!UserAccount.IsEmpty(), it => it.Account.Contains(UserAccount))
.OrderBy(it => it.ModifyDate)
.ToList();
return list;
} /// <summary>
/// 通過分页獲取數據
/// </summary>
public List<UserEntity> GetListByPage(PageInfo pageInfo, string queryJson)
{
var db = SqlSugarHelper.GetInstance();
var queryParam = JsonHelper.ToJObject(queryJson);
int totalCount = ;
string UserName = queryParam["UserName"].ToConvertString();
string UserAccount = queryParam["UserAccount"].ToConvertString();
List<UserEntity> list = db.Queryable<UserEntity>()
.WhereIF(!UserName.IsEmpty(), it => it.RealName.Contains(UserName))
.WhereIF(!UserAccount.IsEmpty(), it => it.Account.Contains(UserAccount))
.OrderBy(it => it.ModifyDate)
.ToPageList(pageInfo.page, pageInfo.rows, ref totalCount); pageInfo.records = totalCount;
return list;
} /// <summary>
/// 通過主鍵獲取實體
/// </summary>
/// <param name="keyValue">主键值</param>
/// <returns></returns>
public UserEntity GetEntity(string keyValue)
{
var db = SqlSugarHelper.GetInstance();
UserEntity entity = db.Queryable<UserEntity>().InSingle(keyValue);
return entity;
} /// <summary>
/// 通過主鍵删數據
/// </summary>
/// <param name="keyValue">主键值</param>
/// <returns></returns>
public int RemoveForm(string keyValue)
{
var db = SqlSugarHelper.GetInstance();
PageCacheManager.Current.RemoveCache(UserInfoCacheKey);
return db.Deleteable<UserEntity>().In(keyValue).ExecuteCommand();
} /// <summary>
/// 通過條件删數據
/// </summary>
/// <param name="queryJson">條件</param>
/// <returns></returns>
public int RemoveFormByCondition(string queryJson)
{
var db = SqlSugarHelper.GetInstance();
PageCacheManager.Current.RemoveCache(UserInfoCacheKey);
return db.Deleteable<UserEntity>()
// .Where(it => it.Id == 1)
// .WhereIF(!queryParam["UserName"].IsEmpty(), it => it.UserName.Contains(queryParam["UserName"].ToString()))
.ExecuteCommand(); ;
} /// <summary>
/// 批量删除數據
/// </summary>
/// <param name="keyValues">主键值</param>
/// <returns></returns>
public int RemoveFormByKeys(int[] keyValues)
{
var db = SqlSugarHelper.GetInstance();
PageCacheManager.Current.RemoveCache(UserInfoCacheKey);
return db.Deleteable<UserEntity>().In(keyValues).ExecuteCommand(); ;
} /// <summary>
/// 保存數據(新增、修改)
/// </summary>
/// <param name="keyValue">主键值</param>
/// <param name="Entity">实体</param>
/// <returns></returns>
public int SaveForm(string keyValue, UserEntity Entity)
{
var db = SqlSugarHelper.GetInstance();
PageCacheManager.Current.RemoveCache(UserInfoCacheKey);
int keyVal = ;
if (!string.IsNullOrEmpty(keyValue))
{
Entity.UserId = keyValue.ToInt();
// Entity.UpdateTime = DateTime.Now;
//根据实体更新(主键要有值,主键是更新条件)
int ModifyRow = db.Updateable(Entity)
.UpdateColumns(it => new { it.RoleId,it.RealName,it.Description,it.ModifyDate})
.Where(true/* Is no insert null */, false/*off identity*/)
.ExecuteCommand();
keyVal = ModifyRow > ? keyValue.ToInt() : ;
}
else
{
keyVal = db.Insertable(Entity)
.Where(true/* Is no insert null */, false/*off identity*/)
.ExecuteReutrnIdentity();
}
return keyVal;
} /// <summary>
/// 更新用戶狀態
/// </summary>
/// <param name="keyValue">主键值</param>
/// <param name="Entity">实体</param>
/// <returns></returns>
public int UpdateState(UserEntity Entity)
{
var db = SqlSugarHelper.GetInstance();
PageCacheManager.Current.RemoveCache(UserInfoCacheKey);
//根据实体更新(主键要有值,主键是更新条件)
return db.Updateable(Entity).UpdateColumns(it => new { it.EnabledMark }).ExecuteCommand();
} }
}
4.緩存代碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Caching;
using System.Text;
using System.Threading.Tasks;
using CommonLibrary.ExtendsMethod; namespace CommonLibrary.Cache
{
/// <summary>
/// 页面使用缓存
/// </summary>
public class PageCacheManager
{
#region Singleton
private static PageCacheManager _instance;
private static readonly object obj_lock = new object();
public static PageCacheManager Current
{
get
{
if (_instance == null)
{
lock (obj_lock)
{
if (_instance == null)
{
_instance = new PageCacheManager();
}
}
}
return _instance;
}
}
#endregion /// <summary>
/// 设置时间
/// </summary>
public int CacheTimeOut { get; set; } private ObjectCache cache; private PageCacheManager()
{
cache = MemoryCache.Default;
CacheTimeOut = AppConfig.PageCacheTimeOut;
} public void AddCache(string key, object value)
{
cache.Add(key, value, new CacheItemPolicy { SlidingExpiration = TimeSpan.FromSeconds(CacheTimeOut) });
} /// <summary>
/// 获取缓存 --重载获取缓存
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="id"></param>
/// <returns></returns>
public List<T> GetCache<T>(string key) where T : class
{
return GetCache<T>(key, null, null);
} /// <summary>
/// 获取缓存
/// 排序
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="id"></param>
/// <returns></returns>
public List<T> GetCache<T>(string key, string sort, string order) where T : class
{
if (!string.IsNullOrEmpty(key))
{
if (cache.Contains(key))
{
if (!string.IsNullOrEmpty(sort) && !string.IsNullOrEmpty(order))
{
return (cache.Get(key) as IEnumerable<T>).AsQueryable<T>().DataSorting(sort, order).ToList();
}
return (cache.Get(key) as IEnumerable<T>).ToList();
}
}
return null;
} /// <summary>
/// 获取单个缓存
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public string GetCache(string key)
{
if (!string.IsNullOrEmpty(key))
{
if (cache.Contains(key))
{
return cache.Get(key).ToString();
}
return string.Empty;
}
return string.Empty;
} /// <summary>
/// 是否存在key
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public bool ContainsKey(string key)
{
if (string.IsNullOrEmpty(key))
return false;
return this.cache.Contains(key);
} /// <summary>
/// 移除缓存
/// </summary>
/// <param name="id"></param>
public void RemoveCache(string key)
{
cache.Remove(key);
}
}
}
MVC+Ninject+三层架构+代码生成 -- 总结(四、數據層)的更多相关文章
- MVC+Ninject+三层架构+代码生成 -- 总结(六、邏輯層)
1.邏輯層的方法應該與數據層的方法一一對應.邏輯層返回的結果都是用接口IResult封裝,用於項目轉換時,能減少變化的代碼量. 2.邏輯層都需要繼承 BaseLogic 類 public class ...
- MVC+Ninject+三层架构+代码生成 -- 总结(一、數據庫)
一.數據表 是參照 別人的庫建表的 ,主鍵都是用int 自增,若是跨數據庫的話,建議使用GUID為主鍵.
- MVC+Ninject+三层架构+代码生成 -- 总结(五、Ninject)
1.在寫邏輯層前,需要弄好反轉控制,因框架沒有寫接口,所以Ninject只負責返回當前實例,有點類似共享設計模式. public sealed class IOCHelper { private st ...
- MVC+Ninject+三层架构+代码生成 -- 总结(七、顯示層 一)
1.顯示層 在網上找的 Bootstrap 模板.
- MVC+Ninject+三层架构+代码生成 -- 总结(三、實體類)
一.動軟代碼生成器生成 實體類 2.VS視圖--實體類,其中Condition文件夾是存放 搜索的分頁信息 using System; using System.Collections.Generic ...
- MVC+Ninject+三层架构+代码生成 -- 总结(二、建項目)
1.項目分層,其中SqlSugar 是一個ORM 庫類. 2.VS庫類 視圖.
- jsp&el&jstl mvc和三层架构
jsp:java在html中插入java 一.JSP技术 1.jsp脚本和注释 jsp脚本:(翻译成servlet,源码位置apache-tomcat-7.0.52\work\Catalina\loc ...
- JavaWeb核心篇(3)——JSP,MVC,三层架构
JavaWeb核心篇(3)--JSP,MVC,三层架构 在本篇文章中我们会学习到JSP,MVC,三层架构 虽然JSP已经快被时代所淘汰,但是在一些老旧的工作场所还是有在使用,所以了解一下也不为过 至于 ...
- 【转】浅谈MVC与三层架构
首先给大家引入下MVC的概念: MVC(Model View Controller)模型.视图以及控制器,它是一种较为广泛应用的结构设计模式. 模型:就是在MVC设计模式中需要被显示的数据.在通常情况 ...
随机推荐
- python中lambda
lambda_expr ::= "lambda" [parameter_list]: expression python中lambda可以理解为一个匿名函数,它的要求是函数的运算部 ...
- 微信支付H5支付开发文档
参考文档如下:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=4_2
- 服务器学习--Linux、CentOS下安装zip与unzip指令
Linux下安装zip解压功能 Linux服务器上一般默认没是没有有安装zip命令 安装zip指令 apt-get install zip 或 yum install zip 输入zip OK li ...
- UGUI 逻辑以及实用性辅助功能
UGUI 有它的实用性, 可是也存在理解上的困难, 因为它在面板上的显示内容根据布局而变动, 如果不深入理解它的设计原理, 估计每次要进行程序上的修改都需要进行一次换算和测试过程. 1. 设置某UI的 ...
- 09-webpack--配置less
<!-- cnpm i less-loader less -D 要下载两个 在入口文件main.js文件中引入 import './css/index.less' webpack.config. ...
- conan使用(五)--打包chromium-base
现在我们就利用之前学习到的conan的使用方法,将chromium中的base库打包成一个conan包. 1. 准备源码 chromium本身是通过gn来编译的,这个目前conan并不支持.所以需要把 ...
- C++和C的相互调用
C++和C相互调用实际工程中C++和C代码相互调用是不可避免的C++编译器能够兼容C语言的编译方式C++编译器会优先使用C++编译的方式extern关键字能强制让C++编译器进行C方式的编译 exte ...
- 海量数据MySQL项目实战
主要内容包含 MySQL 典型数据库架构介绍.MySQL 主流数据库架构对比等理论性知识,然后从“订单.用户”两个项目实战,抛砖引玉,介绍亿级互联网业务数据库项目如何设计. MySQL 典型数据库架构 ...
- 阿里云serverless使用笔记
1.使用api网关服务,创建完api后,测试时,需要传“请求签名”,否则会报401 ‘Empty Signature’错误.相关文档<错误编码表,请求签名>.(错误信息放置与响应头的‘x- ...
- Windbg Locals(局部变量)窗口的使用
在WinDbg中,可以通过输入命令.使用“局部变量”窗口或使用“监视”窗口查看局部变量.局部变量窗口显示当前作用域中的本地变量的所有信息. 如何打开Locals窗口 通过菜单View--->Lo ...