Successfully reported this slideshow.
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文を
書く




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

クエリを実行して、DT...
22

ということで、
23

Dapper
Dapper
- a simple object mapper for .Net


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



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

どちら...
Dapperの導入

Nuget!

25
単純なクエリー
private static void Main(string[] args)
{
string connecttionString =
@"hogeohoge";
using (var con = new SqlConnect...
INSERT
private static void Main(string[] args)
{
string connecttionString =
@"Hoge";
using (var con = new SqlConnection(co...
結果セットを返す
ストアードプロシージャ
//ストアードプロシージャの実行
var logs = con.Query<Log>(
"GetLogs", new { param1 = DateTime.Now.AddHours(1.0) },

...
29

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

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

Massive




https://github.com/robconery/massive

PetaPoco


http://www.toptensoftware.com/petapoc...
まとめ

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

32
33

お知らせ
34

今年もやります
35

C# Advent Calendar
2013
36

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

No code, No life.
Upcoming SlideShare
Loading in …5
×

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

2,734 views

Published on

  • Be the first to comment

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

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

×