惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
J
Java Code Geeks
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
H
Hackread – Cybersecurity News, Data Breaches, AI and More
V
Visual Studio Blog
G
Google Developers Blog
V
V2EX
The Register - Security
The Register - Security
博客园 - 三生石上(FineUI控件)
云风的 BLOG
云风的 BLOG
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园_首页
S
SegmentFault 最新的问题
博客园 - Franky
Martin Fowler
Martin Fowler
Stack Overflow Blog
Stack Overflow Blog
A
About on SuperTechFans
人人都是产品经理
人人都是产品经理
aimingoo的专栏
aimingoo的专栏
罗磊的独立博客
C
Check Point Blog
MyScale Blog
MyScale Blog
T
The Blog of Author Tim Ferriss
MongoDB | Blog
MongoDB | Blog
The GitHub Blog
The GitHub Blog
Last Week in AI
Last Week in AI
Microsoft Azure Blog
Microsoft Azure Blog
IT之家
IT之家
F
Fortinet All Blogs
Jina AI
Jina AI
P
Proofpoint News Feed
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
阮一峰的网络日志
阮一峰的网络日志
B
Blog
L
LangChain Blog
月光博客
月光博客
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
宝玉的分享
宝玉的分享
博客园 - 【当耐特】
T
Tailwind CSS Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Microsoft Security Blog
Microsoft Security Blog
WordPress大学
WordPress大学
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
B
Blog RSS Feed
博客园 - 聂微东
Hugging Face - Blog
Hugging Face - Blog
M
MIT News - Artificial intelligence
GbyAI
GbyAI

博客园 - craboYang

JVM: can not create native thread 注解式功能权限控制机制 SqlInXml 动态配置化 ElasticSearch5集群部署指南 Solr5 DataImport 处理1对多关系 C# XMPP客户端与openfire通信(Matrix Xmpp 授权破解教程) 响应式编程 Part.01 (Layout and MVVM) Mono.Ceil 无法保存Silverlight 程序集 基于system.diagnostics Trace的日志输出 Dappers 开发入门 (4) - 明细编辑 Dappers 开发入门(3)- 列表界面 Dappers 开发入门(2) - Mapping Dappers 开发入门(1) - 接口 Dappers : 基于Dapper.net 扩展的Dao - Part II Dappers : 基于Dapper.net 扩展的Dao B/S页面 通用权限控制(2) B/S页面 通用数据权限控制 由于ContractFilter在EndpointDispatcher不匹配,因此Action为<BtsActionMapping...的消息无法在接收方处理 - craboYang - 博客园 WinForm DataGridView 绑定后仅显示许多空行和空格
Dappers 开发入门 (5) - 缓存
craboYang · 2012-04-10 · via 博客园 - craboYang

Dappers内部定义了3个重要的Info对象: MappingInfo, StatementInfo, QueryInfo

  • MappingInfo对应了一个Domain实体对象,描述了 类/表 , 属性/列名 映射关系。 自动的sql语句创建也是基于 MappingInfo. Select , MappingInfo.Update, MappingInfo.Delete, MappingInfo.Insert 。根据主键, 属性的Attribute描述,可以指定某些属性不映射到列, 可以指定某些属性仅可Insert不可Update等。
  • StatementInfo对应了类myBatis 的sql配置的每一个key-value。它将value解析为 Sql、DynamicCriterias。 执行语句时,只需动态遍历参数,即可确定当前有效的Criteria,从而构建完整sql语句。 internal class Criteria

        {
            public bool? IsOr { getset; }
            public bool IsInClause { getset; } 
            public string[] Cons { getset; }
            public string ParamName { getset; }
            public string Criterion { getset; }
        }

  •  QueryInfo是一个查询请求的封装:QueryInfo.MappingType, QueryInfo.Sql, QueryInfo.Parameters,QueryInfo.Wheres, QueryInfo.OrderBy. 同时还有分页信息: QueryInfo.StartRecord, QueryInfo.PageSize,QueryInfo.TotalCount , 以及返回结果集: QueryInfo.List

默认设置下,每当请求首次涉及MappingInfo、StatementInfo时, 才会创建该对象。并自动加入LRU缓存池。 任何30分钟没有再次访问、Info总量超过200条时, 都会移除最少访问的记录。

编辑页缓存:

    通常一个列表,都可以链接、弹出响应的明细编辑界面。通常,每次载入不同的行,明细界面载入不同的数据:

  • iframe重新载入图片、脚本、html资源,重新渲染生成界面
  • 执行初始脚本,初始化Datepicker, comboBox,comboTree 等的数据载入
  • 载入数据,并逐一设置控件值

  所以这里对window做了处理: 初次打开window之后, 这个iframe创建;窗口关闭,iframe的div隐藏即可。 再次打开窗口,检测url是否一致,一致则直接弹出该frame,并根据额外参数,除非frame载入数据:

WIN.open({title:gridview.title,
            url:gridview.editUrl,
            param:'Id='+id,
            id:EDITOR_ID,
            width:gridview.editWidth,
            height:gridview.editHeight,
            maximized:gridview.editMaximized,
            maximizable:gridview.editMaximizable,
            modal:true

        }); 

可见,页面载入不再是: test.aspx?Id=0001 的方式, 而是

    1.页面载入 test.aspx ,

    2.载入后立即执行 loadData('Id=0001') ,以ajax的方式载入数据。 

当Id变成 0002 的时候,

    1. 弹出window

    2.loadData('Id=0002' ) ,载入数据。

当列表页面关闭时,列表的关闭事件自动清理所关联的window。从而实现窗体的缓存与过期。 

这种缓存方式,在GIS地图展示时效果尤其明显: 每次重新地位, 地图瞬间打开,并动画的方式移动地图切换到新的坐标点。不会出现地图界面载入困难, 局部区域空白再逐步载入等问题, 大大提高了体验效果。