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设计模式中需要被显示的数据.在通常情况 ...
随机推荐
- bit和byte的区别是什么?
bit(位/比特):计算机运算的基础单位: byte(字节):计算机中文件大小的基本计量单位. 转换关系:8 bit = 1 Byte1024 Byte = 1 KB1024 KB = 1 MB102 ...
- 8、RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较
RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较 RabbitMQ中,除了Simple Queue和Work Queue之外的所有生产者提交的消息都由Exc ...
- ZAP 代理 Chrome 系统 win10
ZAP 代理原理 如下浏览器,拿Chrome为例,Chrome发出的请求都会先经过 ZAP, 然后再由 ZAP 发往服务器.如下图: Chrome 设置 1. Chrome设置只需要在地址栏输入 ch ...
- 001-OpenStack-基础环境
OpenStack-基础环境 1.实验描述 通过搭建 OpenStack 的 ocata 版,来学习虚拟化技术 2.实验环境 [你可能需要][CentOS 7 搭建模板机]点我快速打开文章 [你可能需 ...
- Qt 之 qwt 和 qwtpolar 的编译配置
1 Qwt Qwt 全称为 Qt Widgets for Technical Applications,用于专业技术领域的可视化显示,如下所示: 左图为二阶系统的频率响应:中图为德国小城 Fried ...
- Comet 67E: ffort
题目传送门:Comet 67E. 用了个傻逼做法 A 了这题,欢迎观赏睿智做法! 题意简述: 题目说得很清楚了(这次是我不想写了). 题解: 为了方便,令 \(m\) 为敌人数,\(n\) 为己方士兵 ...
- c# 第8节 变量、变量名命令规则、作用域、@的作用
本节内容: 1:变量 2:变量名命令规则 3:常量 4:变量和常量的作用域 5:@的作用 1:变量是什么? 计算即中存储变量的也是三步骤: 实例: 2:变量命令规则 练习: 3.常量 实现: 4:变量 ...
- 第十一周博客作业 <西北师范大学| 周安伟>
第十一周助教作业 助教博客链接https://home.cnblogs.com/u/zaw-315/ 作业要求链接https://www.cnblogs.com/nwnu-daizh/p/107615 ...
- JVM 学习资料
资料 网址 JVM Options - The complete reference http://jvm-options.tech.xebia.fr/ Java HotSpot VM Options ...
- Appium+python自动化(三)- SDK Manager(超详解)
简介 本来宏哥一开始打算用真机做的,所以在前边搭建环境时候就没有下载SDK,但是由于许多小伙伴通过博客发短消息给宏哥留言说是没有真机,所以顺应民意整理一下模拟器,毕竟“得民心者,得天下”.SDK顾名思 ...