一、引言

上一篇.NET ORM框架HiSql实战-第一章-集成HiSql 已经完成了Hisql的引入,本节就把 项目中的菜单管理改成hisql的方式实现。

菜单管理界面如图:

二、修改增删改查相关代码

1、 在 BaseRepository 仓储基类中添加 hisql访问对象:HiSqlClient。这样 所有继承了BaseRepository的业务仓储类都可以使用HiSqlClient操作数据库。本节中的菜单管理用到的仓储对象就是:SysMenuRepository

2、修改 SysMenuRepository类中访问数据的代码,将所有操作数据库的地方使用HiSql方式实现。

3、查询业务:获取菜单详情

/// <summary>
/// 获取菜单详情
/// </summary>
/// <param name="menuId"></param>
/// <returns></returns>
public SysMenu SelectMenuById(int menuId)
{
//hisql方式
return ContextHiSql.HiSql(@"select * from sys_menu where menuId = @menuId ", new { menuId = menuId })
.ToList<SysMenu>().FirstOrDefault();
//sqlsuar方式
return Context.Queryable<SysMenu>().Where(it => it.menuId == menuId).Single();
}

4、修改业务:编辑菜单

/// <summary>
/// 编辑菜单
/// </summary>
/// <param name="menu"></param>
/// <returns></returns>
public int EditMenu(SysMenu menu)
{ //hisql方式
return ContextHiSql.Update("sys_menu", menu).ExecCommand();
//sqlsugar方式
return Context.Updateable(menu).ExecuteCommand();
}

5、删除业务:删除菜单

/// <summary>
/// 删除菜单
/// </summary>
/// <param name="menuId"></param>
/// <returns></returns>
public int DeleteMenuById(long menuId)
{
//hisql方式
return ContextHiSql.Delete("sys_menu").Where(new Filter { { "menuId", OperType.EQ, menuId } }).ExecCommand(); //sqlsugar方式
return Context.Deleteable<SysMenu>().Where(it => it.menuId == menuId).ExecuteCommand();
}

6、新增业务:添加菜单

/// <summary>
/// 添加菜单
/// </summary>
/// <param name="menu"></param>
/// <returns></returns>
public int AddMenu(SysMenu menu)
{
var Db = Context;
menu.Create_time = Db.GetDate(); menu.menuId = IDHelper.GetLongId();
//hisql方式
return ContextHiSql.Insert("sys_menu", menu).ExecCommand(); //sqlsugar方式
return Db.Insertable(menu).ExecuteCommand();
}

Tip:此处使用雪花ID,其实HiSql自带相关方法。如 HiSql.Snowflake.NextId(); 以及业务根据业务实际情况自定义编号的模块,后面再集成到项目中来。 自定义编号

其他业务方法见 SysMenuRepository 代码。

SysMenuRepository 代码

