SlideShare a Scribd company logo
1 of 37
1

ビジネス向けアプリケーション
にこそ薦めるMicroORM
石坂忠広
http://opcdiary.net
2

皆さん?
RDBMSへの
アクセスって
どうしてますか?
3

ADO.NETの
DataSetだったり
4

Linq to SQL
だったり
5

ADO.NETの
Entity Framework
だったり
6

でも
満足してますか?
7

こういったフレームワーク
の作るクエリー文に納得
いってますか?
8

クエリーヒントなんてどう与えるんだよ?
9

WHEREの左右逆じゃね?
10

システム動かさねーとINDEXの
必要有無もわかんねーのか!
11

そもそも、
コードからテーブルを
自動的に作るとか
ワケわからないし。
DOAなんだから
テーブルが先に決まってるのが
当たり前だろ!
12

こういうことですよね?
13

俺にクエリを
書かせろ!
14

DataReader
最凶!!!!
15

同期実行最凶!!!
16

しかし!
17

だからって、DataReaderではデー
タを入れるクラスやそのリストに
データ押し込むコードを書かなくて
いけなくてメンドイよね
18

わかります
19

お客さん。
良いものが有ります。

注)写真はイメージです
20

MicroORM!!
Micro ORM


うすーいレイヤーでDBへのアクセスを楽にする



クエリービルディングとかしないので、クエリーはプログラマがSQL文を
書く




クエリーヒントのような様々テクニックを駆使できます

クエリを実行して、DTO(Data Transfer ObjectあるいはPOCO) にデー
タ挿入するところはやってくれる

21
22

ということで、
23

Dapper
Dapper
- a simple object mapper for .Net


多分.NET一番ポピュラーなMicroORM



結果セットが帰ってくるQueryと帰ってこない実行のみのExecute二つの
メソッド。


どちらもADO.NETのConnectionの拡張メソッドとして実装されている



クエリ引数とオブジェクトプロパティとの紐付け、結果セットのフィール
ドとオブジェクトプロパティとの紐付けはシンプルに「名前」で解決



パフォーマンスはDataReaderとほぼ同じ。




と言うか、中はDataReader。

Stack Overflowの中の人Sam Saffromが作った

24
Dapperの導入

Nuget!

25
単純なクエリー
private static void Main(string[] args)
{
string connecttionString =
@"hogeohoge";
using (var con = new SqlConnection(connecttionString))
{
int ret;
con.Open();
//データ抽出

var logs = con.Query<Log>("SELECT Id, TimeStamp, Description FROM Log");
logs.ToList()
.ForEach(l => Console.WriteLine(
"{0}, {1}, {2}", l.Id, l.TimeStamp, l.Description));
}

}

26
INSERT
private static void Main(string[] args)
{
string connecttionString =
@"Hoge";
using (var con = new SqlConnection(connecttionString))
{
int ret;
con.Open();
//データ追加
ret = con.Execute("INSERT Log(TimeStamp, Description) VALUES(@tm, @desc)",
new { tm = DateTime.Now, desc = "Description" });
Console.WriteLine("{0}行追加しました。", ret);
}
}

27
結果セットを返す
ストアードプロシージャ
//ストアードプロシージャの実行
var logs = con.Query<Log>(
"GetLogs", new { param1 = DateTime.Now.AddHours(1.0) },

commandType: CommandType.StoredProcedure);
logs2.ToList().ForEach(
l => Console.WriteLine("{0}, {1}, {2}", l.Id, l.TimeStamp, l.Description));

28
29

あとはlinqで
嬲ってあげるだけ
30

すばらしい!
Dapper以外のMicroORM


Massive




https://github.com/robconery/massive

PetaPoco


http://www.toptensoftware.com/petapoco

31
まとめ

今まで蓄えてきたSQLの知識やク
エリチューニングの技術を余すこ
となく投入できるので、ビジネス
アプリケーション開発の現場にこ
そMicroORMが相応しい!!!

32
33

お知らせ
34

今年もやります
35

C# Advent Calendar
2013
36

http://bit.ly/CSADC2013
で君を待つ!
37

No code, No life.

More Related Content

Similar to ビジネス向けアプリケーションにこそ進めるMicro orm

rosjp10 itとrt(ネットワーク技術と時々、仮想化) 株式会社インテック
rosjp10 itとrt(ネットワーク技術と時々、仮想化) 株式会社インテックrosjp10 itとrt(ネットワーク技術と時々、仮想化) 株式会社インテック
rosjp10 itとrt(ネットワーク技術と時々、仮想化) 株式会社インテックTatsuya Fukuta
 
