ビジネス向けアプリケーションにこそ進めるMicro orm
-
Upload
tadahiro-ishisaka -
Category
Documents
-
view
1.472 -
download
2
Transcript of ビジネス向けアプリケーションにこそ進めるMicro orm
![Page 1: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/1.jpg)
1
ビジネス向けアプリケーションにこそ薦めるMicroORM石坂忠広http://opcdiary.net
![Page 2: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/2.jpg)
2
皆さん?RDBMSへのアクセスってどうしてますか?
![Page 3: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/3.jpg)
3
ADO.NETのDataSetだったり
![Page 4: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/4.jpg)
4
Linq to SQLだったり
![Page 5: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/5.jpg)
5
ADO.NETのEntity Frameworkだったり
![Page 6: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/6.jpg)
6
でも満足してますか?
![Page 7: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/7.jpg)
7
こういったフレームワークの作るクエリー文に納得いってますか?
![Page 8: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/8.jpg)
8
クエリーヒントなんてどう与えるんだよ?
![Page 9: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/9.jpg)
9
WHEREの左右逆じゃね?
![Page 10: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/10.jpg)
10
システム動かさねーと INDEXの必要有無もわかんねーのか!
![Page 11: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/11.jpg)
11そもそも、コードからテーブルを自動的に作るとかワケわからないし。
DOAなんだからテーブルが先に決まってるのが
当たり前だろ!
![Page 12: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/12.jpg)
12
こういうことですよね?
![Page 13: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/13.jpg)
13
俺にクエリを書かせろ!
![Page 14: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/14.jpg)
14
DataReader最凶!!!!
![Page 15: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/15.jpg)
15
同期実行最凶!!!
![Page 16: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/16.jpg)
16
しかし!
![Page 17: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/17.jpg)
17
だからって、 DataReaderではデータを入れるクラスやそのリストにデータ押し込むコードを書かなくていけなくてメンドイよね
![Page 18: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/18.jpg)
18
わかります
![Page 19: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/19.jpg)
19
お客さん。良いものが有ります。
注)写真はイメージです
![Page 20: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/20.jpg)
20
MicroORM!!
![Page 21: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/21.jpg)
21Micro ORM
うすーいレイヤーで DBへのアクセスを楽にする クエリービルディングとかしないので、クエリーはプログラマが SQL文を書く クエリーヒントのような様々テクニックを駆使できます
クエリを実行して、 DTO(Data Transfer Objectあるいは POCO) にデータ挿入するところはやってくれる
![Page 22: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/22.jpg)
22
ということで、
![Page 24: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/24.jpg)
24Dapper - a simple object mapper for .Net
多分 .NET一番ポピュラーなMicroORM
結果セットが帰ってくる Queryと帰ってこない実行のみの Execute二つのメソッド。 どちらも ADO.NETの Connectionの拡張メソッドとして実装されている
クエリ引数とオブジェクトプロパティとの紐付け、結果セットのフィールドとオブジェクトプロパティとの紐付けはシンプルに「名前」で解決
パフォーマンスは DataReaderとほぼ同じ。 と言うか、中は DataReader。
Stack Overflowの中の人 Sam Saffromが作った
![Page 25: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/25.jpg)
25Dapperの導入
Nuget!
![Page 26: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/26.jpg)
26単純なクエリー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));
}
}
![Page 27: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/27.jpg)
27INSERTprivate 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);
}
}
![Page 28: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/28.jpg)
28結果セットを返すストアードプロシージャ
//ストアードプロシージャの実行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));
![Page 29: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/29.jpg)
29
あとは linqで嬲ってあげるだけ
![Page 30: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/30.jpg)
30
すばらしい!
![Page 31: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/31.jpg)
31Dapper以外のMicroORM
Massive https://github.com/robconery/massive
PetaPoco http://www.toptensoftware.com/petapoco
![Page 32: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/32.jpg)
32まとめ
今まで蓄えてきた SQLの知識やクエリチューニングの技術を余すことなく投入できるので、ビジネスアプリケーション開発の現場にこそMicroORMが相応しい!!!
![Page 33: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/33.jpg)
33
お知らせ
![Page 34: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/34.jpg)
34
今年もやります
![Page 35: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/35.jpg)
35
C# Advent Calendar 2013
![Page 37: ビジネス向けアプリケーションにこそ進めるMicro orm](https://reader036.fdocument.pub/reader036/viewer/2022062303/55660bd1d8b42a06318b483a/html5/thumbnails/37.jpg)
37
No code, No life.