狠狠撸

狠狠撸Share a Scribd company logo
Introduction to
              CocoaSQLMapper
                  Kenji Nishishiro
                   @marvelph




13年1月26日土曜日
颁辞肠辞补厂蚕尝惭补辫辫别谤とは?

              Objective-CからSQLiteを利用するためのフレー
              ムワークです。

              JavaのiBATISの影響を受けています。



13年1月26日土曜日
対象となる开発者

              SQLiteのC API、あるいは FMDBのようなラッパ
              ーライブラリを利用している開発者。

              なぜCoreDataを使わないのか、説明が必要無
              い開発者。


13年1月26日土曜日
サンプルテーブル

                             key   name      age

                             1      kenji    41
   列に型は不要です                  2     yoshiko   41

                             3     izumi     17

       keyはautoincrementです   4     sumika    14


13年1月26日土曜日
モデルクラス

                  @interface Person : NSObject

                  @property (nonatomic) long long key;
                  @property (nonatomic) NSString *name;
                  @property (nonatomic) NSNumber *age;

                  @end




    テーブルの列名とプロパティ名を                        えます


13年1月26日土曜日
一行読み込み

 SMDatabase *database = [[SMDatabase alloc] initWithPath:path error:nil];

 NSString *sql = @"SELECT * FROM Person WHERE name = 'kenji'";
 Person *person = [database selectObjectBySQL:sql parameter:nil resultClass:[Person class]
 error:nil];




                        SQLとモデルのクラスを与えると、
                              インスタンスが得られます


13年1月26日土曜日
复数行読み込み
   NSString *sql = @"SELECT * FROM Person";
   NSArray *persons = [database selectArrayBySQL:sql parameter:nil
   resultClass:[Person class] error:nil];




                                  インスタンスの配列が、
                                        NSArayで得られます


13年1月26日土曜日
集计
        @interface Count : NSObject

        @property (nonatomic) int value;

        @end




               NSString *sql = @"SELECT COUNT(*) AS value FROM Person";
               Count *count = [database selectObjectBySQL:sql parameter:nil resultClass:
               [Count class] error:nil];




                                  結果セットに、
               AS句でプロパティ名を付けています

13年1月26日土曜日
ここまでのまとめ
              テーブルのデータをモデルに読み込む事が
              できます。

              テーブルのスキーマでは無く、SQLとマッピ
              ングします。

              データの型はモデルから決定されます。

13年1月26日土曜日
オープンソース


              https://github.com/marvelph/CocoaSQLMapper




13年1月26日土曜日
パラメータ
                                 @interface Parameter : NSObject

                                 @property (nonatomic, strong) NSNumber *value1;
                                 @property (nonatomic, strong) NSNumber *value2;

                                 @end




  Parameter *parameter = [[Parameter alloc] init];
  parameter.value1 = @10;
  parameter.value2 = @20;
  NSString *sql = @"SELECT * FROM Person WHERE :value1 <= age AND age <= :value2";
  NSArray *persons = [database selectArrayBySQL:sql parameter:parameter resultClass:
  [Person class] error:nil];




       バインド変数名をプロパティ名に合わせます