API活用で更に広がるDynamicsエコシステム
API活用で更に広がるDynamicsエコシステムAPI活用で更に広がるDynamicsエコシステム
API活用で更に広がるDynamicsエコシステムCData Software Japan
 
私が考えるiOS開発のベスト構成
私が考えるiOS開発のベスト構成私が考えるiOS開発のベスト構成
私が考えるiOS開発のベスト構成Daiki Asahi
 
これからはじめるインフラエンジニア
これからはじめるインフラエンジニアこれからはじめるインフラエンジニア
これからはじめるインフラエンジニア外道 父
 
20120303 _JAWS-UG_SUMMIT2012_エキスパートセッションEMR編
20120303 _JAWS-UG_SUMMIT2012_エキスパートセッションEMR編20120303 _JAWS-UG_SUMMIT2012_エキスパートセッションEMR編
20120303 _JAWS-UG_SUMMIT2012_エキスパートセッションEMR編Kotaro Tsukui
 
[D33] そのデータベース 5年後大丈夫ですか by Hiromu Goto
[D33] そのデータベース 5年後大丈夫ですか by Hiromu Goto[D33] そのデータベース 5年後大丈夫ですか by Hiromu Goto
[D33] そのデータベース 5年後大丈夫ですか by Hiromu GotoInsight Technology, Inc.
 
RPALT_20200309Aomori
RPALT_20200309AomoriRPALT_20200309Aomori
RPALT_20200309Aomoriyoko tsushima
 
[SDN JAPAN 2013] IaaS事業者が考える真のSDN
[SDN JAPAN 2013] IaaS事業者が考える真のSDN[SDN JAPAN 2013] IaaS事業者が考える真のSDN
[SDN JAPAN 2013] IaaS事業者が考える真のSDNIDC Frontier
 
Firefox os勉強会 2nd WEB屋さんがWEBアプリを作ってみた
Firefox os勉強会 2nd WEB屋さんがWEBアプリを作ってみたFirefox os勉強会 2nd WEB屋さんがWEBアプリを作ってみた
Firefox os勉強会 2nd WEB屋さんがWEBアプリを作ってみたNobuhiro Ueda
 
上司が信用できない会社の内部統制~第32回WebSig会議「便利さと、怖さと、心強さと〜戦う会社のための社内セキュリティ 2013年のスタンダードとは?!...
上司が信用できない会社の内部統制~第32回WebSig会議「便利さと、怖さと、心強さと〜戦う会社のための社内セキュリティ 2013年のスタンダードとは?!...上司が信用できない会社の内部統制~第32回WebSig会議「便利さと、怖さと、心強さと〜戦う会社のための社内セキュリティ 2013年のスタンダードとは?!...
上司が信用できない会社の内部統制~第32回WebSig会議「便利さと、怖さと、心強さと〜戦う会社のための社内セキュリティ 2013年のスタンダードとは?!...WebSig24/7
 
.NETラボ2021年10月 .NETの過去と現在
.NETラボ2021年10月 .NETの過去と現在.NETラボ2021年10月 .NETの過去と現在
.NETラボ2021年10月 .NETの過去と現在TomomitsuKusaba
 
非エンジニアでもわかる
非エンジニアでもわかる非エンジニアでもわかる
非エンジニアでもわかるssuser33820e
 
Active Directory をInternetから使用するための4つのシナリオ
Active Directory をInternetから使用するための4つのシナリオActive Directory をInternetから使用するための4つのシナリオ
Active Directory をInternetから使用するための4つのシナリオjunichi anno
 
T35 ASP.NET MVCを使ったTDD入門
T35 ASP.NET MVCを使ったTDD入門T35 ASP.NET MVCを使ったTDD入門
T35 ASP.NET MVCを使ったTDD入門normalian
 

Similar to ビジネス向けアプリケーションにこそ進めるMicro orm (15)

rosjp10 itとrt(ネットワーク技術と時々、仮想化) 株式会社インテック
rosjp10 itとrt(ネットワーク技術と時々、仮想化) 株式会社インテックrosjp10 itとrt(ネットワーク技術と時々、仮想化) 株式会社インテック
rosjp10 itとrt(ネットワーク技術と時々、仮想化) 株式会社インテック
 
API活用で更に広がるDynamicsエコシステム
API活用で更に広がるDynamicsエコシステムAPI活用で更に広がるDynamicsエコシステム
API活用で更に広がるDynamicsエコシステム
 
私が考えるiOS開発のベスト構成
私が考えるiOS開発のベスト構成私が考えるiOS開発のベスト構成
私が考えるiOS開発のベスト構成
 
