Movatterモバイル変換


[0]ホーム

URL:


Takaaki Suzuki, profile picture
Uploaded byTakaaki Suzuki
6,421 views

DeclarativeSql

2015/03/29 北陸新幹線開通記念!北陸・信州合同勉強会Hokuriku.NET × JAZUG信州

Embed presentation

Hokuriku.NET × JAZUG信州 -北陸・信州合同勉強会-DeclarativeSql- 属性ベーステーブルマッピングとSQLの自動生成 -
Name鈴木 孝明Twitter Account@xin9leAwardMicrosoft MVP for .NETWeb Sitehttp://xin9le.netAbout Me
ライブラリ作成のモチベーションWhy declarative ?
Dapper軽量で超高速なO/R MapperPOCOへのマッピングのみを請け負うので、SQLは完全直書きEntity FrameworkLINQによるDBアクセスからO/RマッピングまでフルサポートSQLの直書きはないが、パッと使うには仰々しい感Dapper vs Entity Framework
昨今のチーム事情けど定型SQLは楽したいチーム全員SQL星人でもLINQもEFもできないってことはDapper一択
そうだ、型情報からSQL作ろう
update PersonsetAge = @Agewhere Name = @Nameand Sex = @Sexpublic class Person{public int Id { get; set; }public string Name { get; set; }public int Age { get; set; }public int Sex { get; set; }}こんな感じになったら嬉しい
簡易な定型文のみをサポート「それって何てEntity Framework?」にならないように複雑なクエリが必要なときはSQL星人たちの神業に頼ればよい自由度とメンテナンス性の両立SQLの自動生成 = いくらかバグの混入を防ぐことができる機能を求め過ぎて中途半端になるくらいならSQLの直書きも許容求め過ぎないという割り切り
https://github.com/xin9le/DeclarativeSqlIt’s Free & Open SourcePM> Install-Package DeclarativeSql.CorePM> Install-Package DeclarativeSql.Dapper
「ちょっとの便利」を後押しするコア機能DeclarativeSql.Core
using (var connection = DbProvider.CreateConnection(DbKind.SqlServer, "接続文字列")){connection.Open();//--- 何かデータベース操作}EnumベースでのDB接続生成対象DBを引数で変更可能OracleMySQLなどもOK
using (var connection = DbProvider.CreateConnection(DbKind.Oracle, "接続文字列"))using (var transaction = connection.StartTransaction()){//--- レコードの挿入/更新/削除などtransaction.Complete();}usingによるトランザクションTransactionScopeと同じ使い方
[Table("Person", Schema = "dbo")] //--- テーブル名の指定public class Person{[Key] //--- 主キー[DatabaseGenerated(DatabaseGeneratedOption.Identity)] //--- 自動採番public int Id { get; set; }[Required] //--- NotNull[Column("名前")] //--- 列名の指定public string Name { get; set; }[Sequence("AgeSeq", Schema = "dbo")] //--- シーケンスの利用 (Oracleなどで)public int? Age { get; set; }[NotMapped] //--- マッピングしないpublic int Sex { get; set; }}属性によるマッピング型定義Code Firstとほぼ同様
public sealed class TableMappingInfo{public Type Type { get; } //--- マッピングするクラスの型public string Schema { get; } //--- テーブルのスキーマ名public string Name { get; } //--- テーブル名public IReadOnlyList<ColumnMappingInfo> Columns { get; } //--- 列マッピング情報public static TableMappingInfo Create<T>(){ … }; //--- メタデータの取得}マッピングメタデータの提供 #1キャッシュが効くので高速
public sealed class ColumnMappingInfo{public string PropertyName { get; } //--- プロパティ名public Type PropertyType { get; } //--- プロパティのデータ型public string ColumnName { get; } //--- 列名public DbType ColumnType { get; } //--- 列のデータ型public bool IsPrimaryKey { get; } //--- 主キーかどうかpublic bool IsNullable { get; } //--- NULL許可かどうかpublic bool IsIdentity { get; } //--- 自動採番をするどうかpublic SequenceMappingInfo Sequence { get; } //--- 設定されているシーケンス情報}マッピングメタデータの提供 #2
public sealed class SequenceMappingInfo{public string Schema { get; } //--- シーケンスのスキーマ名public string Name { get; } //--- シーケンス名}マッピングメタデータの提供 #3
//--- 指定の列のみを対象として全レコード取得var sql = PrimitiveSql.CreateSelect<Person>(x => x.Id, x => x.Name);/*selectId as Id,名前 as Namefrom dbo.Person*/プリミティブなSQLの生成 #1指定がない場合は全列が対象
//--- 指定の列のみを対象として全レコードを更新var sql = PrimitiveSql.CreateUpdate<Person>(DbKind.SqlServer, x => x.Name);/*update dbo.Personset名前 = @Name*/プリミティブなSQLの生成 #2Bind変数の接頭辞の決定に必要指定がない場合は全列が対象
Dapperを基にした超簡単で直観的なCRUD操作DeclarativeSql.Dapper
//--- 全件取得var p1 = connection.Select<Person>();//--- Id, Name 列に絞って全件取得var p2 = connection.Select<Person>(x => x.Id, x => x.Name);//--- Id = 3 のレコードのみ取得var p3 = connection.Select<Person>(x => x.Id == 3);//--- Id > 3 のレコードを Id, Name 列に絞って取得var p4 = connection.Select<Person>(x => x.Id > 3, x => x.Id, x => x.Name);レコードの取得.Select<T>
//--- 指定されたデータを挿入var p5 = connection.Insert(new Person { Name = "xin9le", Age = 30 });//--- 複数のレコードでもOKvar p6 = connection.Insert(new []{new Person { Name = "yoshiki", Age= 49, },new Person { Name = "suzuki", Age= 30, },new Person { Name = "anders", Age= 54, },});レコード挿入.Insert<T>
//--- Age = 30 のレコードの Name 列を更新var p7 = connection.Update(new Person { Name = “xin9le" },x => x.Age == 30, //--- 指定しなければ全レコード更新x => x.Name //--- 指定がなければ全列更新);レコード更新.Update<T>
//--- 全レコード削除var p8 = connection.Delete<Person>();//--- 年齢が30歳でないレコードを削除var p9 = connection.Delete<Person>(x => x.Age != 30);//--- テーブルの切り捨てvar p10 = connection.Truncate<Person>();レコード削除.Delete<T>.Truncate<T>
//--- メソッド名に ‘Async’ を付けるだけvar p1 = await connection.SelectAsync<Person>();var p2 = await connection.InsertAsync(new Person { Name = "xin9le" });var p3 = await connection.UpdateAsync(new Person { Name = "xin9le" });var p4 = await connection.DeleteAsync<Person>();もちろん非同期版も実際に非同期処理になるかは各DBプロバイダーに依存する
Simple = Speed + PowerDapperの強みをそのままに、select * などの決まった手間を軽減たった1文で書けるDBアクセスサポートしていない構文inner join / left join / order by / group by / サブクエリー (etc.)やり過ぎは複雑さの増大と自由度の低下を招くシンプルに、そしてカジュアルに
Have a nice database operation!!Thank you

Recommended

PDF
RとSQLiteで気軽にデータベース作成
PDF
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
PDF
Pg14_sql_standard_function_body
PDF
KOF2015 PostgreSQL 9.5
PDF
my sql-postgresql勉強会#6 LT 私的なPostgreSQLの楽しみ方
KEY
データベースのお話
PDF
named_scope more detail
PPTX
Solr 4.0 の主な機能
PDF
Webで役立つRDBの使い方
PDF
知って得するWebで便利なpostgre sqlの3つの機能
PDF
Elasticsearch入門 pyfes 201207
PDF
PostgreSQLとPythonとSQL
PDF
Fess/Elasticsearchを使った業務で使える?全文検索への道
PDF
いろいろ考えると日本語の全文検索もMySQLがいいね!
PDF
MySQL Casual Talks Vol.4 「MySQL-5.6で始める全文検索 〜InnoDB FTS編〜」
PDF
Solrベースの全文検索サーバ Fess
PPTX
MongoDBが遅いときの切り分け方法
PDF
DBFluteを用いて開発されている全文検索システムFess
PDF
ニコニコニュースと全文検索
PDF
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
PDF
R以外の研究ツール
PDF
Elasticsearchベースの全文検索システムFess
PDF
20150520 lt-neo4j勉強会-neofj fdw
PDF
Chugoku db 20th-postgresql-10-pub
PDF
Chugokudb18_1
PDF
Sbtのマルチプロジェクトはいいぞ
PDF
Pgunconf neo4j fdw
PDF
Incoming PostgreSQL 9.4 次バージョンの新機能をご紹介
PDF
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
PDF
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例

More Related Content

PDF
RとSQLiteで気軽にデータベース作成
PDF
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
PDF
Pg14_sql_standard_function_body
PDF
KOF2015 PostgreSQL 9.5
PDF
my sql-postgresql勉強会#6 LT 私的なPostgreSQLの楽しみ方
KEY
データベースのお話
PDF
named_scope more detail
PPTX
Solr 4.0 の主な機能
RとSQLiteで気軽にデータベース作成
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
Pg14_sql_standard_function_body
KOF2015 PostgreSQL 9.5
my sql-postgresql勉強会#6 LT 私的なPostgreSQLの楽しみ方
データベースのお話
named_scope more detail
Solr 4.0 の主な機能

What's hot

PDF
Webで役立つRDBの使い方
PDF
知って得するWebで便利なpostgre sqlの3つの機能
PDF
Elasticsearch入門 pyfes 201207
PDF
PostgreSQLとPythonとSQL
PDF
Fess/Elasticsearchを使った業務で使える?全文検索への道
PDF
いろいろ考えると日本語の全文検索もMySQLがいいね!
PDF
MySQL Casual Talks Vol.4 「MySQL-5.6で始める全文検索 〜InnoDB FTS編〜」
PDF
Solrベースの全文検索サーバ Fess
PPTX
MongoDBが遅いときの切り分け方法
PDF
DBFluteを用いて開発されている全文検索システムFess
PDF
ニコニコニュースと全文検索
PDF
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
PDF
R以外の研究ツール
PDF
Elasticsearchベースの全文検索システムFess
PDF
20150520 lt-neo4j勉強会-neofj fdw
PDF
Chugoku db 20th-postgresql-10-pub
PDF
Chugokudb18_1
PDF
Sbtのマルチプロジェクトはいいぞ
PDF
Pgunconf neo4j fdw
PDF
Incoming PostgreSQL 9.4 次バージョンの新機能をご紹介
Webで役立つRDBの使い方
知って得するWebで便利なpostgre sqlの3つの機能
Elasticsearch入門 pyfes 201207
PostgreSQLとPythonとSQL
Fess/Elasticsearchを使った業務で使える?全文検索への道
いろいろ考えると日本語の全文検索もMySQLがいいね!
MySQL Casual Talks Vol.4 「MySQL-5.6で始める全文検索 〜InnoDB FTS編〜」
Solrベースの全文検索サーバ Fess
MongoDBが遅いときの切り分け方法
DBFluteを用いて開発されている全文検索システムFess
ニコニコニュースと全文検索
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
R以外の研究ツール
Elasticsearchベースの全文検索システムFess
20150520 lt-neo4j勉強会-neofj fdw
Chugoku db 20th-postgresql-10-pub
Chugokudb18_1
Sbtのマルチプロジェクトはいいぞ
Pgunconf neo4j fdw
Incoming PostgreSQL 9.4 次バージョンの新機能をご紹介

Viewers also liked

PDF
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
PDF
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
PDF
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
PDF
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
PDF
Introduction to NotifyPropertyChangedGenerator
PDF
見やすいプレゼン資料の作り方 - リニューアル増量版
PPTX
開発キックオフ時にマネージャが行うべき11のこと ~Visual Studio Online & TFS 使い始めと HOME 画面の構成
PDF
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
PPTX
はじめてのUniRx
PDF
「ずいぶんとダサいライティングを使っているのね」〜UniRxを用いた物理ベースライティング制御〜
PDF
Interactive UI with UniRx
KEY
ノンデザイナーのための配色理論
PPTX
若輩エンジニアから見たUniRxを利用したゲーム開発
PPT
色彩センスのいらない配色講座
PDF
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
PDF
Xamarin 概要 @ 「Xamarin」って何? Wエバンジェリストによる特濃「Xamarin」勉強会 Rev2
PDF
[data analytics showcase] A12: データに隠された課題、ちゃんと見えていますか? by Tableau Japan 株式会社 ...
PPTX
Clash of Oni Online - VR Multiplay Sword Action
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
Introduction to NotifyPropertyChangedGenerator
見やすいプレゼン資料の作り方 - リニューアル増量版
開発キックオフ時にマネージャが行うべき11のこと ~Visual Studio Online & TFS 使い始めと HOME 画面の構成
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
はじめてのUniRx
「ずいぶんとダサいライティングを使っているのね」〜UniRxを用いた物理ベースライティング制御〜
Interactive UI with UniRx
ノンデザイナーのための配色理論
若輩エンジニアから見たUniRxを利用したゲーム開発
色彩センスのいらない配色講座
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
Xamarin 概要 @ 「Xamarin」って何? Wエバンジェリストによる特濃「Xamarin」勉強会 Rev2
[data analytics showcase] A12: データに隠された課題、ちゃんと見えていますか? by Tableau Japan 株式会社 ...
Clash of Oni Online - VR Multiplay Sword Action

Similar to DeclarativeSql

PDF
よろしい、ならばMicro-ORMだ
PDF
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
PDF
Entity Framework
PDF
Entity Framework(Core)についての概要を学ぼう
PDF
VSUG Day 2010 Summer - Using ADO.NET Entity Framework
PDF
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
PPTX
uroboroSQLの紹介 (OSC2017 Tokyo/Spring)
PPTX
.NET Standard で PostgreSql を使ってみた
PDF
Open棟梁機能紹介 v02-00
PPTX
Oracle Database Cloud と無料の純正開発ツールで開発効率を改善しよう!(db tech showcase 2016 Oracle セッ...
PPTX
ビジネス向けアプリケーションにこそ進めるMicro orm
PPTX
Sql world を支える技術
PPTX
20110607
PPTX
The seminar of asp.net at 201908 sakurug
PDF
Mvc conf session_4_ono
PPTX
Entity Framework 5.0 deep dive
PDF
Vsug ef
PDF
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
PDF
Daisukei vsug ef
PDF
Oracle Databaseを用いて学ぶ RDBMSの基本 (抜粋版) - JPOUG Oracle Database入学式 2016
よろしい、ならばMicro-ORMだ
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
Entity Framework
Entity Framework(Core)についての概要を学ぼう
VSUG Day 2010 Summer - Using ADO.NET Entity Framework
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
uroboroSQLの紹介 (OSC2017 Tokyo/Spring)
.NET Standard で PostgreSql を使ってみた
Open棟梁機能紹介 v02-00
Oracle Database Cloud と無料の純正開発ツールで開発効率を改善しよう!(db tech showcase 2016 Oracle セッ...
ビジネス向けアプリケーションにこそ進めるMicro orm
Sql world を支える技術
20110607
The seminar of asp.net at 201908 sakurug
Mvc conf session_4_ono
Entity Framework 5.0 deep dive
Vsug ef
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
Daisukei vsug ef
Oracle Databaseを用いて学ぶ RDBMSの基本 (抜粋版) - JPOUG Oracle Database入学式 2016

More from Takaaki Suzuki

PDF
今日からできる!簡単 .NET 高速化 Tips
PDF
C# における Redis 徹底活用
PDF
Inside FastEnum
PPTX
4 Colors Othello’s Algorithm
PPTX
Live Coding で学ぶ C# 7
PPTX
C# 7 Current Status
PDF
5 分で学ぶ Interpolated String Handler
PPTX
Sharing Deep Dive
PDF
30min Serverless xTuber
PPTX
Tetris Algorithm
PDF
SignalR Tune-up
PDF
酒の肴はC# vNext
PPTX
C# 7 New Features
PDF
Friendly
PDF
Universal Appとは? -デバイスに依存しないアプリケーション開発-
PDF
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
PDF
Sevens Algorithm
PDF
Twilioと.NET
PDF
Async History in .NET
PDF
WPF Interoperability
今日からできる!簡単 .NET 高速化 Tips
C# における Redis 徹底活用
Inside FastEnum
4 Colors Othello’s Algorithm
Live Coding で学ぶ C# 7
C# 7 Current Status
5 分で学ぶ Interpolated String Handler
Sharing Deep Dive
30min Serverless xTuber
Tetris Algorithm
SignalR Tune-up
酒の肴はC# vNext
C# 7 New Features
Friendly
Universal Appとは? -デバイスに依存しないアプリケーション開発-
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
Sevens Algorithm
Twilioと.NET
Async History in .NET
WPF Interoperability

DeclarativeSql


[8]ページ先頭

©2009-2025 Movatter.jp