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
480
0
Share
Dapperのかるーい話し
2014/08/10に行われたCode 2014で発表したDapperについてのかるい話です。
Takuya Shibata
PRO
August 10, 2014
More Decks by Takuya Shibata
See All by Takuya Shibata
意外とあった SQL Server 関連アップデート + Database Savings Plans
stknohg
PRO
0
490
AWSのProductのLifecycleについて
stknohg
PRO
0
560
アップデート紹介:AWS Data Transfer Terminal
stknohg
PRO
0
620
CloudFrontの継続的デプロイを試してみたはなし
stknohg
PRO
0
1.5k
Snapshot & Backup
stknohg
PRO
0
4.2k
AWSエンジニアのためのActive Directory入門
stknohg
PRO
1
3.5k
EC2 Image Builder
stknohg
PRO
0
520
Windows on AWS の “基礎”
stknohg
PRO
0
900
Azure Dedicated Host と2019年10月1日からのライセンス改定のはなし
stknohg
PRO
0
600
Other Decks in Technology
See All in Technology
Chasing Real-Time Observability for CRuby
whitegreen
0
280
生成AIが変える SaaS の競争原理と弁護士ドットコムのプロダクト戦略
bengo4com
1
2.4k
20260428_Product Management Summit_Loglass_JoeHirose
loglassjoe
3
4k
AzureのIaC管理からログ調査まで、随所に役立つSkillsとCustom-Instructions / Boosting IaC and Log Analysis with Skills
aeonpeople
0
280
CloudTrail を見つめ直してみる
kazzpapa3
1
120
Scovilleモバイルエンジニア募集中.pdf
julienrudin
0
110
20260428_Product Management Summit_tadokoroyoshiro
tadokoro_yoshiro
14
15k
Cortex Codeのコスト見積ヒントご紹介
yokatsuki
0
120
これからの「データマネジメント」の話をしよう
sansantech
PRO
0
160
AgentCore×VPCでの設計パターンn選と勘所
har1101
4
330
Oracle AI Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
4
2.4k
VespaのParent Childを用いたフィードパフォーマンスの改善
taking
0
120
Featured
See All Featured
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
110
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
520
Utilizing Notion as your number one productivity tool
mfonobong
4
290
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Believing is Seeing
oripsolob
1
120
Rails Girls Zürich Keynote
gr2m
96
14k
How to Ace a Technical Interview
jacobian
281
24k
4 Signs Your Business is Dying
shpigford
187
22k
The Cost Of JavaScript in 2023
addyosmani
55
9.9k
Paper Plane
katiecoart
PRO
1
49k
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イベントもある。