$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Dapperのかるーい話し
Search
Takuya Shibata
PRO
August 10, 2014
Technology
0
410
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
420
アップデート紹介:AWS Data Transfer Terminal
stknohg
PRO
0
510
CloudFrontの継続的デプロイを試してみたはなし
stknohg
PRO
0
1.4k
Snapshot & Backup
stknohg
PRO
0
4.1k
AWSエンジニアのためのActive Directory入門
stknohg
PRO
1
3.3k
EC2 Image Builder
stknohg
PRO
0
480
Windows on AWS の “基礎”
stknohg
PRO
0
840
Azure Dedicated Host と2019年10月1日からのライセンス改定のはなし
stknohg
PRO
0
550
Windows on AWS 入門
stknohg
PRO
0
590
Other Decks in Technology
See All in Technology
Kill the Vibe?Architecture in the age of AI
stoth
1
170
Symfony AI in Action
el_stoffel
2
360
こがヘンだよ!Snowflake?サービス名称へのこだわり
tarotaro0129
0
110
Product Engineer
resilire
0
130
あなたの知らないDateのひみつ / The Secret of "Date" You Haven't known #tqrk16
expajp
0
110
MCP・A2A概要 〜Google Cloudで構築するなら〜
shukob
0
160
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
37k
Multimodal AI Driving Solutions to Societal Challenges
keio_smilab
PRO
1
110
Introduction to Bill One Development Engineer
sansan33
PRO
0
320
命名から始めるSpec Driven
kuruwic
3
820
Bill One 開発エンジニア 紹介資料
sansan33
PRO
4
16k
プラットフォームエンジニアリングとは何であり、なぜプラットフォームエンジニアリングなのか
doublemarket
1
540
Featured
See All Featured
What's in a price? How to price your products and services
michaelherold
246
12k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
Leading Effective Engineering Teams in the AI Era
addyosmani
8
1.2k
How to Think Like a Performance Engineer
csswizardry
28
2.3k
How GitHub (no longer) Works
holman
316
140k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
How to Ace a Technical Interview
jacobian
280
24k
Making Projects Easy
brettharned
120
6.5k
Writing Fast Ruby
sferik
630
62k
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.3k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
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イベントもある。