これからはじめるインフラエンジニア
これからはじめるインフラエンジニアこれからはじめるインフラエンジニア
これからはじめるインフラエンジニア
 
20120303 _JAWS-UG_SUMMIT2012_エキスパートセッションEMR編
20120303 _JAWS-UG_SUMMIT2012_エキスパートセッションEMR編20120303 _JAWS-UG_SUMMIT2012_エキスパートセッションEMR編
20120303 _JAWS-UG_SUMMIT2012_エキスパートセッションEMR編
 
[D33] そのデータベース 5年後大丈夫ですか by Hiromu Goto
[D33] そのデータベース 5年後大丈夫ですか by Hiromu Goto[D33] そのデータベース 5年後大丈夫ですか by Hiromu Goto
[D33] そのデータベース 5年後大丈夫ですか by Hiromu Goto
 
RPALT_20200309Aomori
RPALT_20200309AomoriRPALT_20200309Aomori
RPALT_20200309Aomori
 
[SDN JAPAN 2013] IaaS事業者が考える真のSDN
[SDN JAPAN 2013] IaaS事業者が考える真のSDN[SDN JAPAN 2013] IaaS事業者が考える真のSDN
[SDN JAPAN 2013] IaaS事業者が考える真のSDN
 
Firefox os勉強会 2nd WEB屋さんがWEBアプリを作ってみた
Firefox os勉強会 2nd WEB屋さんがWEBアプリを作ってみたFirefox os勉強会 2nd WEB屋さんがWEBアプリを作ってみた
Firefox os勉強会 2nd WEB屋さんがWEBアプリを作ってみた
 
上司が信用できない会社の内部統制~第32回WebSig会議「便利さと、怖さと、心強さと〜戦う会社のための社内セキュリティ 2013年のスタンダードとは?!...
上司が信用できない会社の内部統制~第32回WebSig会議「便利さと、怖さと、心強さと〜戦う会社のための社内セキュリティ 2013年のスタンダードとは?!...上司が信用できない会社の内部統制~第32回WebSig会議「便利さと、怖さと、心強さと〜戦う会社のための社内セキュリティ 2013年のスタンダードとは?!...
上司が信用できない会社の内部統制~第32回WebSig会議「便利さと、怖さと、心強さと〜戦う会社のための社内セキュリティ 2013年のスタンダードとは?!...
 
.NETラボ2021年10月 .NETの過去と現在
.NETラボ2021年10月 .NETの過去と現在.NETラボ2021年10月 .NETの過去と現在
.NETラボ2021年10月 .NETの過去と現在
 
非エンジニアでもわかる
非エンジニアでもわかる非エンジニアでもわかる
非エンジニアでもわかる
 
Active Directory をInternetから使用するための4つのシナリオ
Active Directory をInternetから使用するための4つのシナリオActive Directory をInternetから使用するための4つのシナリオ
Active Directory をInternetから使用するための4つのシナリオ
 
T35 ASP.NET MVCを使ったTDD入門
T35 ASP.NET MVCを使ったTDD入門T35 ASP.NET MVCを使ったTDD入門
T35 ASP.NET MVCを使ったTDD入門
 
20021007
2002100720021007
20021007
 

More from Tadahiro Ishisaka

Windows環境でのgitまとめ(2016.8)
Windows環境でのgitまとめ(2016.8)Windows環境でのgitまとめ(2016.8)
Windows環境でのgitまとめ(2016.8)Tadahiro Ishisaka
 
Visual studioとそのライバル
Visual studioとそのライバルVisual studioとそのライバル
Visual studioとそのライバルTadahiro Ishisaka
 
Windows環境でのgitまとめ(2016.1)
Windows環境でのgitまとめ(2016.1)Windows環境でのgitまとめ(2016.1)
Windows環境でのgitまとめ(2016.1)Tadahiro Ishisaka
 
Visual studio 2015 update1 ctpとcsi
Visual studio 2015 update1 ctpとcsiVisual studio 2015 update1 ctpとcsi
Visual studio 2015 update1 ctpとcsiTadahiro Ishisaka
 
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門Tadahiro Ishisaka
 
Git for windows情報アップデート 2014年10月5日
Git for windows情報アップデート 2014年10月5日Git for windows情報アップデート 2014年10月5日
Git for windows情報アップデート 2014年10月5日Tadahiro Ishisaka
 
クラウド・コンピューティング サバイバルガイド
クラウド・コンピューティング サバイバルガイドクラウド・コンピューティング サバイバルガイド
クラウド・コンピューティング サバイバルガイドTadahiro Ishisaka
 
