JavaでDB接続時ORマッパーを使用してみた

# はじめに
未経験からエンジニアになって、結構苦戦した場所なので記録しておきます。
公式のやり方で結局正解だったのだけど、未経験からしたら訳わからんのですよ。

なので、自分なりの解釈と同じ初心者にわかりやすいように書いていきます。

色々例えて書くため明確には違う表現もあるかと思いますが、とりあえず何となく理解して動くものを作成していきますのでお願いします。

一応参考までに、[iciql](http://iciql.com/)こちらが公式サイトです。
# 開発環境
Windows 10 Pro
eclipse
MySQL 8.0.31
# ORマッパーとは
ORM(オブジェクト リレーショナル マッピング)のこと

意味として、RDB(リレーショナルデータベース)をオブジェクト指向型のやり方で扱えるようにするための手法のことです。

具体的には、RDB(リレーショナルデータベース)に対する操作がひとまとめになったライブラリを使用し、これを使うことによってSQLの生成を背後で行ってくれるみたいです。

要は、これを導入することで自分のデータベースをクラスとして扱ってその処理を裏側で色々できてしまうってことですね。

# iciql導入してみた
[こちら参考](https://qiita.com/keita_ide78/items/48fd62e9505d2ddad51f)に容量の小さいものを導入したかったので、今回はフレームワークなどは省きました。

Mavenプロジェクトを作成してコードを少し書くだけで実行できるとのことだったので、IDEにeclipseを導入していたこともありiciqlを選択しました。

# eclipseでMavenプロジェクトの作成
まずはプロジェクトの作成です。
作り方は[こちら](https://qiita.com/kirin1218/items/ec9c64e9dcebc1778dac)の**項目にあるMavenを使ったシンプルプロジェクトの作成**を参考にしてみてください。

# Mavenで作成後(iciql使用の為)
pom.xmlファイルが作成されていると思います。
そこにこちらを加えてください。
```
		<dependency>
			<groupId>com.gitblit.iciql</groupId>
			<artifactId>iciql</artifactId>
			<version>2.1.1</version>
		</dependency>
```
``<dependencies> </dependencies>``の中に記入でお間違いなく！

# MySQLにテーブルの作成
コマンドから入力してもいいし、MySQLWorkbenchを使用してもらっても構いません。

・データベースの作成
```
CREATE DATABASE sampledb;
```

・テーブルの作成
```
CREATE TABLE users(id int PRIMARY KEY, name VARCHAR(50));
```

・あらかじめ入れといてほしいユーザー情報
```
INSERT INTO users(id, name) values(2, '更新される者');
INSERT INTO users(id, name) values(3, '削除される者');
```

# コードサンプル
・データベースクラス(先ほど作成した**users**テーブルのクラス)の作成
```User.java
package 各自の属するものを入力してください(おそらく最初作成した際に初めから入力されている)

import com.iciql.Iciql.IQColumn;
import com.iciql.Iciql.IQTable;

@IQTable(name = "users")
public class User {

	@IQColumn(primaryKey = true)
	public Integer id;

	@IQColumn(length = 50)
	public String name;

	//	select機能のため空のコンストラクタ作成
	public User() {

	}

	//	insert,update機能のためのコンストラクタ作成
	public User(int id, String name) {
		this.id = id;
		this.name = name;
	}
}
```
・データベースを操作・実行するmainクラスの作成
```MyDbProvider.java
package 各自の属するものを入力してください(おそらく最初作成した際に初めから入力されている)

import java.util.List;
import com.iciql.Db;

public class MyDbProvider {
	public static void main(String[] args) {

		//	操作するusersテーブルのインスタンス作成
		User user = new User();

		//	DB接続
		Db connectDb = Db.open("jdbc:mysql://localhost/sampledb", "root", MySQLインストール時に設定しているrootユーザーのパスワードを入力);

		//	表示
		List<User> users = connectDb.from(user).select();
		for (User u : users) {
			System.out.println(u.id + "," + u.name);
		}

		//	登録
		connectDb.insert(new User(1, "新規登録者"));

		//	更新
		connectDb.update(new User(2, "更新登録者"));

		//	削除
		connectDb.from(user).where(user.id).is(3).delete();

		//	実行確認
		System.out.println("------------------");
		users = null;
		users = connectDb.from(user).select();
		for (User u : users) {
			System.out.println(u.id + "," + u.name);
		}

		//	次回実行のため実行前の状態に戻す(登録・削除)	
		connectDb.insert(new User(3, "削除される者");
		connectDb.from(user).where(user.id).is(1).delete();

		//	DB切断
		connectDb.close();
	}
}
```

こちらで実行できるはずです。
機能としては意味の無い物ですが、動き自体は確認できると思いますので試して見て下さい。

※推奨されていないエラーログが出るかもですが、今回は **とりあえず動く！** をメインに作成しているため割愛します。


# 終わりに
ORMの参考サイト一応あるけど、古かったりわかる人前提の書き方が多かったので自分用に記録してみました。


他にもわからなくて困っている人の助けになることを祈っています！