SimpleORM4Jを始める

概要

このページでは、SimpleORM4Jの使用方法をご説明していきます。
eclipseで以下の簡単なアプリケーションを作成していきます。

  • コンソールアプリケーション
  • WEBアプリケーション(Glassfish)
  • WEBアプリケーション(Tomcat)

コンソールアプリケーション

eclipseを使用して、MySQLに接続するコンソールアプリケーションを作成していきます。
MySQLにはこのアプリケーションで検索をする架空の「学部マスタ」(mst_department)データを登録しています。

eclipseで「Javaプロジェクト」の作成

eclipseを起動して、「Javaプロジェクト」を作成します。
今回は、プロジェクト名は「So4jConsoleProject」とします

eclipseを起動して、「Javaプロジェクト」を作成します
eclipseを起動して、「Javaプロジェクト」を作成します

JDBCドライバのダウンロード

MySQLのJDBCドライバ(Connector/J)をダウンロードします。
https://dev.mysql.com/downloads/connector/j/

simpleorm4j.jarのダウンロード

GitHubリポジトリの「SimpleORM4J」のページからsimpleorm4j.jarをダウンロードします。
https://github.com/shigeru-kuratani/SimpleORM4J

ダウンロードしたjarファイルを「lib」に配置

ダウンロードした「Connector/J」と「simpleorm4j.jar]を、プロジェクト内に作成した「lib」フォルダに配置します。

ダウンロードしたjarファイルを「lib」に配置する

jarファイルをビルドパスに追加

「lib」フォルダに配置したjarファイルをビルドパスに追加します。

jarファイルをビルドパスに追加

設定ファイル(so4j.xml)の追加

設定ファイル(so4j.xml)をsrcフォルダに追加します。

jarファイルをビルドパスに追加

コンテナのコネクションプールを使用せずに直接JDBCを使用してデータベースに接続処理を実行する場合は、 設定ファイル(so4j.xml)に以下の情報を定義します。

  • URL
  • ユーザ
  • パスワード
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>SimpleORM4J設定ファイル</comment>
<entry key="url">jdbc:mysql://localhost:3306/SimpleORM4J</entry>
<entry key="user">SimpleORM4J</entry>
<entry key="password">SimpleORM4J</entry>
</properties>

ソースコードの作成

サンプルプログラムでは、学部テーブル(mst_department)から「学校ID=2」「学部名=文学部」のデータを検索して、コンソールに表示してみます。
※ コンソール表示の際に、表形式で表示する為に「helper.EntityResultViewHelper.java」を使用しています。

■ entity.Department.java
package entity;

import java.util.Date;

import net.skuratani.simpleorm4j.annotation.Column;
import net.skuratani.simpleorm4j.annotation.Entity;
import net.skuratani.simpleorm4j.annotation.GenerateValue;
import net.skuratani.simpleorm4j.annotation.Id;
import net.skuratani.simpleorm4j.annotation.Table;
import net.skuratani.simpleorm4j.type.GenerationType;

/**
 * 学部エンティティ
 */
@Entity
@Table(name="mst_department")
public class Department {

	@Id
	@GenerateValue(strategy=GenerationType.AUTO)
	@Column(name="id")
	private int id;

	@Column(name="name")
	private String name;

	@Column(name="school_id")
	private String schoolId;

	@Column(name="delete_flag")
	private String deleteFlag;

	@Column(name="regist_date")
	private Date registDate;

	@Column(name="update_date")
	private Date updateDate;

	// getter/setter
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSchoolId() {
		return schoolId;
	}

	public void setSchoolId(String schoolId) {
		this.schoolId = schoolId;
	}

	public String getDeleteFlag() {
		return deleteFlag;
	}

	public void setDeleteFlag(String deleteFlag) {
		this.deleteFlag = deleteFlag;
	}

	public Date getRegistDate() {
		return registDate;
	}

