質問編集履歴

2 C++のソースを追加

ShogoOtake

ShogoOtake score 12

2016/06/27 00:06  投稿

HasManyの実装方法
###ORMを作ってみたいと考えています
ORMを作ってみたいと考えているのですが、HasManyの実装方法がわからず困っています。
usersテーブル(id, name)
itemsテーブル(id, name)
で1:Nのリレーションがあったとします。
```sql
select u.name, i.name from users as u inner join items as i on u.id = i.user_id;
```
を実行すると
otake|item1
otake|item2
という結果が返ってくると思うのですが、これをu.name: String, i.name: Seq[String]にまとめたいです。
どのような処理をすればまとめることができるのでしょうか?
言語はなんでもいいですがC++だと嬉しいです。
###C++でドライバを使ってselectした結果を表示するもの  
```c++  
#include <memory>  
#include <mysql_connection.h>  
#include <mysql_driver.h>  
#include <cppconn/resultset.h>  
#include <cppconn/statement.h>  
 
int main(int argc, char const *argv[]) {  
 auto driver = sql::mysql::get_mysql_driver_instance();  
 auto con = std::shared_ptr<sql::Connection>(driver->connect("localhost", "root", ""));  
 con->setSchema("test");  
 auto stmt = std::shared_ptr<sql::Statement>(con->createStatement());  
 auto res = std::shared_ptr<sql::ResultSet>(stmt->executeQuery("select u.name, i.name from users as u inner join items as i on u.id = i.user_id"));  
 while (res->next()) {  
   std::cout << res->getString(1) << ", " << res->getString(2) << std::endl;  
 }  
 return 0;  
}  
```  
 
###試したこと
幾つかORMのソースを見てみたのですがわかりませんでした。(以下ソースを見てみたもの)
[Diesel](http://diesel.rs/)
[ScalikeJDBC](http://scalikejdbc.org/)
[hiberlite](https://github.com/paulftw/hiberlite)
[Sequelize](http://docs.sequelizejs.com/en/latest/)
よろしくお願い致します。
  • ORM

    89 questions

    ORM(オブジェクト関係マッピング)はオブジェクト指向のシステムとリレーショナルデータベースの間でマッピングを行う技術です。

  • データベース

    2940 questions

    データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

  • SQL

    5813 questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

1 意図をわかりやすくした

ShogoOtake

ShogoOtake score 12

2016/06/26 19:48  投稿

HasManyの実装方法
###ORMを作ってみたいと考えています
ORMを作ってみたいと考えているのですが、HasManyの実装方法がわからず困っています。
usersテーブル(id, name)
itemsテーブル(id, name)
で1:Nのリレーションがあったとします。
```sql
select u.name, i.name from users as u inner join items as i on u.id = i.user_id;
```
を実行すると
otake|item1
otake|item2
という結果が返ってくると思うのですが、これをu.name: String, i.name: Seq[String]にまとめたいです。
どのような処理をすればまとめることができるのでしょうか?
###一応C++で上と同じ結果が返ってくるものを書いてみました
```cpp
#include <memory>
#include <mysql_connection.h>
#include <mysql_driver.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>
int main(int argc, char const *argv[]) {
 auto driver = sql::mysql::get_mysql_driver_instance();
 auto con = std::shared_ptr<sql::Connection>(driver->connect("localhost", "root", ""));
 con->setSchema("test");
 auto stmt = std::shared_ptr<sql::Statement>(con->createStatement());
 auto res = std::shared_ptr<sql::ResultSet>(stmt->executeQuery("select u.name, i.name from users as u inner join items as i on u.id = i.user_id"));
 while (res->next()) {
   std::cout << res->getString(1) << ", " << res->getString(2) << std::endl;
 }
 return 0;
}
```
言語はなんでもいいですがC++だと嬉しいです。
###試したこと
幾つかORMのソースを見てみたのですがわかりませんでした。(以下ソースを見てみたもの)
[Diesel](http://diesel.rs/)
[ScalikeJDBC](http://scalikejdbc.org/)
[hiberlite](https://github.com/paulftw/hiberlite)
[Sequelize](http://docs.sequelizejs.com/en/latest/)
よろしくお願い致します。
  • ORM

    89 questions

    ORM(オブジェクト関係マッピング)はオブジェクト指向のシステムとリレーショナルデータベースの間でマッピングを行う技術です。

  • データベース

    2940 questions

    データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る