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
150
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
700
Snapshot & Backup
stknohg
PRO
0
2.7k
AWSエンジニアのためのActive Directory入門
stknohg
PRO
1
2.1k
EC2 Image Builder
stknohg
PRO
0
250
Windows on AWS の “基礎”
stknohg
PRO
0
410
Azure Dedicated Host と2019年10月1日からのライセンス改定のはなし
stknohg
PRO
0
270
Windows on AWS 入門
stknohg
PRO
0
290
普通の人が普通にブログを継続するためにやっていること
stknohg
PRO
0
520
PowerShell CoreからPowerShell 7に至る道 - Ver.1.1
stknohg
PRO
0
2.9k
Other Decks in Technology
See All in Technology
IaCからAWSに入門した初心者が CloudFormationを通して考えた「AWS操作」の使い分け
maimyyym
2
450
令和最新版 Ruby プロファイラ "Pf2" のご紹介
osyoyu
0
140
LLM開発・活用の舞台裏@2024.04.25
yushin_n
3
1.3k
BPStudyの200回を中心にIT業界を振り返る。そしてこれから
haru860
3
420
web-application-security
matsuihidetoshi
1
200
いいたいことちゃんという
tkengo
0
240
Rustで「プリズモイダル法」を利用して「土量計算」をガチでやる
nokonoko1203
1
310
【SORACOM UG 東海】あらゆるモノがつながる社会へ、IoT と SORACOM
soracom
PRO
1
150
プロンプトエンジニアリングでがんばらない-Agentic Workflow へ-近藤憲児
kenjikondobai
6
1.2k
今さら聞けないDocker入門 〜 Dockerfileのベストプラクティス編
devops_vtj
20
5.5k
KubeConにproposalを送りたい人へのアドバイス
sat
PRO
3
270
社内アプリで Cloudflare D1を プロダクト運用してみた体験談(Tokyo)
haochenx
0
120
Featured
See All Featured
Bootstrapping a Software Product
garrettdimon
PRO
302
110k
How GitHub Uses GitHub to Build GitHub
holman
468
290k
The Power of CSS Pseudo Elements
geoffreycrofte
62
5k
Building an army of robots
kneath
300
41k
It's Worth the Effort
3n
180
27k
Producing Creativity
orderedlist
PRO
338
39k
10 Git Anti Patterns You Should be Aware of
lemiorhan
649
58k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
275
13k
What's new in Ruby 2.0
geeforr
337
31k
What's in a price? How to price your products and services
michaelherold
238
11k
A designer walks into a library…
pauljervisheath
201
23k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
34
6k
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イベントもある。