Jazug3周年lt deployブランチを追加してみましょう
Jazug3周年lt deployブランチを追加してみましょうJazug3周年lt deployブランチを追加してみましょう
Jazug3周年lt deployブランチを追加してみましょうTadahiro Ishisaka
 
Build insider offline session チームでのgit
Build insider offline session チームでのgitBuild insider offline session チームでのgit
Build insider offline session チームでのgitTadahiro Ishisaka
 
Hokuriku.net 2013 01-26 node.js
Hokuriku.net 2013 01-26 node.jsHokuriku.net 2013 01-26 node.js
Hokuriku.net 2013 01-26 node.jsTadahiro Ishisaka
 
開発から見たWindowsの国際化機能
開発から見たWindowsの国際化機能開発から見たWindowsの国際化機能
開発から見たWindowsの国際化機能Tadahiro Ishisaka
 
Ossで作成するチーム開発環境
Ossで作成するチーム開発環境Ossで作成するチーム開発環境
Ossで作成するチーム開発環境Tadahiro Ishisaka
 
私はこの本でネットワークを学んだ
私はこの本でネットワークを学んだ私はこの本でネットワークを学んだ
私はこの本でネットワークを学んだTadahiro Ishisaka
 
静岡Developers勉強会 第11回 第12章 遅延評価
静岡Developers勉強会 第11回 第12章 遅延評価静岡Developers勉強会 第11回 第12章 遅延評価
静岡Developers勉強会 第11回 第12章 遅延評価Tadahiro Ishisaka
 

More from Tadahiro Ishisaka (20)

Windowsでhaskell
WindowsでhaskellWindowsでhaskell
Windowsでhaskell
 
Windows環境でのgitまとめ(2016.8)
Windows環境でのgitまとめ(2016.8)Windows環境でのgitまとめ(2016.8)
Windows環境でのgitまとめ(2016.8)
 
Visual studioとそのライバル
Visual studioとそのライバルVisual studioとそのライバル
Visual studioとそのライバル
 
Windows環境でのgitまとめ(2016.1)
Windows環境でのgitまとめ(2016.1)Windows環境でのgitまとめ(2016.1)
Windows環境でのgitまとめ(2016.1)
 
Visual studio 2015 update1 ctpとcsi
Visual studio 2015 update1 ctpとcsiVisual studio 2015 update1 ctpとcsi
Visual studio 2015 update1 ctpとcsi
 
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
 
Git for windows情報アップデート 2014年10月5日
Git for windows情報アップデート 2014年10月5日Git for windows情報アップデート 2014年10月5日
Git for windows情報アップデート 2014年10月5日
 
クラウド・コンピューティング サバイバルガイド
クラウド・コンピューティング サバイバルガイドクラウド・コンピューティング サバイバルガイド
クラウド・コンピューティング サバイバルガイド
 
Esentのススメ
EsentのススメEsentのススメ
Esentのススメ
 
Jazug3周年lt deployブランチを追加してみましょう
Jazug3周年lt deployブランチを追加してみましょうJazug3周年lt deployブランチを追加してみましょう
Jazug3周年lt deployブランチを追加してみましょう
 
Build insider offline session チームでのgit
Build insider offline session チームでのgitBuild insider offline session チームでのgit
Build insider offline session チームでのgit
 
Hokuriku.net 2013 01-26 node.js
Hokuriku.net 2013 01-26 node.jsHokuriku.net 2013 01-26 node.js
Hokuriku.net 2013 01-26 node.js
 
Web matrix2とvisual studio
Web matrix2とvisual studioWeb matrix2とvisual studio
Web matrix2とvisual studio
 
Sysprep
SysprepSysprep
Sysprep
 
開発から見たWindowsの国際化機能
開発から見たWindowsの国際化機能開発から見たWindowsの国際化機能
開発から見たWindowsの国際化機能
 
Shizudev git hub宿題
Shizudev git hub宿題Shizudev git hub宿題
Shizudev git hub宿題
 
Ossで作成するチーム開発環境
Ossで作成するチーム開発環境Ossで作成するチーム開発環境
Ossで作成するチーム開発環境
 
私はこの本でネットワークを学んだ
私はこの本でネットワークを学んだ私はこの本でネットワークを学んだ
私はこの本でネットワークを学んだ
 
Netduino
NetduinoNetduino
Netduino
 
静岡Developers勉強会 第11回 第12章 遅延評価
静岡Developers勉強会 第11回 第12章 遅延評価静岡Developers勉強会 第11回 第12章 遅延評価
静岡Developers勉強会 第11回 第12章 遅延評価
 

ビジネス向けアプリケーションにこそ進めるMicro orm