13年1月26日土曜日
挿入
        Person *person = [[Person alloc] init];
        person.name = @"setuna";
        person.age = @11;
        long long int key = [database insertBySQL:@"INSERT INTO Person (name, age)
        VALUES(:name, :age)" parameter:person error:nil];
        person.key = key;




   autoincrementされたkeyが手に入るので、
               行の読み込みが不要です
        後でupdateする時に必要ですよね?

13年1月26日土曜日
更新
              更新された行数が手に入るので、
                 悲観的ロックなどにどうぞ

          Person *person = [[Person alloc] init];
          person.key = 1;
          person.age = @31;
          int count = [database updateBySQL:@"UPDATE Person SET age = :age WHERE key
          = :key" parameter:person error:nil];




13年1月26日土曜日
削除


         deleteBySQLというメソッドがありますが、
               これは更新と一緒です




13年1月26日土曜日
DDL


              挿入?更新?削除以外のSQLには、
        特別な値を返さないexecuteBySQLを用います




13年1月26日土曜日
型のマッピング
        int   long long   BOOL    ?oat    double   NSNumber NSDate   NSString   NSData   nil


        int     int64      int   double   double     any    double     text     bytes    null




                          NSNumberは中身次第です
              NSDateはエポックからの経過秒数です
                        NSStringはUTF8として扱います
13年1月26日土曜日
ヒント
              nullを検索する時は、SQLにIS NULLと記述しな
              くても、パラメータにnilを指定する事で実
              現できます。

              NSNumberは、数値プロパティがnilを許したい
              時に用います。

13年1月26日土曜日
ヒント

              モデルにはゲッターとセッターでは無く、
              本物のプロパティが必要です。

              エラーの取得はオプションです。



13年1月26日土曜日
ここまでのまとめ

              挿入?更新?削除と操作別のメソッドがあ
              ります。

              扱えるプロパティの型には制限がありま
              す。


13年1月26日土曜日
行単位の処理
               NSString *sql = @"SELECT * FROM Person";
               [database selectWithBlock:^BOOL(Person *person, NSError
               *__autoreleasing *error) {
                   return YES;
               } bySQL:sql parameter:nil resultClass:[Person class] error:nil];




     行単位でブロックが呼び出されます
              結果行数が多い場合に、
      NSArrayの生成を避ける事ができます
       ブロックがNOを返すと中断します
13年1月26日土曜日
トランザクション

   transactionWithBlockに渡したブロック内の処理を、
    トランザクジョンとして纏める事ができます
       ブロックがNOを返すとロールバックします
               サンプルを読んでください


13年1月26日土曜日
エラー処理

    トランザクションブロック内側のエラーは、
              パラメータに返してください
トランザクション自体のエラーと一括処理できま
                    す
               サンプルを読んでください


13年1月26日土曜日
マルチスレッド

              SMDatabaseのインスタンスをスレッド毎に生
              成してください。

              デッドロック発生時のタイムアウトは未実
              装です。


13年1月26日土曜日
実绩


              PoiCaのiOS版で1年以上実際に使用していま
              す。http://poica.me/




13年1月26日土曜日
设计

              SQLを設定ファイルに分離する事は、可読性
              を下げると考えています。

              SQLのプリコンパイルは、メリットが少ない
              と考えています。


13年1月26日土曜日
构想
              パラメータの為にクラスを定義する事が面
              倒なので、NSDictionaryを使えるようにしたい
              です。この場合、NSNullのサポートも必要か
              もしれません。

              マルチスレッド利用時に、タイムアウトを
              サポートしたいです。
13年1月26日土曜日
ありがとうございました




13年1月26日土曜日

More Related Content

Viewers also liked (20)

PoiCa Sensorの組み込み
PoiCa Sensorの組み込みPoiCa Sensorの組み込み
PoiCa Sensorの組み込み
mavelph
?
Attacking Web Proxies
Attacking Web ProxiesAttacking Web Proxies
Attacking Web Proxies
InMobi Technology
?
Optimizer Hints
Optimizer HintsOptimizer Hints
Optimizer Hints
InMobi Technology
?
PostgreSQL 9.5 - Major Features
PostgreSQL 9.5 - Major FeaturesPostgreSQL 9.5 - Major Features
PostgreSQL 9.5 - Major Features
InMobi Technology
?
Building Spark as Service in Cloud
Building Spark as Service in CloudBuilding Spark as Service in Cloud
Building Spark as Service in Cloud
InMobi Technology
?
Building Machine Learning Pipelines
Building Machine Learning PipelinesBuilding Machine Learning Pipelines
Building Machine Learning Pipelines
InMobi Technology
?
Case Studies on PostgreSQL
Case Studies on PostgreSQLCase Studies on PostgreSQL
Case Studies on PostgreSQL
InMobi Technology
?
Cloud Computing (CCSME 2015 talk) - mypapit
Cloud Computing (CCSME 2015 talk) - mypapitCloud Computing (CCSME 2015 talk) - mypapit
Cloud Computing (CCSME 2015 talk) - mypapit
Mohammad Hafiz Cs Mypapit
?
8 Ways a Digital Media Platform is More Powerful than “Marketing”
8 Ways a Digital Media Platform is More Powerful than “Marketing”8 Ways a Digital Media Platform is More Powerful than “Marketing”
8 Ways a Digital Media Platform is More Powerful than “Marketing”
New Rainmaker
?
How Often Should You Post to Facebook and Twitter
How Often Should You Post to Facebook and TwitterHow Often Should You Post to Facebook and Twitter
How Often Should You Post to Facebook and Twitter
Buffer
?
狠狠撸s That Rock
狠狠撸s That Rock狠狠撸s That Rock
狠狠撸s That Rock
狠狠撸s That Rock
?
Why Content Marketing Fails
Why Content Marketing FailsWhy Content Marketing Fails
Why Content Marketing Fails
Rand Fishkin
?
What Makes Great Infographics
What Makes Great InfographicsWhat Makes Great Infographics
What Makes Great Infographics
狠狠撸Share
?
Masters of 狠狠撸Share
Masters of 狠狠撸ShareMasters of 狠狠撸Share
Masters of 狠狠撸Share
Kapost
?
STOP! VIEW THIS! 10-Step Checklist When Uploading to 狠狠撸share
STOP! VIEW THIS! 10-Step Checklist When Uploading to 狠狠撸shareSTOP! VIEW THIS! 10-Step Checklist When Uploading to 狠狠撸share
STOP! VIEW THIS! 10-Step Checklist When Uploading to 狠狠撸share
Empowered Presentations
?
You Suck At PowerPoint!
You Suck At PowerPoint!You Suck At PowerPoint!
You Suck At PowerPoint!
Jesse Desjardins - @jessedee
?
10 Ways to Win at 狠狠撸Share SEO & Presentation Optimization
10 Ways to Win at 狠狠撸Share SEO & Presentation Optimization10 Ways to Win at 狠狠撸Share SEO & Presentation Optimization
10 Ways to Win at 狠狠撸Share SEO & Presentation Optimization
Oneupweb
?
How To Get More From 狠狠撸Share - Super-Simple Tips For Content Marketing
How To Get More From 狠狠撸Share - Super-Simple Tips For Content MarketingHow To Get More From 狠狠撸Share - Super-Simple Tips For Content Marketing
How To Get More From 狠狠撸Share - Super-Simple Tips For Content Marketing
Content Marketing Institute
?
A Guide to 狠狠撸Share Analytics - Excerpts from Hubspot's Step by Step Guide ...
A Guide to 狠狠撸Share Analytics - Excerpts from Hubspot's Step by Step Guide ...A Guide to 狠狠撸Share Analytics - Excerpts from Hubspot's Step by Step Guide ...
A Guide to 狠狠撸Share Analytics - Excerpts from Hubspot's Step by Step Guide ...
狠狠撸Share
?
2015 Upload Campaigns Calendar - 狠狠撸Share
2015 Upload Campaigns Calendar - 狠狠撸Share2015 Upload Campaigns Calendar - 狠狠撸Share
2015 Upload Campaigns Calendar - 狠狠撸Share
狠狠撸Share
?
PoiCa Sensorの組み込み
PoiCa Sensorの組み込みPoiCa Sensorの組み込み
PoiCa Sensorの組み込み
mavelph
?
PostgreSQL 9.5 - Major Features
PostgreSQL 9.5 - Major FeaturesPostgreSQL 9.5 - Major Features
PostgreSQL 9.5 - Major Features
InMobi Technology
?
Building Spark as Service in Cloud
Building Spark as Service in CloudBuilding Spark as Service in Cloud
Building Spark as Service in Cloud
InMobi Technology
?
Building Machine Learning Pipelines
Building Machine Learning PipelinesBuilding Machine Learning Pipelines
Building Machine Learning Pipelines
InMobi Technology
?
8 Ways a Digital Media Platform is More Powerful than “Marketing”
8 Ways a Digital Media Platform is More Powerful than “Marketing”8 Ways a Digital Media Platform is More Powerful than “Marketing”
8 Ways a Digital Media Platform is More Powerful than “Marketing”
New Rainmaker
?
How Often Should You Post to Facebook and Twitter
How Often Should You Post to Facebook and TwitterHow Often Should You Post to Facebook and Twitter
How Often Should You Post to Facebook and Twitter
Buffer
?
Why Content Marketing Fails
Why Content Marketing FailsWhy Content Marketing Fails
Why Content Marketing Fails
Rand Fishkin
?
What Makes Great Infographics
What Makes Great InfographicsWhat Makes Great Infographics
What Makes Great Infographics
狠狠撸Share
?
Masters of 狠狠撸Share
Masters of 狠狠撸ShareMasters of 狠狠撸Share
Masters of 狠狠撸Share
Kapost
?
STOP! VIEW THIS! 10-Step Checklist When Uploading to 狠狠撸share
STOP! VIEW THIS! 10-Step Checklist When Uploading to 狠狠撸shareSTOP! VIEW THIS! 10-Step Checklist When Uploading to 狠狠撸share
STOP! VIEW THIS! 10-Step Checklist When Uploading to 狠狠撸share
Empowered Presentations
?
10 Ways to Win at 狠狠撸Share SEO & Presentation Optimization
10 Ways to Win at 狠狠撸Share SEO & Presentation Optimization10 Ways to Win at 狠狠撸Share SEO & Presentation Optimization
10 Ways to Win at 狠狠撸Share SEO & Presentation Optimization
Oneupweb
?
How To Get More From 狠狠撸Share - Super-Simple Tips For Content Marketing
How To Get More From 狠狠撸Share - Super-Simple Tips For Content MarketingHow To Get More From 狠狠撸Share - Super-Simple Tips For Content Marketing
How To Get More From 狠狠撸Share - Super-Simple Tips For Content Marketing
Content Marketing Institute
?
A Guide to 狠狠撸Share Analytics - Excerpts from Hubspot's Step by Step Guide ...
A Guide to 狠狠撸Share Analytics - Excerpts from Hubspot's Step by Step Guide ...A Guide to 狠狠撸Share Analytics - Excerpts from Hubspot's Step by Step Guide ...
A Guide to 狠狠撸Share Analytics - Excerpts from Hubspot's Step by Step Guide ...
狠狠撸Share
?
2015 Upload Campaigns Calendar - 狠狠撸Share
2015 Upload Campaigns Calendar - 狠狠撸Share2015 Upload Campaigns Calendar - 狠狠撸Share
2015 Upload Campaigns Calendar - 狠狠撸Share
狠狠撸Share
?

Similar to Introduction to cocoa sql mapper (17)

SQL Serverの関数を一覧でマスターしよう
SQL Serverの関数を一覧でマスターしようSQL Serverの関数を一覧でマスターしよう
SQL Serverの関数を一覧でマスターしよう
A AOKI
?
厂肠补濒补.箩蝉プロジェクト作成まで
厂肠补濒补.箩蝉プロジェクト作成まで厂肠补濒补.箩蝉プロジェクト作成まで
厂肠补濒补.箩蝉プロジェクト作成まで
Tomohiro Suwa
?
Tdd
TddTdd
Tdd
Takaya Kotohata
?
DeclarativeSql
DeclarativeSqlDeclarativeSql
DeclarativeSql
Takaaki Suzuki
?
Google Gears データベースの基礎
Google Gears データベースの基礎Google Gears データベースの基礎
Google Gears データベースの基礎
webos-goodies
?
大(中)規模Java script開発について
大(中)規模Java script開発について大(中)規模Java script開発について
大(中)規模Java script開発について
Yuki Tanaka
?
笔别谤濒と厂蚕尝のいろいろ
笔别谤濒と厂蚕尝のいろいろ笔别谤濒と厂蚕尝のいろいろ
笔别谤濒と厂蚕尝のいろいろ
Takuya Tsuchida
?
スケーラフ?ルなアフ?リケーション开発を考える
スケーラフ?ルなアフ?リケーション开発を考えるスケーラフ?ルなアフ?リケーション开発を考える
スケーラフ?ルなアフ?リケーション开発を考える
Yusaku Watanabe
?
Nds meetup8 lt
Nds meetup8 ltNds meetup8 lt
Nds meetup8 lt
ushiboy
?
めんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scalaめんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scala
Kazuhiro Sera
?
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
Toshi Harada
?
scala.collection 再入門 (改)
scala.collection 再入門 (改)scala.collection 再入門 (改)
scala.collection 再入門 (改)
Ryuichi ITO
?
例外设计における大罪
例外设计における大罪例外设计における大罪
例外设计における大罪
Takuto Wada
?
PostgreSQL 12の話
PostgreSQL 12の話PostgreSQL 12の話
PostgreSQL 12の話
Masahiko Sawada
?
闯顿碍8で変わる闯补惫补プログラミング
闯顿碍8で変わる闯补惫补プログラミング闯顿碍8で変わる闯补惫补プログラミング
闯顿碍8で変わる闯补惫补プログラミング
Go Hayakawa
?
Osc shimane-2016-do-postgres-dream-of-graph-database
Osc shimane-2016-do-postgres-dream-of-graph-databaseOsc shimane-2016-do-postgres-dream-of-graph-database
Osc shimane-2016-do-postgres-dream-of-graph-database
Toshi Harada
?
データベースシステム论06 - SQL基础演习1 データの定义と操作
データベースシステム论06 - SQL基础演习1 データの定义と操作データベースシステム论06 - SQL基础演习1 データの定义と操作
データベースシステム论06 - SQL基础演习1 データの定义と操作
Shohei Yokoyama
?
SQL Serverの関数を一覧でマスターしよう
SQL Serverの関数を一覧でマスターしようSQL Serverの関数を一覧でマスターしよう
SQL Serverの関数を一覧でマスターしよう
A AOKI
?
厂肠补濒补.箩蝉プロジェクト作成まで
厂肠补濒补.箩蝉プロジェクト作成まで厂肠补濒补.箩蝉プロジェクト作成まで
厂肠补濒补.箩蝉プロジェクト作成まで
Tomohiro Suwa
?
Google Gears データベースの基礎
Google Gears データベースの基礎Google Gears データベースの基礎
Google Gears データベースの基礎
webos-goodies
?
大(中)規模Java script開発について
大(中)規模Java script開発について大(中)規模Java script開発について
大(中)規模Java script開発について
Yuki Tanaka
?
笔别谤濒と厂蚕尝のいろいろ
笔别谤濒と厂蚕尝のいろいろ笔别谤濒と厂蚕尝のいろいろ
笔别谤濒と厂蚕尝のいろいろ
Takuya Tsuchida
?
スケーラフ?ルなアフ?リケーション开発を考える
スケーラフ?ルなアフ?リケーション开発を考えるスケーラフ?ルなアフ?リケーション开発を考える
スケーラフ?ルなアフ?リケーション开発を考える
Yusaku Watanabe
?
Nds meetup8 lt
Nds meetup8 ltNds meetup8 lt
Nds meetup8 lt
ushiboy
?
めんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scalaめんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scala
Kazuhiro Sera
?
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
Toshi Harada
?
scala.collection 再入門 (改)
scala.collection 再入門 (改)scala.collection 再入門 (改)
scala.collection 再入門 (改)
Ryuichi ITO
?
例外设计における大罪
例外设计における大罪例外设计における大罪
例外设计における大罪
Takuto Wada
?
闯顿碍8で変わる闯补惫补プログラミング
闯顿碍8で変わる闯补惫补プログラミング闯顿碍8で変わる闯补惫补プログラミング
闯顿碍8で変わる闯补惫补プログラミング
Go Hayakawa
?
Osc shimane-2016-do-postgres-dream-of-graph-database
Osc shimane-2016-do-postgres-dream-of-graph-databaseOsc shimane-2016-do-postgres-dream-of-graph-database
Osc shimane-2016-do-postgres-dream-of-graph-database
Toshi Harada
?
データベースシステム论06 - SQL基础演习1 データの定义と操作
データベースシステム论06 - SQL基础演习1 データの定义と操作データベースシステム论06 - SQL基础演习1 データの定义と操作
データベースシステム论06 - SQL基础演习1 データの定义と操作
Shohei Yokoyama
?

Recently uploaded (7)

自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
sugiuralab
?
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
Sojitz Tech-Innovation USA
?
カスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージ
カスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージカスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージ
カスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージ
info819904
?
2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿
2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿
2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿
翔栄 杉田
?
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
?
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
info819904
?
鲍-22プログラミング?コンテスト提出资料「作品説明动画」制作のポイントをご绍介
鲍-22プログラミング?コンテスト提出资料「作品説明动画」制作のポイントをご绍介鲍-22プログラミング?コンテスト提出资料「作品説明动画」制作のポイントをご绍介
鲍-22プログラミング?コンテスト提出资料「作品説明动画」制作のポイントをご绍介
鲍-22プログラミング?コンテスト运営事务局
?
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
sugiuralab
?
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
Sojitz Tech-Innovation USA
?
カスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージ
カスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージカスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージ
カスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージ
info819904
?
2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿
2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿
2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿
翔栄 杉田
?
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
?
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
info819904
?

Introduction to cocoa sql mapper

  • 1. Introduction to CocoaSQLMapper Kenji Nishishiro @marvelph 13年1月26日土曜日
  • 2. 颁辞肠辞补厂蚕尝惭补辫辫别谤とは? Objective-CからSQLiteを利用するためのフレー ムワークです。 JavaのiBATISの影響を受けています。 13年1月26日土曜日
  • 3. 対象となる开発者 SQLiteのC API、あるいは FMDBのようなラッパ ーライブラリを利用している開発者。 なぜCoreDataを使わないのか、説明が必要無 い開発者。 13年1月26日土曜日
  • 4. サンプルテーブル key name age 1 kenji 41 列に型は不要です 2 yoshiko 41 3 izumi 17 keyはautoincrementです 4 sumika 14 13年1月26日土曜日
  • 5. モデルクラス @interface Person : NSObject @property (nonatomic) long long key; @property (nonatomic) NSString *name; @property (nonatomic) NSNumber *age; @end テーブルの列名とプロパティ名を えます 13年1月26日土曜日
  • 6. 一行読み込み SMDatabase *database = [[SMDatabase alloc] initWithPath:path error:nil]; NSString *sql = @"SELECT * FROM Person WHERE name = 'kenji'"; Person *person = [database selectObjectBySQL:sql parameter:nil resultClass:[Person class] error:nil]; SQLとモデルのクラスを与えると、 インスタンスが得られます 13年1月26日土曜日
  • 7. 复数行読み込み NSString *sql = @"SELECT * FROM Person"; NSArray *persons = [database selectArrayBySQL:sql parameter:nil resultClass:[Person class] error:nil]; インスタンスの配列が、 NSArayで得られます 13年1月26日土曜日
  • 8. 集计 @interface Count : NSObject @property (nonatomic) int value; @end NSString *sql = @"SELECT COUNT(*) AS value FROM Person"; Count *count = [database selectObjectBySQL:sql parameter:nil resultClass: [Count class] error:nil]; 結果セットに、 AS句でプロパティ名を付けています 13年1月26日土曜日
  • 9. ここまでのまとめ テーブルのデータをモデルに読み込む事が できます。 テーブルのスキーマでは無く、SQLとマッピ ングします。 データの型はモデルから決定されます。 13年1月26日土曜日
  • 10. オープンソース https://github.com/marvelph/CocoaSQLMapper 13年1月26日土曜日
  • 11. パラメータ @interface Parameter : NSObject @property (nonatomic, strong) NSNumber *value1; @property (nonatomic, strong) NSNumber *value2; @end Parameter *parameter = [[Parameter alloc] init]; parameter.value1 = @10; parameter.value2 = @20; NSString *sql = @"SELECT * FROM Person WHERE :value1 <= age AND age <= :value2"; NSArray *persons = [database selectArrayBySQL:sql parameter:parameter resultClass: [Person class] error:nil]; バインド変数名をプロパティ名に合わせます 13年1月26日土曜日
  • 12. 挿入 Person *person = [[Person alloc] init]; person.name = @"setuna"; person.age = @11; long long int key = [database insertBySQL:@"INSERT INTO Person (name, age) VALUES(:name, :age)" parameter:person error:nil]; person.key = key; autoincrementされたkeyが手に入るので、 行の読み込みが不要です 後でupdateする時に必要ですよね? 13年1月26日土曜日
  • 13. 更新 更新された行数が手に入るので、 悲観的ロックなどにどうぞ Person *person = [[Person alloc] init]; person.key = 1; person.age = @31; int count = [database updateBySQL:@"UPDATE Person SET age = :age WHERE key = :key" parameter:person error:nil]; 13年1月26日土曜日
  • 14. 削除 deleteBySQLというメソッドがありますが、 これは更新と一緒です 13年1月26日土曜日
  • 15. DDL 挿入?更新?削除以外のSQLには、 特別な値を返さないexecuteBySQLを用います 13年1月26日土曜日
  • 16. 型のマッピング int long long BOOL ?oat double NSNumber NSDate NSString NSData nil int int64 int double double any double text bytes null NSNumberは中身次第です NSDateはエポックからの経過秒数です NSStringはUTF8として扱います 13年1月26日土曜日
  • 17. ヒント nullを検索する時は、SQLにIS NULLと記述しな くても、パラメータにnilを指定する事で実 現できます。 NSNumberは、数値プロパティがnilを許したい 時に用います。 13年1月26日土曜日
  • 18. ヒント モデルにはゲッターとセッターでは無く、 本物のプロパティが必要です。 エラーの取得はオプションです。 13年1月26日土曜日
  • 19. ここまでのまとめ 挿入?更新?削除と操作別のメソッドがあ ります。 扱えるプロパティの型には制限がありま す。 13年1月26日土曜日
  • 20. 行単位の処理 NSString *sql = @"SELECT * FROM Person"; [database selectWithBlock:^BOOL(Person *person, NSError *__autoreleasing *error) { return YES; } bySQL:sql parameter:nil resultClass:[Person class] error:nil]; 行単位でブロックが呼び出されます 結果行数が多い場合に、 NSArrayの生成を避ける事ができます ブロックがNOを返すと中断します 13年1月26日土曜日
  • 21. トランザクション transactionWithBlockに渡したブロック内の処理を、 トランザクジョンとして纏める事ができます ブロックがNOを返すとロールバックします サンプルを読んでください 13年1月26日土曜日
  • 22. エラー処理 トランザクションブロック内側のエラーは、 パラメータに返してください トランザクション自体のエラーと一括処理できま す サンプルを読んでください 13年1月26日土曜日
  • 23. マルチスレッド SMDatabaseのインスタンスをスレッド毎に生 成してください。 デッドロック発生時のタイムアウトは未実 装です。 13年1月26日土曜日
  • 24. 実绩 PoiCaのiOS版で1年以上実際に使用していま す。http://poica.me/ 13年1月26日土曜日
  • 25. 设计 SQLを設定ファイルに分離する事は、可読性 を下げると考えています。 SQLのプリコンパイルは、メリットが少ない と考えています。 13年1月26日土曜日
  • 26. 构想 パラメータの為にクラスを定義する事が面 倒なので、NSDictionaryを使えるようにしたい です。この場合、NSNullのサポートも必要か もしれません。 マルチスレッド利用時に、タイムアウトを サポートしたいです。 13年1月26日土曜日