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
230
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
CloudFrontの継続的デプロイを試してみたはなし
stknohg
PRO
0
1k
Snapshot & Backup
stknohg
PRO
0
3.3k
AWSエンジニアのためのActive Directory入門
stknohg
PRO
1
2.6k
EC2 Image Builder
stknohg
PRO
0
340
Windows on AWS の “基礎”
stknohg
PRO
0
580
Azure Dedicated Host と2019年10月1日からのライセンス改定のはなし
stknohg
PRO
0
360
Windows on AWS 入門
stknohg
PRO
0
450
普通の人が普通にブログを継続するためにやっていること
stknohg
PRO
0
630
PowerShell CoreからPowerShell 7に至る道 - Ver.1.1
stknohg
PRO
0
3.6k
Other Decks in Technology
See All in Technology
【Startup CTO of the Year 2024 / Audience Award】アセンド取締役CTO 丹羽健
niwatakeru
0
980
New Relicを活用したSREの最初のステップ / NRUG OKINAWA VOL.3
isaoshimizu
2
590
Why App Signing Matters for Your Android Apps - Android Bangkok Conference 2024
akexorcist
0
120
Exadata Database Service on Dedicated Infrastructure(ExaDB-D) UI スクリーン・キャプチャ集
oracle4engineer
PRO
2
3.2k
サイバーセキュリティと認知バイアス:対策の隙を埋める心理学的アプローチ
shumei_ito
0
380
Oracle Cloud Infrastructureデータベース・クラウド:各バージョンのサポート期間
oracle4engineer
PRO
28
12k
Introduction to Works of ML Engineer in LY Corporation
lycorp_recruit_jp
0
100
初心者向けAWS Securityの勉強会mini Security-JAWSを9ヶ月ぐらい実施してきての近況
cmusudakeisuke
0
120
B2B SaaSから見た最近のC#/.NETの進化
sansantech
PRO
0
750
OCI Vault 概要
oracle4engineer
PRO
0
9.7k
第1回 国土交通省 データコンペ参加者向け勉強会③- Snowflake x estie編 -
estie
0
130
RubyのWebアプリケーションを50倍速くする方法 / How to Make a Ruby Web Application 50 Times Faster
hogelog
3
940
Featured
See All Featured
Gamification - CAS2011
davidbonilla
80
5k
A Philosophy of Restraint
colly
203
16k
Unsuck your backbone
ammeep
668
57k
Practical Orchestrator
shlominoach
186
10k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
840
Visualization
eitanlees
145
15k
Designing the Hi-DPI Web
ddemaree
280
34k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
Optimising Largest Contentful Paint
csswizardry
33
2.9k
Into the Great Unknown - MozCon
thekraken
32
1.5k
BBQ
matthewcrist
85
9.3k
Bash Introduction
62gerente
608
210k
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イベントもある。