.NET ORM框架HiSql实战-第二章-使用Hisql实现菜单管理(增删改查)
一、引言
上一篇.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实现菜单管理(增删改查)的更多相关文章
- .NET Core实战项目之CMS 第十五章 各层联动工作实现增删改查业务
连着两天更新叙述性的文章大家可别以为我转行了!哈哈!今天就继续讲讲我们的.NET Core实战项目之CMS系统的教程吧!这个系列教程拖得太久了,所以今天我就以菜单部分的增删改查为例来讲述下我的项目分层 ...
- shell编程系列22--shell操作数据库实战之shell脚本与MySQL数据库交互(增删改查)
shell编程系列22--shell操作数据库实战之shell脚本与MySQL数据库交互(增删改查) Shell脚本与MySQL数据库交互(增删改查) # 环境准备:安装mariadb 数据库 [ro ...
- Struts2+Spring+Hibernate实现员工管理增删改查功能(一)之ssh框架整合
前言 转载请标明出处:http://www.cnblogs.com/smfx1314/p/7795837.html 本项目是我写的一个练习,目的是回顾ssh框架的整合以及使用.项目介绍: ...
- .NET ORM框架HiSql实战-第一章-集成HiSql
一.引言 做.Net这么多年,出现了很多很多ORM框架,比如Dapper,Sqlsugar,Freesql等等.在之前的项目中,用到的ORM框架也大多数是这几个老牌的框架. 不过最近园子关于.NET ...
- Mybatis框架基于映射文件和配置文件的方式,实现增删改查,可以打印日志信息
首先在lib下导入: 与打印日志信息有关的架包 log4j-1.2.16.jar mybatis架包:mybatis-3.1.1.jar 连接数据库的架包:mysql-connector-java-5 ...
- Mybatis框架基于注解的方式,实对数据现增删改查
编写Mybatis代码,与spring不一样,不需要导入插件,只需导入架包即可: 在lib下 导入mybatis架包:mybatis-3.1.1.jarmysql驱动架包:mysql-connecto ...
- Python笔记·第五章—— 列表(List) 的增删改查及其他方法
一.列表的简介 列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[ ]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如:li = ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_3-2.使用Mybatis注解开发视频列表增删改查
笔记 2.使用Mybatis注解开发视频列表增删改查 讲解:使用Mybatis3.x注解方式 增删改查实操, 控制台打印sql语句 1.控制台打印sql语句 ...
- AppBox实战: 如何实现一对多表单的增删改查
本篇通过完整示例介绍如何实现一对多关系表单的相应服务及视图. 一.准备数据结构 示例所采用的数据结构为"物资需求"一对多"物资清单",通过IDE的实体设 ...
随机推荐
- KTL 一个支持C++14编辑公式的K线技术工具平台 - 第五版,支持sqlite3,全新sqlite3zz语法超简单使用sqlite3; 添加方差等统计函数。
K,K线,Candle蜡烛图. T,技术分析,工具平台 L,公式Language语言使用c++14,Lite小巧简易. 项目仓库:https://github.com/bbqz007/KTL 国内仓库 ...
- PHP入门-Window 下利用Nginx+PHP 搭建环境
前言 最近公司有个PHP项目需要开发维护,之前一直都是跟着巨硬混的,现在要接触PHP项目.学习一门新语言之前,先搭建好环境吧,鉴于公司项目是基于php 7.1.33 版本的,所以以下我使用的都是基于这 ...
- wireshark、tcpdump使用笔记
最近使用wireshark抓包icmp协议,过滤的命令如下所示: ip.addr eq 192.168.20.54 and ip.addr eq 192.168.50.131 and (icmp) 如 ...
- 聊聊Lock接口的lock()和lockInterruptible()有什么区别?
lock()和lockInterruptible()都表示获取锁,唯一区别是,当A线程调用lock()或lockInterruptible()方法获取锁没有成功而进入等待锁的状态时,若接着调用该A线程 ...
- php魔术方法小结
php魔术方法 __construct() __construct(mixed ...$values = ""): void PHP 允许开发者在一个类中定义一个方法作为构造函数. ...
- 技术管理进阶——空降Leader如何开展工作?
原创不易,求分享.求一键三连 前几天有个粉丝咨询了一个的问题: 最近遇到一个空降Leader,挺苦恼的: 新Leader技术很厉害,但平时根本就不管我们,也不愿意了解业务,更像是一个技术顾问. 具体案 ...
- Fastflow——基于golang的轻量级工作流框架
Fastflow 是什么?用一句话来定义它:一个 基于golang协程.支持水平扩容的分布式高性能工作流框架. 它具有以下特点: 易用性:工作流模型基于 DAG 来定义,同时还提供开箱即用的 API, ...
- 关于我学git这档子事(4)
------------恢复内容开始------------ 当本地分支(main/dev)比远程仓库分支(main/dev)落后几次提交时 先: git pull 更新本地仓库 再 git push ...
- python基础学习7
python基础学习7 内容概要 字符串的内置方法 字符串的内置方法(补充) 列表的内置方法 可变类型与不可变类型 队列与堆栈 内容详情 字符串的内置方法 # 1.strip 移除字符串首尾的指定字符 ...
- 大数据分析VMWare虚拟机centos系统下配置网络参数
最近搞大数据方面的数据,通过网上视频学习和自己实践,有些不成文的实践就零碎的记录在此吧. 系统也可安装CentOS DVD版. 1.先进入配置文件,并查看基本情况,如下: 2.用vi编辑器打开物理网卡 ...