	public void setRegistDate(Date registDate) {
		this.registDate = registDate;
	}

	public Date getUpdateDate() {
		return updateDate;
	}

	public void setUpdateDate(Date updateDate) {
		this.updateDate = updateDate;
	}
}
■ exec.Sample.java
package exec;

import java.util.List;

import entity.Department;
import helper.EntityResultViewHelper;
import net.skuratani.simpleorm4j.expression.Expression;
import net.skuratani.simpleorm4j.persistence.Criteria;
import net.skuratani.simpleorm4j.persistence.EntityManager;
import net.skuratani.simpleorm4j.persistence.EntityManagerFactory;
import net.skuratani.simpleorm4j.persistence.Query;

/**
 * SimpleORM4J コンソールアプリケーションサンプル
 */
public class Sample {

	/**
	 * main.
	 * @param args
	 */
	public static void main(String[] args) {
		new Sample().execute();
	}

	/**
	 * execute.
	 */
	private void execute() {
		try {
			EntityManager em = EntityManagerFactory.createEntityManager();
			Criteria criteria = em.getCriteria();
			criteria.select(Department.class)
				  .from(Department.class)
				  .where(Expression.equal(Department.class.getDeclaredField("schoolId"), 2),
					     Expression.equal(Department.class.getDeclaredField("name"), "文学部"));
			Query query = em.createQuery(criteria);
			List<Department> resultList = (List<Department>) query.getResultList();
			System.out.println(EntityResultViewHelper.generateTableView(resultList));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

サンプル実行結果

サンプルプログラムの実行結果は以下のようになります。

■ 実行結果
id   name     schoolId   deleteFlag   registDate    updateDate              
---------------------------------------------------------------------------
7    文学部   2           0              2017-01-07   2017-01-07 10:10:10.0   

WEBアプリケーション(Glassfish)

次は、Glassfishで作成したデータベースコネクションプール(DBCP)を利用して、データベースに接続するWEBアプリケーションを作成していきます。
接続するデータベースはOracle Databaseを使用します。

eclipseで「動的WEBプロジェクト」の作成

eclipseを起動して、「動的WEBプロジェクト」を作成します。
今回は、プロジェクト名は「So4jWEBProject1」とします

eclipseを起動して、「Javaプロジェクト」を作成します
eclipseを起動して、「Javaプロジェクト」を作成します

JDBCドライバのダウンロード

OracleのJDBCドライバ(ojdbc)をダウンロードします。
https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html

simpleorm4j.jarのダウンロード

GitHubリポジトリの「SimpleORM4J」のページからsimpleorm4j.jarをダウンロードします。
https://github.com/shigeru-kuratani/SimpleORM4J

ダウンロードしたjarファイルを「WEB-INF/lib」に配置

ダウンロードした「ojdbcX.jar」と「simpleorm4j.jar]を、プロジェクト内に作成した「WEB-INF/lib」フォルダに配置します。

ダウンロードしたjarファイルを「WEB-INF/lib」に配置する

Glassfishでコネクションプールを作成

Glassfishの管理コンソールで、データベースへの「JDBC Connection Pools」を作成します。
※ 今回はOracle Databaseへのコネクションプールを設定しています。

JDBC Connection Pools JDBC Connection Pools JDBC Connection Pools

作成したコネクションプールを使用してJDBCリソースを作成します。
今回はリソース名は「jdbc/so4j」とします。

JDBC Resources

設定ファイル(so4j.xml)の追加

設定ファイル(so4j.xml)をsrcフォルダに追加します。
設定ファイルの内容は、Glassfishに作成したコネクションプールを使用する為に、データソース名を 定義します。

設定ファイル(so4j.xml)の追加
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>SimpleORM4J設定ファイル</comment>
<entry key="dsn">jdbc/so4j</entry>
<entry key="autoCommit">true</entry>
<entry key="transactionIsolation">2</entry>
</properties>

ソースコードの作成

サンプルプログラムでは、学部テーブル(mst_department)から「学校ID=2」「学部名=文学部」のデータを検索して、WEBブラウザに表示してみます。
※ 出力の際に表形式で表示する為に「helper.EntityResultViewHelper.java」を使用しています。
※ 「学部エンティティ」クラスは、コンソールアプリケーションと同様です。

■ entity.Department.java
package entity;

import java.util.Date;

import net.skuratani.simpleorm4j.annotation.Column;
import net.skuratani.simpleorm4j.annotation.Entity;
import net.skuratani.simpleorm4j.annotation.GenerateValue;
import net.skuratani.simpleorm4j.annotation.Id;
import net.skuratani.simpleorm4j.annotation.Table;
import net.skuratani.simpleorm4j.type.GenerationType;

/**
 * 学部エンティティ
 */
@Entity
@Table(name="MST_DEPARTMENT")
public class Department {

	@Id
	@GenerateValue(strategy=GenerationType.SEQUENCE, sequence="SEQ_MST_DEPARTMENT")
	@Column(name="ID")
	private int id;

	@Column(name="NAME")
	private String name;

	@Column(name="SCHOOL_ID")
	private String schoolId;

	@Column(name="DELETE_FLAG")
	private String deleteFlag;

	@Column(name="REGIST_DATE")
	private Date registDate;

	@Column(name="UPDATE_DATE")
	private Date updateDate;

	// getter/setter
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSchoolId() {
		return schoolId;
	}

	public void setSchoolId(String schoolId) {
		this.schoolId = schoolId;
	}

	public String getDeleteFlag() {
		return deleteFlag;
	}

	public void setDeleteFlag(String deleteFlag) {
		this.deleteFlag = deleteFlag;
	}

	public Date getRegistDate() {
		return registDate;
	}

	public void setRegistDate(Date registDate) {
		this.registDate = registDate;
	}

	public Date getUpdateDate() {
		return updateDate;
	}

	public void setUpdateDate(Date updateDate) {
		this.updateDate = updateDate;
	}
}
■ servlet.Sample.java
package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import entity.Department;
import helper.EntityResultViewHelper;
import net.skuratani.simpleorm4j.expression.Expression;
import net.skuratani.simpleorm4j.persistence.Criteria;
import net.skuratani.simpleorm4j.persistence.EntityManager;
import net.skuratani.simpleorm4j.persistence.EntityManagerFactory;
import net.skuratani.simpleorm4j.persistence.Query;

/**
 * WEBアプリケーション(Glassfish)サンプル
 */
@WebServlet("/init")
public class Sample extends HttpServlet {

	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
		try {
			EntityManager em = EntityManagerFactory.createEntityManager();
			Criteria criteria = em.getCriteria();
			criteria.select(Department.class)
				   .from(Department.class)
				   .where(Expression.equal(Department.class.getDeclaredField("schoolId"), 2),
					      Expression.equal(Department.class.getDeclaredField("name"), "文学部"));
			Query query = em.createQuery(criteria);
			List<Department> resultList = (List<Department>) query.getResultList();
			out.println(EntityResultViewHelper.generateTableView(resultList));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

サンプル実行結果

サンプルプログラムの実行結果は以下のようになります。

サンプル実行結果

WEBアプリケーション(Tomcat)

次は、Tomcatで実装されているデータベースコネクションプール(DBCP)を利用して、データベースに接続するWEBアプリケーションを作成していきます。
接続するデータベースはPostgreSQLを使用します。

eclipseで「動的WEBプロジェクト」の作成

eclipseを起動して、「動的WEBプロジェクト」を作成します。
今回は、プロジェクト名は「So4jWEBProject2」とします

eclipseを起動して、「Javaプロジェクト」を作成します
eclipseを起動して、「Javaプロジェクト」を作成します

JDBCドライバのダウンロード

PostgreSQLのJDBCドライバ(PostgreSQL JDBC Driver)をダウンロードします。
https://jdbc.postgresql.org/

simpleorm4j.jarのダウンロード

GitHubリポジトリの「SimpleORM4J」のページからsimpleorm4j.jarをダウンロードします。
https://github.com/shigeru-kuratani/SimpleORM4J

ダウンロードしたjarファイルを「WEB-INF/lib」に配置

ダウンロードした「postgresql-XX.jar」と「simpleorm4j.jar]を、プロジェクト内に作成した「WEB-INF/lib」フォルダに配置します。

ダウンロードしたjarファイルを「WEB-INF/lib」に配置する

Tomcatでコネクションプールを作成

Tomcatに実装されているDBCPは「META-INF」配下に「context.xml」を配置することで実現されます。
参考として任意のパラメータを設定した「context.xml」を「META-INF」配下に配置します。

Tomcatでコネクションプールを作成
<?xml version="1.0" encoding="UTF-8"?>
<Context>
	<Resource name="jdbc/so4j"
			  auth="Container"
			  type="javax.sql.DataSource"
			  maxActive="5"
			  maxIdle="5"
			  maxWait="10000"
			  username="SimpleORM4J"
			  password="SimpleORM4J"
			  driverClassName="org.postgresql.Driver"
			  url="jdbc:postgresql://localhost:5432/SimpleORM4J"/>
</Context>

設定ファイル(so4j.xml)の追加

設定ファイル(so4j.xml)をsrcフォルダに追加します。
設定ファイルの内容は、Glassfishに作成したコネクションプールを使用する為に、データソース名を 定義します。

設定ファイル(so4j.xml)の追加
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>SimpleORM4J設定ファイル</comment>
<entry key="dsn">jdbc/so4j</entry>
</properties>

ソースコードの作成

サンプルプログラムでは、学部テーブル(mst_department)から「学校ID=2」「学部名=文学部」のデータを検索して、WEBブラウザに表示してみます。
※ 出力の際に表形式で表示する為に「helper.EntityResultViewHelper.java」を使用しています。
※ 「学部エンティティ」クラスは、コンソールアプリケーションと同様です。

■ servlet.Sample.java
package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import entity.Department;
import helper.EntityResultViewHelper;
import net.skuratani.simpleorm4j.expression.Expression;
import net.skuratani.simpleorm4j.persistence.Criteria;
import net.skuratani.simpleorm4j.persistence.EntityManager;
import net.skuratani.simpleorm4j.persistence.EntityManagerFactory;
import net.skuratani.simpleorm4j.persistence.Query;

/**
 * WEBアプリケーション(Tomcat)サンプル
 */
@WebServlet("/init")
public class Sample extends HttpServlet {

	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
		try {
			EntityManager em = EntityManagerFactory.createEntityManager();
			Criteria criteria = em.getCriteria();
			criteria.select(Department.class)
				   .from(Department.class)
				   .where(Expression.equal(Department.class.getDeclaredField("schoolId"), 2),
					      Expression.equal(Department.class.getDeclaredField("name"), "文学部"));
			Query query = em.createQuery(criteria);
			List<Department> resultList = (List<Department>) query.getResultList();
			out.println(EntityResultViewHelper.generateTableView(resultList));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

サンプル実行結果

サンプルプログラムの実行結果は以下のようになります。

サンプル実行結果

ご意見・ご感想・バグ報告

×

SimpleORM4Jへのご意見やご感想がございましたら、メッセージをお願い致します。
また、SimpleORM4Jを使用して頂きまして、バグがございましたらご連絡を頂けると助かります。
皆様からのご意見・ご感想をもとに、SimpleORM4Jを改善・拡張をしていきたいと考えております。
皆様からのメッセージは当方で確認をしておりますが、仕事をしながらの開発となる為、すぐにご返信・対応をすることが 出来ない場合がございます。何卒ご容赦ください。

※印は必須です
タイトル
メールアドレス
内容