using Infrastructure.Attribute;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using HSMB.Model.System.Dto;
using HSMB.Model.System;
using HiSql;
using Infrastructure; namespace HSMB.Repository.System
{
/// <summary>
/// 系统菜单
/// </summary>
[AppService(ServiceLifetime = LifeTime.Transient)]
public class SysMenuRepository : BaseRepository<SysMenu>
{
/// <summary>
/// 获取所有菜单(菜单管理)
/// </summary>
/// <returns></returns>
public List<SysMenu> SelectMenuList(SysMenu menu)
{
//hisql方式
Filter filters = new Filter();
filters.AddIf(!string.IsNullOrEmpty(menu.menuName), "menuName", OperType.LIKE, menu.menuName);
filters.AddIf(!string.IsNullOrEmpty(menu.visible), "visible", OperType.EQ, menu.visible);
filters.AddIf(!string.IsNullOrEmpty(menu.menuName), "status", OperType.EQ, menu.status);
return ContextHiSql.Query("sys_menu").Field("*").Where(filters).Sort("parentId", "orderNum").ToList<SysMenu>(); //sqlsugar方式
return Context.Queryable<SysMenu>()
.WhereIF(!string.IsNullOrEmpty(menu.menuName), it => it.menuName.Contains(menu.menuName))
.WhereIF(!string.IsNullOrEmpty(menu.visible), it => it.visible == menu.visible)
.WhereIF(!string.IsNullOrEmpty(menu.status), it => it.status == menu.status)
.OrderBy(it => new { it.parentId, it.orderNum })
.ToList();
} /// <summary>
/// 根据用户查询系统菜单列表
/// </summary>
/// <param name="sysMenu"></param>
/// <param name="userId">用户id</param>
/// <returns></returns>
public List<SysMenu> SelectMenuListByUserId(SysMenu sysMenu, long userId)
{
//hisql方式
Filter filters = new Filter();
filters.Add("userRole.UserId", OperType.EQ, userId);
filters.AddIf(!string.IsNullOrEmpty(sysMenu.menuName), "menu.menuName", OperType.LIKE, sysMenu.menuName);
filters.AddIf(!string.IsNullOrEmpty(sysMenu.visible), "menu.visible", OperType.EQ, sysMenu.visible);
filters.AddIf(!string.IsNullOrEmpty(sysMenu.menuName), "menu.status", OperType.EQ, sysMenu.status); return ContextHiSql.HiSql(@"select menu.* from sys_menu as menu
join sys_role_menu as roleMenu on menu.menuId = roleMenu.menuId
join sys_user_role as userRole on userRole.Role_id = roleMenu.Role_id
join sys_role as role on role.RoleId = userRole.RoleId
order by menu.parentId, menu.orderNum
").Where(filters).ToList<SysMenu>(); //
//sqlsugar方式
return Context.Queryable<SysMenu, SysRoleMenu, SysUserRole, SysRole>((menu, roleMenu, userRole, role) => new JoinQueryInfos(
SqlSugar.JoinType.Left, menu.menuId == roleMenu.Menu_id,
SqlSugar.JoinType.Left, roleMenu.Role_id == userRole.RoleId,
SqlSugar.JoinType.Left, userRole.RoleId == role.RoleId
))
.Where((menu, roleMenu, userRole, role) => userRole.UserId == userId)
.WhereIF(!string.IsNullOrEmpty(sysMenu.menuName), (menu, roleMenu, userRole, role) => menu.menuName.Contains(sysMenu.menuName))
.WhereIF(!string.IsNullOrEmpty(sysMenu.visible), (menu, roleMenu, userRole, role) => menu.visible == sysMenu.visible)
.WhereIF(!string.IsNullOrEmpty(sysMenu.status), (menu, roleMenu, userRole, role) => menu.status == sysMenu.status)
.OrderBy((menu, roleMenu, userRole, role) => new { menu.parentId, menu.orderNum })
.Select((menu, roleMenu, userRole, role) => menu).ToList();
} #region 左侧菜单树 /// <summary>
/// 管理员获取左侧菜单树
/// </summary>
/// <returns></returns>
public List<SysMenu> SelectMenuTreeAll()
{
var menuTypes = new string[] { "M", "C" };
//hisql方式
return ContextHiSql.HiSql("select * from sys_menu where status = @status and menuType in(@menuType)", new { status = "0", menuType = menuTypes })
.Sort("parentId", "orderNum")
.ToList<SysMenu>();
//sqlsugar方式
return Context.Queryable<SysMenu>()
.Where(f => f.status == "0" && menuTypes.Contains(f.menuType))
.OrderBy(it => new { it.parentId, it.orderNum }).ToList();
} /// <summary>
/// 根据用户角色获取左侧菜单树
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
public List<SysMenu> SelectMenuTreeByRoleIds(List<long> roleIds)
{
var menuTypes = new List<string>() { "M", "C"};
//hisql方式
return ContextHiSql.HiSql(@"select menu.* from sys_menu as menu join sys_role_menu as roleMenu on menu.menuId = roleMenu.Menu_id
where roleMenu.Role_id in (@roleIds) and menu.menuType in(@menuType)", new { roleIds = (List<long>)roleIds, menuType = menuTypes })
.Sort("parentId", "orderNum")
.ToList<SysMenu>();
//sqlsugar方式
return Context.Queryable<SysMenu, SysRoleMenu>((menu, roleMenu) => new JoinQueryInfos(
SqlSugar.JoinType.Left, menu.menuId == roleMenu.Menu_id
))
.Where((menu, roleMenu) => roleIds.Contains(((int)roleMenu.Role_id)) && menuTypes.Contains(menu.menuType) && menu.status == "0")
.OrderBy((menu, roleMenu) => new { menu.parentId, menu.orderNum })
.Select((menu, roleMenu) => menu).ToList();
} #endregion /// <summary>
/// 获取菜单详情
/// </summary>
/// <param name="menuId"></param>
/// <returns></returns>
public SysMenu SelectMenuById(int menuId)
{
//hisql方式
return ContextHiSql.HiSql(@"select * from sys_menu where menuId = @menuId ", new { menuId = menuId })
.ToList<SysMenu>().FirstOrDefault();
//sqlsugar方式
return Context.Queryable<SysMenu>().Where(it => it.menuId == menuId).Single();
} /// <summary>
/// 添加菜单
/// </summary>
/// <param name="menu"></param>
/// <returns></returns>
public int AddMenu(SysMenu menu)
{
var Db = Context;
menu.Create_time = Db.GetDate(); menu.menuId = IDHelper.GetLongId(); // 此处使用雪花ID,其实HiSql自带相关方法。如 HiSql.Snowflake.NextId();
//hisql方式
return ContextHiSql.Insert("sys_menu", menu).ExecCommand(); //sqlsugar方式
return Db.Insertable(menu).ExecuteCommand();
} /// <summary>
/// 编辑菜单
/// </summary>
/// <param name="menu"></param>
/// <returns></returns>
public int EditMenu(SysMenu menu)
{ //hisql方式
return ContextHiSql.Update("sys_menu", menu).ExecCommand();
//sqlsugar方式
return Context.Updateable(menu).ExecuteCommand();
} /// <summary>
/// 删除菜单
/// </summary>
/// <param name="menuId"></param>
/// <returns></returns>
public int DeleteMenuById(long menuId)
{
//hisql方式
return ContextHiSql.Delete("sys_menu").Where(new Filter { { "menuId", OperType.EQ, menuId } }).ExecCommand(); //sqlsugar方式
return Context.Deleteable<SysMenu>().Where(it => it.menuId == menuId).ExecuteCommand();
} /// <summary>
/// 菜单排序
/// </summary>
/// <param name="menuDto">菜单Dto</param>
/// <returns></returns>
public int ChangeSortMenu(MenuDto menuDto)
{ //hisql方式
return ContextHiSql.Update("sys_menu", new SysMenu() { menuId = menuDto.MenuId, orderNum = menuDto.orderNum }).Only("orderNum").ExecCommand(); //sqlsugar方式
var result = Context.Updateable(new SysMenu() { menuId = menuDto.MenuId, orderNum = menuDto.orderNum })
.UpdateColumns(it => new { it.orderNum }).ExecuteCommand();
return result;
} /// <summary>
/// 查询菜单权限
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
public List<SysMenu> SelectMenuPermsByUserId(long userId)
{
//var ta = ContextHiSql.Query("sys_role").Field("*").ToList<SysMenu>().FirstOrDefault(); //hisql方式
Filter filters = new Filter();
filters.Add("menu.status", OperType.EQ, 0);
filters.Add("role.status", OperType.EQ, 0);
filters.Add("userRole.user_id", OperType.EQ, userId); string aa = @"select menu.* from sys_menu as menu
join sys_role_menu as roleMenu on menu.menuId = roleMenu.menu_id
join sys_user_role as userRole on userRole.Role_id = roleMenu.Role_id
join sys_role as role on role.RoleId = userRole.role_id
order by menu.parentId, menu.orderNum
";
return ContextHiSql.HiSql(@"select menu.* from sys_menu as menu
join sys_role_menu as roleMenu on menu.menuId = roleMenu.menu_id
join sys_user_role as userRole on userRole.Role_id = roleMenu.Role_id
join sys_role as role on role.RoleId = userRole.role_id
order by menu.parentId, menu.orderNum
").Where(filters).ToList<SysMenu>(); // //sqlsugar方式
return Context.Queryable<SysMenu, SysRoleMenu, SysUserRole, SysRole>((m, rm, ur, r) => new JoinQueryInfos(
SqlSugar.JoinType.Left, m.menuId == rm.Menu_id,
SqlSugar.JoinType.Left, rm.Role_id == ur.RoleId,
SqlSugar.JoinType.Left, ur.RoleId == r.RoleId
))
//.Distinct()
.Where((m, rm, ur, r) => m.status == "0" && r.Status == "0" && ur.UserId == userId)
.Select((m, rm, ur, r) => m).ToList();
} /// <summary>
/// 校验菜单名称是否唯一
/// </summary>
/// <param name="menu"></param>
/// <returns></returns>
public SysMenu CheckMenuNameUnique(SysMenu menu)
{
//hisql方式
Filter filters = new Filter();
filters.Add("menuName", OperType.EQ, menu.menuName);
filters.Add("parentId", OperType.EQ, menu.parentId);
return ContextHiSql.Query("sys_menu").Field("*").Where(filters).ToList<SysMenu>().FirstOrDefault();
//sqlsugar方式
return Context.Queryable<SysMenu>()
.Where(it => it.menuName == menu.menuName && it.parentId == menu.parentId).Single();
} /// <summary>
/// 是否存在菜单子节点
/// </summary>
/// <param name="menuId"></param>
/// <returns></returns>
public int HasChildByMenuId(long menuId)
{
//hisql方式
Filter filters = new Filter();
filters.Add("parentId", OperType.EQ, menuId);
return int.Parse(ContextHiSql.Query("sys_menu").Field("count(*) as Cnt").Where(filters).ToTable().Rows[0][0].ToString()); //sqlsugar方式
return Context.Queryable<SysMenu>().Where(it => it.parentId == menuId).Count();
} #region RoleMenu /// <summary>
/// 查询菜单使用数量
/// </summary>
/// <param name="menuId"></param>
/// <returns></returns>
public int CheckMenuExistRole(long menuId)
{
//hisql方式
Filter filters = new Filter();
filters.Add("Menu_id", OperType.EQ, menuId);
return int.Parse(ContextHiSql.Query("sys_role_menu").Field("count(*) as Cnt").Where(filters).ToTable().Rows[0][0].ToString()); //sqlsugar方式
return Context.Queryable<SysRoleMenu>().Where(it => it.Menu_id == menuId).Count();
} #endregion
}
}

仓储基类 BaseRepository.cs 代码

using H.Cache;
using Infrastructure;
using Infrastructure.Extensions;
using Infrastructure.Model;
using SqlSugar;
using SqlSugar.IOC;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using HSMB.Model;
using HSMB.Model.System;
using HiSql; namespace HSMB.Repository
{
/// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
public class BaseRepository<T> : IBaseRepository<T> where T : class, new()
{
public ISqlSugarClient Context; public HiSqlClient ContextHiSql; public ICacheManagerBase cacheManager;
public BaseRepository( string configId = "0")
{
this.cacheManager = AutofacCore.GetFromFac<ICacheManagerBase>(); //hisql方式
this.ContextHiSql = AutofacCore.GetFromFac<HiSqlClient>(); //sqlsugar 方式
Context = DbTransient.Sugar.GetConnection(configId);//根据类传入的ConfigId自动选择 Context = DbScoped.SqlSugarScope.GetConnection(configId);
} #region add
/// <summary>
/// 插入指定列使用
/// </summary>
/// <param name="parm"></param>
/// <param name="iClumns"></param>
/// <param name="ignoreNull"></param>
/// <returns></returns>
public int Add(T parm, Expression<Func<T, object>> iClumns = null, bool ignoreNull = true)
{
return Context.Insertable(parm).InsertColumns(iClumns).IgnoreColumns(ignoreNullColumn: ignoreNull).ExecuteCommand();
}
/// <summary>
/// 插入实体
/// </summary>
/// <param name="t"></param>
/// <param name="IgnoreNullColumn">默认忽略null列</param>
/// <returns></returns>
public int Add(T t)
{
return Context.Insertable(t).ExecuteCommand();
} public int Insert(List<T> t)
{
return Context.Insertable(t).ExecuteCommand();
}
public long InsertReturnBigIdentity(T t)
{
return Context.Insertable(t).ExecuteReturnBigIdentity();
} #endregion add #region update /// <summary>
///
/// </summary>
/// <param name="entity"></param>
/// <param name="list"></param>
/// <param name="isNull">默认为true</param>
/// <returns></returns>
public bool Update(T entity, List<string> list = null, bool isNull = true)
{
if (list == null)
{
list = new List<string>()
{
"Create_By",
"Create_time"
};
}
return Context.Updateable(entity).IgnoreColumns(isNull).IgnoreColumns(list.ToArray()).ExecuteCommand() > 0;
} public bool Update(Expression<Func<T, bool>> where, Expression<Func<T, T>> columns)
{
return Context.Updateable<T>().SetColumns(columns).Where(where).RemoveDataCache().ExecuteCommand() > 0;
}
#endregion update public DbResult<bool> UseTran(Action action)
{
var result = Context.Ado.UseTran(() => action());
return result;
} public DbResult<bool> UseTran(SqlSugarClient client, Action action)
{
var result = client.Ado.UseTran(() => action());
return result;
} public bool UseTran2(Action action)
{
var result = Context.Ado.UseTran(() => action());
return result.IsSuccess;
} #region delete /// <summary>
/// 删除表达式
/// </summary>
/// <param name="expression"></param>
/// <returns></returns>
public int Delete(Expression<Func<T, bool>> expression)
{
return Context.Deleteable<T>().Where(expression).ExecuteCommand();
} /// <summary>
/// 批量删除
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public int Delete(object[] obj)
{
return Context.Deleteable<T>().In(obj).ExecuteCommand();
}
public int Delete(object id)
{
return Context.Deleteable<T>(id).ExecuteCommand();
}
public bool DeleteTable()
{
return Context.Deleteable<T>().ExecuteCommand() > 0;
} #endregion delete #region query public bool Any(Expression<Func<T, bool>> expression)
{
return Context.Queryable<T>().Where(expression).Any();
} public ISugarQueryable<T> Queryable()
{
return Context.Queryable<T>();
} public List<T> GetList(Expression<Func<T, bool>> expression)
{
return Context.Queryable<T>().Where(expression).ToList();
} public Task<List<T>> GetListAsync(Expression<Func<T, bool>> expression)
{
return Context.Queryable<T>().Where(expression).ToListAsync();
} public List<T> SqlQueryToList(string sql, object obj = null)
{
return Context.Ado.SqlQuery<T>(sql, obj);
}
/// <summary>
/// 获得一条数据
/// </summary>
/// <param name="where">Expression<Func<T, bool>></param>
/// <returns></returns>
public T GetFirst(Expression<Func<T, bool>> where)
{
return Context.Queryable<T>().Where(where).First();
} /// <summary>
/// 根据主值查询单条数据
/// </summary>
/// <param name="pkValue">主键值</param>
/// <returns>泛型实体</returns>
public T GetId(object pkValue)
{
return Context.Queryable<T>().InSingle(pkValue);
}
/// <summary>
/// 根据条件查询分页数据
/// </summary>
/// <param name="where"></param>
/// <param name="parm"></param>
/// <returns></returns>
public PagedInfo<T> GetPages(Expression<Func<T, bool>> where, PagerInfo parm)
{
var source = Context.Queryable<T>().Where(where); return source.ToPage(parm);
} public PagedInfo<T> GetPages(Expression<Func<T, bool>> where, PagerInfo parm, Expression<Func<T, object>> order, string orderEnum = "Asc")
{
var source = Context.Queryable<T>().Where(where).OrderByIF(orderEnum == "Asc", order, OrderByType.Asc).OrderByIF(orderEnum == "Desc", order, OrderByType.Desc); return source.ToPage(parm);
}
/// <summary>
/// 查询所有数据(无分页,请慎用)
/// </summary>
/// <returns></returns>
public virtual List<T> GetAll(bool useCache = false, int cacheSecond = 3600)
{
if (useCache)
{
var cacheData = this.cacheManager.Get<List<T>>(typeof(T).FullName, (ct) => {
var data = Context.Queryable<T>().ToList();
return data;
}, TimeSpan.FromSeconds(cacheSecond));
if (typeof(SysUser).FullName == typeof(T).FullName)
{ }
return cacheData;
}
return Context.Queryable<T>().WithCacheIF(useCache, cacheSecond).ToList();
} public int Count(Expression<Func<T, bool>> where)
{
return Context.Queryable<T>().Count(where);
}
#endregion query /// <summary>
/// 此方法不带output返回值
/// var list = new List<SugarParameter>();
/// list.Add(new SugarParameter(ParaName, ParaValue)); input
/// </summary>
/// <param name="procedureName"></param>
/// <param name="parameters"></param>
/// <returns></returns>
public DataTable UseStoredProcedureToDataTable(string procedureName, List<SugarParameter> parameters)
{
return Context.Ado.UseStoredProcedure().GetDataTable(procedureName, parameters);
}
public DataSet UseStoredProcedureToDataSet(string procedureName, List<SugarParameter> parameters)
{ var dataResult = new DataSet();
string sql = $"exec {procedureName} "; foreach (var key in parameters)
{
if (!key.Value.IsEmpty())
{
sql = sql + (sql.IndexOf("@") > -1 ? ", " : " ") + $" {key.ParameterName} = {key.ParameterName}";
}
} return Context.Ado.GetDataSetAll(sql, parameters);
return Context.Ado.UseStoredProcedure().GetDataSetAll(procedureName, parameters);
} public int ExecSql(string sql)
{
return Context.Ado.ExecuteCommand(sql,new List<SugarParameter>());
} /// <summary>
/// 带output返回值
/// var list = new List<SugarParameter>();
/// list.Add(new SugarParameter(ParaName, ParaValue, true)); output
/// list.Add(new SugarParameter(ParaName, ParaValue)); input
/// </summary>
/// <param name="procedureName"></param>
/// <param name="parameters"></param>
/// <returns></returns>
public (DataTable, List<SugarParameter>) UseStoredProcedureToTuple(string procedureName, List<SugarParameter> parameters)
{
var result = (Context.Ado.UseStoredProcedure().GetDataTable(procedureName, parameters), parameters);
return result;
} public DataTable QueryableToDataTable(PagerInfo pager)
{
int TotalPageNum = 0;
int TotalNum = 0;
List<SugarParameter> parameters = new List<SugarParameter>(); string sqlWhere = buildSearchFilter(pager, out parameters);
var query = Context.SqlQueryable<object>($"select * from {pager.TableName}").Where(sqlWhere).AddParameters(parameters);
if (pager.OrderBy.IsNotEmpty())
{
query = query.OrderBy(pager.OrderBy);
}
var table = query.ToDataTablePage(pager.PageNum, pager.PageSize, ref TotalPageNum, ref TotalNum); pager.TotalPageNum = TotalPageNum;
pager.TotalNum = TotalNum;
return table;
}
public PagedInfo QueryableToDataTablePage(PagerInfo pager)
{
var table = QueryableToDataTable(pager);
PagedInfo pagedInfo = new PagedInfo();
pagedInfo.PageIndex = pager.PageNum;
pagedInfo.PageSize = pager.PageSize;
pagedInfo.TotalPage = pager.TotalNum;
pagedInfo.TotalCount = pager.TotalPageNum;
pagedInfo.Result = table; // Enumerable.ToList< DataRow >(table);
return pagedInfo;
} private string buildSearchFilter(PagerInfo pager, out List<SugarParameter> parameters)
{
parameters = new List<SugarParameter>();
if (pager.QueryConditions == null || pager.QueryConditions.Count() == 0)
{
return pager.Where;
}
StringBuilder sqlWhere = new StringBuilder(pager.QueryConditions.Count() + 1);
sqlWhere.Append(" 1 = 1 "); int i = 0;
foreach (PageQueryCondition pageQuery in pager.QueryConditions)
{
i++;
string field = pageQuery.FieldName;
var _value = pageQuery.Values; string startValue = null;
if (_value != null)
{
startValue = _value.ElementAtOrDefault(0);
}
if(startValue == null)
continue; if (string.IsNullOrEmpty(startValue) && (pageQuery.Mode != QueryConditionMode.Equal && pageQuery.Mode != QueryConditionMode.NotEqual && pageQuery.Mode != QueryConditionMode.Between && pageQuery.Mode != QueryConditionMode.BetweenAndDate))
continue;
if (!string.IsNullOrEmpty(startValue))
{
startValue = startValue.Replace("'", "''");
}
switch (pageQuery.Mode)
{
case QueryConditionMode.In:
{
for (int q = 0; q < _value.Count; q++)
{
_value[q] = _value[q].Replace("'", "''");
} sqlWhere.Append(string.Format(" and [{0}] in ('"+ string.Join("','", _value) + "')", field, field + i.ToString()));
break;
}
case QueryConditionMode.Equal:
{
if (startValue == null)
{
sqlWhere.Append(string.Format(" and [{0}] is null", field));
break;
}
else
{
sqlWhere.Append(string.Format(" and [{0}]=@{1}", field, field + i.ToString()));
parameters.Add(new SugarParameter(field + i.ToString(), startValue));
break;
} }
case QueryConditionMode.NotEqual:
{
if (startValue == null)
{
sqlWhere.Append(string.Format(" and [{0}] is not null", field));
break;
}
else
{ sqlWhere.Append(string.Format(" and [{0}] <> @{1}", field, field + i.ToString()));
parameters.Add(new SugarParameter(field + i.ToString(), startValue));
break;
}
}
case QueryConditionMode.Greater:
{
sqlWhere.Append(string.Format(" and [{0}]>@{1}", field, field + i.ToString()));
parameters.Add(new SugarParameter(field + i.ToString(), startValue));
break;
}
case QueryConditionMode.GreaterEqual:
{
sqlWhere.Append(string.Format(" and [{0}]>=@{1}", field, field + i.ToString()));
parameters.Add(new SugarParameter(field + i.ToString(), startValue));
break;
}
case QueryConditionMode.Less:
{
sqlWhere.Append(string.Format(" and [{0}]<@{1}", field, field + i.ToString()));
parameters.Add(new SugarParameter(field + i.ToString(), startValue));
break;
}
case QueryConditionMode.LessEqual:
{
sqlWhere.Append(string.Format(" and [{0}]<=@{1}", field, field + i.ToString()));
parameters.Add(new SugarParameter(field + i.ToString(), startValue));
break;
}
case QueryConditionMode.Like:
{
sqlWhere.Append(string.Format(" and CHARINDEX(@{1},[{0}])>0 ", field, field + i.ToString()));
parameters.Add(new SugarParameter(field + i.ToString(), startValue));
break;
}
case QueryConditionMode.Between:
{
var endValue = pageQuery.Values.ElementAtOrDefault(1);
if (string.IsNullOrEmpty(startValue) && string.IsNullOrEmpty(endValue)) break;
endValue = endValue.Replace("'", "''");
dataType(startValue, endValue);
sqlWhere.Append(string.Format(" and ([{0}] between @{1}1 and @{2}2) ", field, field + i.ToString(), field + i.ToString()));
parameters.Add(new SugarParameter(string.Format("@{0}1", field + i.ToString()), startValue));
parameters.Add(new SugarParameter(string.Format("@{0}2", field + i.ToString()), endValue)); break;
}
case QueryConditionMode.BetweenAndDate:
{
var endValue = pageQuery.Values.ElementAtOrDefault(1);
if (endValue == null)
endValue = "";
if (!startValue.IsEmpty() && startValue.IndexOf(" - ") > -1)
{
string splitStr = " - ";
string _startValue = startValue;
startValue = _startValue.Substring(0, _startValue.IndexOf(splitStr));
endValue = _startValue.Substring(_startValue.IndexOf(splitStr) + splitStr.Length);
}
if (string.IsNullOrEmpty(startValue) && string.IsNullOrEmpty(endValue)) break;
endValue = endValue.Replace("'", "''"); DateTime outDateTime;
if (DateTime.TryParse(startValue, out outDateTime))
{
startValue = outDateTime.ToString("yyyy-MM-dd 00:00:00");
}
else
{
startValue = "1900-01-01 00:00:00";
}
if (DateTime.TryParse(endValue, out outDateTime))
{
endValue = outDateTime.ToString("yyyy-MM-dd 23:59:59");
}
else
{
endValue = "2099-01-01 23:59:59";
}
sqlWhere.Append(string.Format(" and ([{0}] between @{1}1 and @{2}2) ", field, field + i.ToString(), field + i.ToString()));
parameters.Add(new SugarParameter(string.Format("@{0}1", field + i.ToString()), startValue));
parameters.Add(new SugarParameter(string.Format("@{0}2", field + i.ToString()), endValue));
break;
}
}
}
return pager.Where.IsEmpty()? sqlWhere.ToString():pager.Where+ " and "+ sqlWhere.ToString();
}
/// <summary>
/// 判断值的数据类型
/// </summary>
/// <returns></returns>
private void dataType(string startValue, string endValue)
{
DateTime outDateTime;
if (DateTime.TryParse(startValue, out outDateTime) || DateTime.TryParse(endValue, out outDateTime))
{
startValue = string.IsNullOrEmpty(startValue) ? "1900-01-01 00:00:00" : startValue;
endValue = string.IsNullOrEmpty(startValue) ? "2050-01-01 23:59:59" : startValue;
}
double outi = 0;
if (double.TryParse(startValue, out outi) || double.TryParse(endValue, out outi))
{
startValue = string.IsNullOrEmpty(startValue) ? int.MinValue.ToString() : startValue;
endValue = string.IsNullOrEmpty(startValue) ? int.MinValue.ToString() : startValue;
}
}
} public static class QueryableExtension
{
/// <summary>
/// 读取列表
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="source"></param>
/// <param name="parm"></param>
/// <returns></returns>
public static PagedInfo<T> ToPage<T>(this ISugarQueryable<T> source, PagerInfo parm)
{
var page = new PagedInfo<T>();
var total = source.Count();
page.TotalCount = total;
page.PageSize = parm.PageSize;
page.PageIndex = parm.PageNum;
page.Result = source.ToPageList(parm.PageNum, parm.PageSize);
return page;
}
public static PagedInfo<DataTable> ToPageDataTable<T>(this ISugarQueryable<T> source, PagerInfo parm)
{
var page = new PagedInfo<DataTable>();
var total = source.Count();
page.TotalCount = total;
page.PageSize = parm.PageSize;
page.PageIndex = parm.PageNum;
page.DataTable = source.ToDataTablePage(parm.PageNum, parm.PageSize);
return page;
}
}
}

到此,菜单管理模块通过hisql完成了 菜单的新增、编辑、删除、查看详情。





.NET ORM框架HiSql实战-第二章-使用Hisql实现菜单管理(增删改查)的更多相关文章

  1. .NET Core实战项目之CMS 第十五章 各层联动工作实现增删改查业务

    连着两天更新叙述性的文章大家可别以为我转行了!哈哈!今天就继续讲讲我们的.NET Core实战项目之CMS系统的教程吧!这个系列教程拖得太久了,所以今天我就以菜单部分的增删改查为例来讲述下我的项目分层 ...

  2. shell编程系列22--shell操作数据库实战之shell脚本与MySQL数据库交互(增删改查)

    shell编程系列22--shell操作数据库实战之shell脚本与MySQL数据库交互(增删改查) Shell脚本与MySQL数据库交互(增删改查) # 环境准备:安装mariadb 数据库 [ro ...

  3. Struts2+Spring+Hibernate实现员工管理增删改查功能(一)之ssh框架整合

    前言        转载请标明出处:http://www.cnblogs.com/smfx1314/p/7795837.html 本项目是我写的一个练习,目的是回顾ssh框架的整合以及使用.项目介绍: ...

  4. .NET ORM框架HiSql实战-第一章-集成HiSql

    一.引言 做.Net这么多年,出现了很多很多ORM框架,比如Dapper,Sqlsugar,Freesql等等.在之前的项目中,用到的ORM框架也大多数是这几个老牌的框架. 不过最近园子关于.NET ...

  5. Mybatis框架基于映射文件和配置文件的方式,实现增删改查,可以打印日志信息

    首先在lib下导入: 与打印日志信息有关的架包 log4j-1.2.16.jar mybatis架包:mybatis-3.1.1.jar 连接数据库的架包:mysql-connector-java-5 ...

  6. Mybatis框架基于注解的方式,实对数据现增删改查

    编写Mybatis代码,与spring不一样,不需要导入插件,只需导入架包即可: 在lib下 导入mybatis架包:mybatis-3.1.1.jarmysql驱动架包:mysql-connecto ...

  7. Python笔记·第五章—— 列表(List) 的增删改查及其他方法

    一.列表的简介   列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[ ]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如:li = ...

  8. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_3-2.使用Mybatis注解开发视频列表增删改查

    笔记 2.使用Mybatis注解开发视频列表增删改查     讲解:使用Mybatis3.x注解方式 增删改查实操, 控制台打印sql语句              1.控制台打印sql语句      ...

  9. AppBox实战: 如何实现一对多表单的增删改查

      本篇通过完整示例介绍如何实现一对多关系表单的相应服务及视图. 一.准备数据结构   示例所采用的数据结构为"物资需求"一对多"物资清单",通过IDE的实体设 ...

随机推荐

  1. 茴香豆的“茴”有四种写法,Python的格式化字符串也有

    茴香豆的"茴"有四种写法,Python的格式化字符串也有 茴香豆的"茴"有四种写法,Python的格式化字符串也有 被低估的断言 多一个逗号,少一点糟心事 上下 ...

  2. python数据处理-matplotlib入门(4)-条形图和直方图

    摘要:先介绍条形图直方图,然后用随机数生成一系列数据,保存到列表中,最后统计出相关随机数据的概率并展示 前述介绍了由点进行划线形成的拆线图和散点形成的曲线图,连点成线,主要用到了matplotlib中 ...

  3. QtWebEngine性能问题

    目录 1. 概述 2. 详论 2.1. 图形属性设置 2.2. 硬件加速设置 2.3. Qt6 3. 参考 1. 概述 Qt的Qt WebEngine模块是基于Chromium项目,但是本人在使用QW ...

  4. 巧用 Docker 快速部署 GPU 环境

    公众号关注 「开源Linux」 回复「学习」,有我为您特别筛选的学习资料~ 在 Linux 服务器上使用 GPU 跑深度学习的模型很正常不过.如果我们想用 Docker 实现同样的需求,就需要做些额外 ...

  5. re模块,正则表达式起别名和分组机制,collections模块,time与datetime模块,random模块

    re模块和正则表达式别名和分组机制 命名分组 (1)分组--可以让我们从文本内容中提取指定模式的部分内容,用()来表示要提取的分组,需要注意的是分组 是在整个文本符合指定的正则表达式前提下进行的进一步 ...

  6. 3┃音视频直播系统之浏览器中通过 WebRTC 直播视频实时录制回放下载

    一.录制分类 在音视频会议.在线教育等系统中,录制是一个特别重要的功能 录制一般分为服务端录制和客户端录制 服务端录制:优点是不用担心客户因自身电脑问题造成录制失败(如磁盘空间不足),也不会因录制时抢 ...

  7. 709. To Lower Case - LeetCode

    Question 709. To Lower Case Sollution 题目大意:字符串大写转小写 思路: 直接调用Java API函数 字符串转char数组,遍历数组,判断如果大写就转小写 Ja ...

  8. 120_PowerBI堆积瀑布图_R脚本Visual

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.效果 二.data 三.添加字段 注意红色框标注地方 四.code # 下面用于创建数据帧并删除重复行的代码始终执行, ...

  9. 【leetcode】239. 滑动窗口最大值

    目录 题目 题解 三种解法 "单调队列"解法 新增.获取最大值 删除 代码 题目 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以 ...

  10. 【FineBI】增量数据更新语句

    SELECT * FROM t_abike_user WHERE AddUserTime BETWEEN '2016-11-17 10:49:04' AND '2021-07-31 23:59:59'