Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Dapperのかるーい話し
Search
Takuya Shibata
PRO
August 10, 2014
Technology
0
390
Dapperのかるーい話し
2014/08/10に行われたCode 2014で発表したDapperについてのかるい話です。
Takuya Shibata
PRO
August 10, 2014
Tweet
Share
More Decks by Takuya Shibata
See All by Takuya Shibata
AWSのProductのLifecycleについて
stknohg
PRO
0
380
アップデート紹介:AWS Data Transfer Terminal
stknohg
PRO
0
490
CloudFrontの継続的デプロイを試してみたはなし
stknohg
PRO
0
1.4k
Snapshot & Backup
stknohg
PRO
0
4k
AWSエンジニアのためのActive Directory入門
stknohg
PRO
1
3.3k
EC2 Image Builder
stknohg
PRO
0
480
Windows on AWS の “基礎”
stknohg
PRO
0
830
Azure Dedicated Host と2019年10月1日からのライセンス改定のはなし
stknohg
PRO
0
530
Windows on AWS 入門
stknohg
PRO
0
580
Other Decks in Technology
See All in Technology
AIでデータ活用を加速させる取り組み / Leveraging AI to accelerate data utilization
okiyuki99
6
1.6k
今のコンピュータ、AI にも Web にも 向いていないので 作り直そう!!
piacerex
0
390
AI連携の新常識! 話題のMCPをはじめて学ぶ!
makoakiba
0
180
オブザーバビリティが育むシステム理解と好奇心
maruloop
3
2k
様々なファイルシステム
sat
PRO
0
290
2025/10/27 JJUGナイトセミナー WildFlyとQuarkusの 始め方
megascus
0
110
dbtとAIエージェントを組み合わせて見えたデータ調査の新しい形
10xinc
7
1.7k
ソースを読む時の思考プロセスの例-MkDocs
sat
PRO
1
360
Open Table Format (OTF) が必要になった背景とその機能 (2025.10.28)
simosako
3
610
ストレージエンジニアの仕事と、近年の計算機について / 第58回 情報科学若手の会
pfn
PRO
4
950
251029 JAWS-UG AI/ML 退屈なことはQDevにやらせよう
otakensh
0
160
20251029_Cursor Meetup Tokyo #02_MK_「あなたのAI、私のシェル」 - プロンプトインジェクションによるエージェントのハイジャック
mk0721
PRO
6
2.3k
Featured
See All Featured
Stop Working from a Prison Cell
hatefulcrawdad
272
21k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Facilitating Awesome Meetings
lara
57
6.6k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
2
230
The Cult of Friendly URLs
andyhume
79
6.6k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Making Projects Easy
brettharned
120
6.4k
Mobile First: as difficult as doing things right
swwweet
225
10k
Keith and Marios Guide to Fast Websites
keithpitt
412
23k
Producing Creativity
orderedlist
PRO
348
40k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Transcript
Dapperのかるーい話 2014/08/10 Code 2014 CLR/H 素敵なおひげ
自己紹介 H/N 素敵なおひげ Twitter - @stknohg
Blog - http://d.hatena.ne.jp/stknohg 何者? CLR/Hの裏方。 札幌でSIerやってます。 インフラ構築からアプリ製造、運用まで色々やってま す。
はじめに こちらの資料を見れば私の話は不要です。 ADO.NETとORMとMicro-ORM -dapper dot netを 使ってみた(きよくらさん)
http://www.slideshare.net/kiyokura/adonetormmicro- orm-dapper-dot-net Micro-ORMとC#(とDapperカスタマイズ)(のいえさん) http://neue.cc/2012/12/11_390.html
Dapperとは 公式サイト https://code.google.com/p/dapper-dot-net/ → https://github.com/StackExchange/dapper-dot-net .NET3.5以上対応
IDbConnectionインターフェイスに対する 拡張メソッドとして実装されている。 Query QueryAsync (.NET4.5 Only) QueryMultiple Execute ExecuteAsync(.NET4.5Only) ExecuteReader
Dapperで何が嬉しいか クエリ実行のめんどうくさい部分が解消される いちいちIDbCommandを生成しないで良い。 生SQLが使える 一般的なORMの様にSQLの隠蔽まではしない。
すべての処理においてSQLを書く必要がある。 SELECTした結果(IDataReader)を指定の型のプロパティ にマッピングするだけなのでどんなクエリでも使える。 パフォーマンスが良い 私はORMを常用しないのでよくわかりませんがパフォー マンスは良いそうです。
使用方法 公式のサンプルを見れば十分わかります。 https://code.google.com/p/dapper-dot-net/ https://github.com/StackExchange/dapper-dot-net とりあえず使うには 1.
NugetでDapperを検索して参照する。 2. ソースに using Dapper; する。 拡張メソッドなのでインポート必須 3. IDbConnectionを使う。 4. 完。
デモ Queryメソッド QueryAsync MultipleQuery IN句
ExecuteReader Executeメソッド UPDATE/DELETE/その他DML・DDLの実行 ストアドプロシージャの実行 トランザクション
ちょっとした内部動作の説明 バージョンについて Ver.1.29→2014/11/02現在はVer.1.38が最新 2つのキャッシュ SQLとパラメータ指定メソッドのキャッシュ
IDataReader→指定の型Tへのマップメソッドのキャッシュ ILを動的に生成してメソッド生成+キャッシュすること でパフォーマスを出している 実体 static readonly ConcurrentDictionary<Identity, CacheInfo> _queryCache = new ConcurrentDictionary<Identity, CacheInfo>();
ちょっとした内部動作の説明 SqlMapper.Identityクラス クエリの実体でありキャッシュ情報のキーとなるクラス。 SQL本文やCommandTypeはこのクラスに格納されている。 SqlMapper.CacheInfoクラス
キャッシュの実体。 Deserializerプロパティ 内部にFunc<IDataReader, object> を持つ。 IDataReaderから型Tへの変換メソッドの実体 ParamReaderプロパティ Action<IDbCommand, object> 型のプロパティ。 パラメータ指定部分のメソッドの実体。
ちょっとした内部動作の説明 マッピングの方法 DapperではSQLの結果を3パターンのマッピングをして返 す IEnumerable<IDictionary<string, object>>を返す
Dynamicの使えない.NET 3.5専用 SqlMapper. GetDictionaryDeserializer() IEnumerable<dynamic>を返す Dynamicの使える.NET4以降 内部形式はDapperRowクラス SqlMapper. GetDapperRowDeserializer() 指定された型Tにマップして返す – IL動的生成 SELECT文のフィールド名→Tのプロパティ名orメンバ変数名に マップして結果の値を設定 内部ではIDataReader→Tへの値の受け渡しが行われている。 SqlMapper. GetTypeDeserializer() / GetStructDeserializer()
ちょっとした内部動作の説明 カスタマイズ Dapperのマッピングルールなどをカスタマイズする部分がいく つか用意されている。 SqlMapper.SetTypeMap() 型Tへの変換ルールをカスタマイズ可能
ITypeMap CustomPropertyTypeMapをカスタマイズする SqlMapper.AddTypeMap() SQLパラメータに指定する型とDbTypeの関係をカスタマイズす る Datetime型→DbType.Datetime2にしたりするらしい.. RDBMS固有のDbType(OracleDbTypeなど)は使用できない SqlMapper.PurgeQueryCache() キャッシュのクリアを行う。多分IIS用。 PurgeQueryCachedイベントもある。