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

推荐订阅源

博客园 - 三生石上(FineUI控件)
N
Netflix TechBlog - Medium
F
Full Disclosure
I
InfoQ
Jina AI
Jina AI
GbyAI
GbyAI
P
Proofpoint News Feed
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
V2EX
腾讯CDC
博客园 - 司徒正美
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Last Week in AI
Last Week in AI
宝玉的分享
宝玉的分享
人人都是产品经理
人人都是产品经理
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Apple Machine Learning Research
Apple Machine Learning Research
F
Fortinet All Blogs
B
Blog
A
About on SuperTechFans
博客园 - Franky
酷 壳 – CoolShell
酷 壳 – CoolShell
Engineering at Meta
Engineering at Meta
C
Check Point Blog
J
Java Code Geeks
L
LangChain Blog
WordPress大学
WordPress大学
Stack Overflow Blog
Stack Overflow Blog
Martin Fowler
Martin Fowler
爱范儿
爱范儿
Recorded Future
Recorded Future
小众软件
小众软件
Microsoft Security Blog
Microsoft Security Blog
Blog — PlanetScale
Blog — PlanetScale
The Register - Security
The Register - Security
IT之家
IT之家
博客园 - 聂微东
量子位
G
Google Developers Blog
Vercel News
Vercel News
B
Blog RSS Feed
阮一峰的网络日志
阮一峰的网络日志
D
Docker
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Google DeepMind News
Google DeepMind News
MyScale Blog
MyScale Blog
罗磊的独立博客
Y
Y Combinator Blog
The GitHub Blog
The GitHub Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More

博客园 - 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 开发入门 (5) - 缓存 Dappers 开发入门 (4) - 明细编辑 Dappers 开发入门(3)- 列表界面 Dappers 开发入门(2) - Mapping Dappers 开发入门(1) - 接口 Dappers : 基于Dapper.net 扩展的Dao - Part II B/S页面 通用权限控制(2) B/S页面 通用数据权限控制 由于ContractFilter在EndpointDispatcher不匹配,因此Action为<BtsActionMapping...的消息无法在接收方处理 - craboYang - 博客园 WinForm DataGridView 绑定后仅显示许多空行和空格
Dappers : 基于Dapper.net 扩展的Dao
craboYang · 2011-09-28 · via 博客园 - craboYang

         某天在园里看到Dapper.net , 终于发现找到我一致梦寐的 OM (Object Mapping)  (某人,你知道的....).

从Java到.Net , 从spring.net 0.6 到 spring.net 1.3.2 , 一直在使用Hibernate, 但这个 ORM - Relation 处理却一直被我唾弃.

    如今终于如愿以偿, 立即开始对它进行简单的封装.

功能扩展:

     1.ValueType类型隐式转换, 如某一个numeric 在Oracle中是Int64,但Sql Server中确是 decimal, 需要在DynamicMethod中加入隐式转换.

     2.Clob大字段支持.  靠Dapper的 XML类型是不行的.

     3.参数,结果集 弱类型转换,如 IDictionary 作为请求参数 或DTO

     4.增加非泛型接口查询

     5.存储过程返回结果集时,处理输出参数 (Oracle Cursor处理及output参数读取)

     6.简单sql,自动组装分页语句处理 (top order,rownum, skip/take)

     7.根据DbProvider自动替换参数prefix

     8. 实现SQL,SP调用完全透明兼容Oracle/SQL Server

     9. 对象转SQL CRUD语句,以及 partial update 语句自动生成.

     10. 支持OSIV模式的Connection以及Transaction管理 (模仿Spring.Net SessionScope)

 -----------

//Delete a user
            MyUser u = new MyUser() { Id = "testId" };
            dao.Execute(QueryInfo.GetSQLUpdate(typeof(MyUser)),u);

 1 // SP返回2个结果集10行 Users,Offices,同时返回两表总函数
 2             QueryInfo info = new QueryInfo();
 3             info.NamedQuery = "TEST_DAPPER_USERS";
 4             info.AddParam("UserCode""y%");
 5             info.AddParam("out_TotalCount"1);
 6             info.AddParam("out_TotalCount2"1);
 7             info.AddParam("out_cursor1""CURSOR");
 8             info.AddParam("out_cursor2""CURSOR");
 9 
10             var reader = dao.QueryMultiple(info);
11             
12             var user = reader.Read<MyUser>();
13             var office = reader.Read<MyOffice>();
14 
15             object i = reader.OutputParams["out_TotalCount"];
16             object j = reader.OutputParams["out_TotalCount2"];

IDictionary<stringobject> param = new Dictionary<stringobject>();
            param.Add("UserCode_RLK""chen");//==> and UserCode like :UserCode  /'chen%'
            param.Add("CreatedOn_GEQ""2011-09-01");//==> and CreatedOn >=:CreatedOn
            param.Add("IsActive"1);//==> and IsActive=:IsActive

            QueryInfo info = new QueryInfo("SYS_USER u");
            info.OrderBy.Add("Name");

            info.AddParam(param);
            info.TotalCount = 1;//分页请求
            info.PageSize = 15;
            info.StartRecord = 10;
           
            info.MappingType=typeof(MyUser);
            info = dao.Query(info);

            //info.List=IList[10] Results of(MyUser)
            
//info.TotalCount= counts of the table

------------

      Dapper实现非常不错,但结合我的应用场景有些缺陷, 而且静态方法实现导致扩展代码难免侵入,

可能造成后期Dapper同步升级一些隐患. 目前靠10个 NUnit用例保障.

     有兴趣用Dapper的朋友,对扩展,应用有什么疑问我乐于帮忙~~