.NET(C#) Dapper Oracle(ODP.NET)或SQL Server 执行多条查询(select)语句的方法代码
本文主要介绍.NET(C#)DapperOracle或SQLserver中,在一次数据库连接中,执行多条select查询语句,并且获取到相对应的查询结果。
【.Net】
本文主要介绍.NET(C#)中通过Process调用SetRes.exe命令修改屏幕显示器分辨率方法代码。
MySQLJSON_TYPE()函数返回一个给定的JSON值的类型。JSON_TYPE()语法这里是MySQLJSON_TYPE()的语法:JSON_TYPE(json_value)参数json_value必需的。一个JSON值。返回值JSON_TYPE()函数返回一个utf8mb4字符串,它代表了
当使用SELECT查询数据时,如果WHERE子句中有多个条件,可以根据需要使用AND,OR,或者NOT运算符将他们组合起来。本文主要介绍AND运算符。AND运算规则AND运算符是一个双目逻辑运算符,用来组合两个操作数。只有当两个操作数都为真时,结果才返回真,否则返回假或者NULL。AND运算符语法:
MySQLIS_IPV4()函数检查给定的参数是否是一个合法的IPv4地址。IS_IPV4()语法这里是MySQLIS_IPV4()函数的语法:IS_IPV4(ip)参数ip必需的。一个待检查的IPv4地址。返回值MySQLIS_IPV4()函数检查给定的参数是否是一个合法的IPv4地址,如果是返回
完整代码案例中使用了一个简单的工厂模式///summary ///抽奖抽象类 ////summary pub
今天分享一下我在uni-app创建并运行微信小程序项目时遇到的问题和解决办法,分两步给大家说明,第一步是没有任何报错下的流程,第二部是遇到的问题和解决办法;一、正常情况(无报错)下的流程:1、打开HBuilderX,点击文件,选择新建一个项目创建成功后选中项目2、点击HBuilderX菜单栏工具下面的设置,然后在运行配置里面设置微信开发者工具的安装路径3、在微信开发者工具中,点击设置下面的安全设置,然后开启服务端口4、最后在HBuilderX运行配置中填写web服务调
ExcelReport是一个Excel模板渲染引擎。它基于关注点分离的理念,将数据与表格样式、字体格式分离。其中模板承载的表格样式、字体格式在可视化的情况下编辑。开发人员只需要绑定数据与目标标签的对应关系。ExcelReport就可以以数据驱动的方式渲染出目标报表。本文主要介绍.NETCore(C#)中,使用ExcelReport(NPOI)通过CSV模板生成CSV报表,生成CSV文件中的数据表格,以及相关示例代码。
介绍此系列文章主要是对ABP源码进行解读,初探作者在创造ABP的框架思路,和使用到的设计模式进行。通过解读ABP源码,可以提升ABP使用方式,可以提升编码意识,提高面向对象编程思想。本篇文章主要介绍ABP框架的缓存实现机制。UMLUMLICache:定义一个可以存储并通过键获取项目的缓存CacheBase:基类缓存,简单实现ICacheAbpMemoryCache:使用MemoryCache实现ICacheICacheManager:缓存管理器应该,单例对象,跟踪和管理缓存对象CacheManagerBase:缓存管理器的基类AbpMemoryCacheManager:使用MemoryCache实现ICacheManagerICacheConfigurator:缓存配置器CacheConfigurator:实现ICacheConfiguratorICachingConfiguration:缓存系统配置CachingConfiguration:实现ICachingConfiguration源码解析ICacheICache主要是定义一个缓存项目接口,并且提供超时时间、获取值、设置缓存等内容。ABP系统默认系统了四个项目:应用程式设置缓存、租户设置缓存、用户设置缓存、多语言脚本缓存///<summary>///Definesacachethatcanbestoreandgetitemsbykeys.///定义一个可以存储并通过键获取项目的缓存///</summary>publicinterfaceICache:IDisposable{///<summary>///Uniquenameofthecache.///缓存唯一的名称///</summary>stringName{get;}///<summary>///Defaultslidingexpiretimeofcacheitems.///Defaultvalue:60minutes(1hour).///Canbechangedbyconfiguration.///默认缓存过期时间///默认值是1小时///可以通过配置改变///</summary>TimeSpanDefaultSlidingExpireTime{get;set;}///<summary>///Defaultabsoluteexpiretimeofcacheitems.///Defaultvalue:null(notused).///默认的缓存项的绝对过期时间///默认值:null(没有使用)///</summary>TimeSpan?DefaultAbsoluteExpireTime{get;set;}///<summary>///Getsanitemfromthecache.///Thismethodhidescacheproviderfailures(andlogsthem),///usesthefactorymethodtogettheobjectifcacheproviderfails.///从缓存中获取一个项目///这个方法隐藏了缓存提供者失败信息(并记录它们),如果缓存提供者失败,则使用工厂方法来获取对象///</summary>///<paramname="key">Key</param>///<paramname="factory">Factorymethodtocreatecacheitemifnotexists///如果不存在的话,创建缓存项的工厂方法///</param>///<returns>Cacheditem</returns>objectGet(stringkey,Func<string,object>factory);///<summary>///Getsanitemfromthecache.///Thismethodhidescacheproviderfailures(andlogsthem),///usesthefactorymethodtogettheobjectifcacheproviderfails.///</summary>///<paramname="key">Key</param>///<paramname="factory">Factorymethodtocreatecacheitemifnotexists</param>///<returns>Cacheditem</returns>Task<object>GetAsync(stringkey,Func<string,Task<object>>factory);///<summary>///Getsanitemfromthecacheornullifnotfound.///从缓存中获取一个项目,如果没有找到,则可以获得null///</summary>///<paramname="key">Key</param>///<returns>Cacheditemornullifnotfound</returns>objectGetOrDefault(stringkey);///<summary>///Getsanitemfromthecacheornullifnotfound.///</summary>///<paramname="key">Key</param>///<returns>Cacheditemornullifnotfound</returns>Task<object>GetOrDefaultAsync(stringkey);///<summary>///Saves/Overridesaniteminthecachebyakey.///Useoneoftheexpiretimesatmost(<paramrefname="slidingExpireTime"/>or<paramrefname="absoluteExpireTime"/>).///Ifnoneofthemisspecified,then///<seecref="DefaultAbsoluteExpireTime"/>willbeusedifit'snotnull.Othewise,<seecref="DefaultSlidingExpireTime"/>///willbeused.///在缓存中通过一个键来覆盖一个条目///</summary>///<paramname="key">Key</param>///<paramname="value">Value</param>///<paramname="slidingExpireTime">Slidingexpiretime</param>///<paramname="absoluteExpireTime">Absoluteexpiretime</param>voidSet(stringkey,objectvalue,TimeSpan?slidingExpireTime=null,TimeSpan?absoluteExpireTime=null);///<summary>///Saves/Overridesaniteminthecachebyakey.///Useoneoftheexpiretimesatmost(<paramrefname="slidingExpireTime"/>or<paramrefname="absoluteExpireTime"/>).///Ifnoneofthemisspecified,then///<seecref="DefaultAbsoluteExpireTime"/>willbeusedifit'snotnull.Othewise,<seecref="DefaultSlidingExpireTime"/>///willbeused.///</summary>///<paramname="key">Key</param>///<paramname="value">Value</param>///<paramname="slidingExpireTime">Slidingexpiretime</param>///<paramname="absoluteExpireTime">Absoluteexpiretime</param>TaskSetAsync(stringkey,objectvalue,TimeSpan?slidingExpireTime=null,TimeSpan?absoluteExpireTime=null);///<summary>///Removesacacheitembyit'skey.///通过它的键删除缓存项///</summary>///<paramname="key">Key</param>voidRemove(stringkey);///<summary>///Removesacacheitembyit'skey(doesnothingifgivenkeydoesnotexistsinthecache).///</summary>///<paramname="key">Key</param>TaskRemoveAsync(stringkey);///<summary>///Clearsallitemsinthiscache.///清除缓存中的所有项///</summary>voidClear();///<summary>///Clearsallitemsinthiscache.///</summary>TaskClearAsync();}CacheBase缓存项目基类只要实现了基本的存取操作,但是具体的实现,下沉到子类实现///<summary>///Base>///It'susedtosimplifyimplementing<seecref="ICache"/>.///基类缓存///简单实现<seecref="ICache"/>///</summary>publicabstract>CacheBase:ICache{publicILoggerLogger{get;set;}publicstringName{get;}publicTimeSpanDefaultSlidingExpireTime{get;set;}publicTimeSpan?DefaultAbsoluteExpireTime{get;set;}protectedreadonlyobjectSyncObj=newobject();privatereadonlyAsyncLock_asyncLock=newAsyncLock();///<summary>///Constructor.///</summary>///<paramname="name"></param>protectedCacheBase(stringname){Name=name;DefaultSlidingExpireTime=TimeSpan.FromHours(1);Logger=NullLogger.Instance;}publicvirtualobjectGet(stringkey,Func<string,object>factory){objectitem=null;try{item=GetOrDefault(key);}catch(Exceptionex){Logger.Error(ex.ToString(),ex);}if(item==null){lock(SyncObj){try{item=GetOrDefault(key);}catch(Exceptionex){Logger.Error(ex.ToString(),ex);}if(item==null){item=factory(key);if(item==null){returnnull;}try{Set(key,item);}catch(Exceptionex){Logger.Error(ex.ToString(),ex);}}}}returnitem;}publicvirtualasyncTask<object>GetAsync(stringkey,Func<string,Task<object>>factory){objectitem=null;try{item=awaitGetOrDefaultAsync(key);}catch(Exceptionex){Logger.Error(ex.ToString(),ex);}if(item==null){using(await_asyncLock.LockAsync()){try{item=awaitGetOrDefaultAsync(key);}catch(Exceptionex){Logger.Error(ex.ToString(),ex);}if(item==null){item=awaitfactory(key);if(item==null){returnnull;}try{awaitSetAsync(key,item);}catch(Exceptionex){Logger.Error(ex.ToString(),ex);}}}}returnitem;}publicabstractobjectGetOrDefault(stringkey);publicvirtualTask<object>GetOrDefaultAsync(stringkey){returnTask.FromResult(GetOrDefault(key));}publicabstractvoidSet(stringkey,objectvalue,TimeSpan?slidingExpireTime=null,TimeSpan?absoluteExpireTime=null);publicvirtualTaskSetAsync(stringkey,objectvalue,TimeSpan?slidingExpireTime=null,TimeSpan?absoluteExpireTime=null){Set(key,value,slidingExpireTime);returnTask.FromResult(0);}publicabstractvoidRemove(stringkey);publicvirtualTaskRemoveAsync(stringkey){Remove(key);returnTask.FromResult(0);}publicabstractvoidClear();publicvirtualTaskClearAsync(){Clear();returnTask.FromResult(0);}publicvirtualvoidDispose(){}}AbpMemoryCacheAbpMemoryCache是基于MemoryCache实现ICache,使用具体的缓存技术实现缓存项目///<summary>///Implements<seecref="ICache"/>toworkwith<seecref="MemoryCache"/>.///使用<seecref="MemoryCache"/>实现<seecref="ICache"/>///</summary>public>AbpMemoryCache:CacheBase{privateMemoryCache_memoryCache;///<summary>///Constructor.///</summary>///<paramname="name">Uniquenameofthecache</param>publicAbpMemoryCache(stringname):base(name){_memoryCache=newMemoryCache(newOptionsWrapper<MemoryCacheOptions>(newMemoryCacheOptions()));}publicoverrideobjectGetOrDefault(stringkey){return_memoryCache.Get(key);}publicoverridevoidSet(stringkey,objectvalue,TimeSpan?slidingExpireTime=null,TimeSpan?absoluteExpireTime=null){if(value==null){thrownewAbpException("Cannotinsertnullvaluestothecache!");}if(absoluteExpireTime!=null){_memoryCache.Set(key,value,DateTimeOffset.Now.Add(absoluteExpireTime.Value));}elseif(slidingExpireTime!=null){_memoryCache.Set(key,value,slidingExpireTime.Value);}elseif(DefaultAbsoluteExpireTime!=null){_memoryCache.Set(key,value,DateTimeOffset.Now.Add(DefaultAbsoluteExpireTime.Value));}else{_memoryCache.Set(key,value,DefaultSlidingExpireTime);}}publicoverridevoidRemove(stringkey){_memoryCache.Remove(key);}publicoverridevoidClear(){_memoryCache.Dispose();_memoryCache=newMemoryCache(newOptionsWrapper<MemoryCacheOptions>(newMemoryCacheOptions()));}publicoverridevoidDispose(){_memoryCache.Dispose();base.Dispose();}}ICacheManager缓存管理器应该,单例对象,跟踪和管理缓存对象///<summary>///Anupperlevelcontainerfor<seecref="ICache"/>objects.///AcachemanagershouldworkasSingletonandtrackandmanage<seecref="ICache"/>objects.///缓存管理器应该,单例对象,跟踪和管理缓存对象///</summary>publicinterfaceICacheManager:IDisposable{///<summary>///Getsallcaches.///获取所有缓存///</summary>///<returns>Listofcaches</returns>IReadOnlyList<ICache>GetAllCaches();///<summary>///Getsa<seecref="ICache"/>instance.///Itmaycreatethecacheifitdoesnotalreadyexists.///获取缓存实例///如果缓存不存在,则创建缓存///</summary>///<paramname="name">///Uniqueandcasesensitivenameofthecache.///缓存的唯一的名称,大小写敏感///</param>///<returns>Thecachereference</returns>[NotNull]ICacheGetCache([NotNull]stringname);}CacheManagerBase缓存管理器的基类,实现基本的操作,将具体的算法下层到子类实现///<summary>///Base>///缓存管理器的基类///</summary>publicabstract>CacheManagerBase:ICacheManager,ISingletonDependency{protectedreadonlyIIocManagerIocManager;protectedreadonlyICachingConfigurationConfiguration;protectedreadonlyConcurrentDictionary<string,ICache>Caches;///<summary>///Constructor.///</summary>///<paramname="iocManager"></param>///<paramname="configuration"></param>protectedCacheManagerBase(IIocManageriocManager,ICachingConfigurationconfiguration){IocManager=iocManager;Configuration=configuration;Caches=newConcurrentDictionary<string,ICache>();}publicIReadOnlyList<ICache>GetAllCaches(){returnCaches.Values.ToImmutableList();}publicvirtualICacheGetCache(stringname){Check.NotNull(name,nameof(name));returnCaches.GetOrAdd(name,(cacheName)=>{varcache=CreateCacheImplementation(cacheName);varconfigurators=Configuration.Configurators.Where(c=>c.CacheName==null||c.CacheName==cacheName);foreach(varconfiguratorinconfigurators){configurator.InitAction?.Invoke(cache);}returncache;});}publicvirtualvoidDispose(){DisposeCaches();Caches.Clear();}protectedvirtualvoidDisposeCaches(){foreach(varcacheinCaches){IocManager.Release(cache.Value);}}///<summary>///Usedtocreateactualcacheimplementation.///用于创建实际的缓存实现///</summary>///<paramname="name">Nameofthecache</param>///<returns>Cacheobject</returns>protectedabstractICacheCreateCacheImplementation(stringname);}AbpMemoryCacheManager使用MemoryCache实现的ICacheManager,使用具体的缓存组件实现ICacheManager,实现父类CacheManagerBase的方法///<summary>///Implements<seecref="ICacheManager"/>toworkwithMemoryCache.///使用MemoryCache实现<seecref="ICacheManager"/>///</summary>public>AbpMemoryCacheManager:CacheManagerBase{publicILoggerLogger{get;set;}///<summary>///Constructor.///</summary>publicAbpMemoryCacheManager(IIocManageriocManager,ICachingConfigurationconfiguration):base(iocManager,configuration){Logger=NullLogger.Instance;}protectedoverrideICacheCreateCacheImplementation(stringname){returnnewAbpMemoryCache(name){Logger=Logger};}protectedoverridevoidDisposeCaches(){foreach(varcacheinCaches.Values){cache.Dispose();}}}ICacheConfigurator缓存配置器,配置单个缓存项目,主要是配置创建之后的调用方法///<summary>///Aregisteredcacheconfigurator.///缓存配置器///</summary>publicinterfaceICacheConfigurator{///<summary>///Nameofthecache.///Itwillbenullifthisconfiguratorconpsallcaches.///缓存名称,如果这个配置器配置了所有的缓存,它就会是null///</summary>stringCacheName{get;}///<summary>///Configurationaction.Calledjustafterthecacheiscreated.///配置操作。在缓存创建之后调用///</summary>Action<ICache>InitAction{get;}}ICachingConfiguration缓存系统配置,配置多个ICache信息///<summary>///Usedtoconpcachingsystem.///缓存系统配置///</summary>publicinterfaceICachingConfiguration{///<summary>///GetstheABPconfigurationobject.///ABP配置值系统///</summary>IAbpStartupConfigurationAbpConfiguration{get;}///<summary>///Listofallregisteredconfigurators.///所有已注册的配置器列表///</summary>IReadOnlyList<ICacheConfigurator>Configurators{get;}///<summary>///Usedtoconpallcaches.///用于配置所有缓存///</summary>///<paramname="initAction">///Anactiontoconpcaches///Thisactioniscalledforeachcachejustaftercreated.///配置缓存的操作///这个动作在创建后的每个缓存中都被调用///</param>voidConpAll(Action<ICache>initAction);///<summary>///Usedtoconpaspecificcache.///用于配置特定的缓存///</summary>///<paramname="cacheName">Cachename</param>///<paramname="initAction">///Anactiontoconpthecache.///Thisactioniscalledjustafterthecacheiscreated.///</param>voidConp(stringcacheName,Action<ICache>initAction);}设计模式模板方法模式:ICacheManager,CacheManagerBase,AbpMemoryCacheManager,父类实现主要算法,定义调用顺序和过程,子类实现具体算法桥接模式:ICacheManager,ICache独立变化Manager和Cache,是的Manager和Cache可以独自扩展我的公众
本文主要介绍.NET(C#)DapperOracle或SQLserver中,在一次数据库连接中,执行多条select查询语句,并且获取到相对应的查询结果。
【.Net】
EF生成实体数据模型时,当是数据库中的【 数值类型 】使用填充零,会自动勾选无符号。在生成实体数据模型包上述
【.Net】
Java中解析xml文件方法有3种:DOM解析XML、SAX解析XML、Digester解析XML,本文主要介绍Dom解析,DocumentBuilderFactory(javax.xml)通过XPath方式解析xml文件。
【Java】
Java中配置文件实例主要有两种方式,一种是通过xml配置文件,另一种是通过properties配置文件,本文主要介绍一下这两种文件加载读取方法。
【Java】
在实际的软件系统开发过程中,随着使用的用户群体越来越多,表数据也会随着时间的推移,单表的数据量会越来越大。以订单表为例,假如每天的订单量在 4 万左右,那么一个月的订单量就是 120 多万,一年就是 1400 多万,随着年数的增加和单日下单量的增加,订单表的数据量会越来越庞大,订单数据的查询不会像最初那样简单快速,如果查询关键字段没有走索引,会直接影响到用户体验,甚至会影响到服务是否能正常运行!
【Database】
业务需求:生成小程序的二维码,并携带指定参数;生成小程序二维码官方链接官方提供两个接口,我选择了wxacode.getUnlimited,生成数量不受限制;1.首先需要获取微信的access_token/***获取微信accesstoken**@paramwxappid*@paramwxappkey*@return*/publicstaticStringgetWxAces...
【小程序】
获取当前的地理位置、速度。当用户离开小程序后,此接口无法调用。需要用户授权wx.startLocationUpdate({success:res=>{console.log('startLocationUpdate用户开启使用小程序期间位置权限:',res)wx.onLocationChange(_locationChan
【小程序】
1打开ps,点击文件。点击新建,新建画布。2点击左侧矩形工具,画一个矩形。3再按住alt键再画一个矩形。4上方路径操作选择合并形状组件。5这样两个形状就会变成一个整体了。6总结如下。END
【开发技巧】
眼能够看到的地方,都是充满回忆的,心里想到的东西,都成为过去了”,表达了对往事的回忆和憧憬。全句尾为:目之所及,皆是回忆;心之所想,皆是过往;眼之所看,皆是遗憾。
【开发技巧】