Hibernateについて調べてみました。
目次
Hibernate とは
Hibernate は、Java のためのオブジェクト関係マッピング ライブラリ(ORマッパー)であり、オブジェクト指向のドメインモデルを関係データベースにマッピングするためのフレームワークです。
Hibernateの読み方は、ハイバーネートです。
↓Hibernateの公式サイトはコチラ
↓Hibernate 5.4.1.Finalのダウンロードはコチラ
HibernateはJavaで書かれており、Javaで使うORマッパーです。
C#、Visual Studioで同じ機能を提供するのが、Entity Frameworkです。
・https://urashita.com/archives/32316
OR マッピングツールの目的は、 オブジェクト指向とリレーショナルデータベースの溝を埋めることです。
つまり、Hibernateを使うと、SQLを書かずにデータベースの読み取り、挿入、更新、削除を行うことができます。
Hibernateの簡単な使い方、サンプルプログラム
Hibernateの簡単な使い方、サンプルプログラムを作ってみました。
・https://github.com/urashita/BaseBallPlayer
データベース
まず、MySQL データベースを用意します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
/*-------------------------------------------------*/ /* */ /* データベースの作成 */ /* */ /*-------------------------------------------------*/ /*-------------------------------------------------*/ /* データベース名 baseballdb */ /*-------------------------------------------------*/ create database baseballdb default character set utf8; /*-------------------------------------------------*/ /* ユーザー名 baseballuser */ /*-------------------------------------------------*/ grant all on baseballdb.* to baseballuser@localhost identified by 'secret'; flush privileges; |
テーブルを用意します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
/*-------------------------------------------------*/ /* */ /* テーブルの作成 */ /* */ /*-------------------------------------------------*/ /*-------------------------------------------------*/ /* テーブル名 MPlayer */ /*-------------------------------------------------*/ DROP TABLE if exists MPlayer; CREATE TABLE MPlayer ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(32), birthday DATE, prefecture VARCHAR(32), PRIMARY KEY (id) ); INSERT INTO MPlayer (name, birthday, prefecture) VALUE ('能見 篤史', '1979.05.28', '兵庫'), ('西 純矢', '2001.09.13', '広島'), ('西 勇輝', '1990.11.10', '三重'), ('岩貞 祐太', '1991.09.05', '熊本'); |
データベースへの接続ファイル hibernate.cfg.xml
データベースへの接続ファイル hibernate.cfg.xml を用意します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!--MySQL JDBC Driver connection --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost/baseballdb</property> <property name="connection.username">baseballuser</property> <property name="connection.password">secret</property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.connection.characterEncoding">utf8</property> <property name="show_sql">true</property> <property name="use_outer_join">true</property> <!-- Mapping files --> <mapping resource="MPlayer.hbm.xml"/> </session-factory> </hibernate-configuration> |
hibernate.cfg.xml
マッピングファイル hbm.xml
マッピングファイル MPlayer.hbm.xml を用意します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/hibernate-mapping-3.0.dtd"> <!-- Generated 2020/07/08 13:46:04 by Hibernate Tools 3.5.0.Final --> <hibernate-mapping> <class name="baseball.MPlayer" table="MPlayer"> <id name="id" type="int"> <column name="ID" /> <generator class="assigned" /> </id> <property name="birthday" type="java.util.Date"> <column name="BIRTHDAY" /> </property> <property name="name" type="java.lang.String"> <column name="NAME" /> </property> <property name="prefecture" type="java.lang.String"> <column name="PREFECTURE" /> </property> </class> </hibernate-mapping> |
MPlayer.hbm.xml
JPAエンティティ (永続化クラス、Persistent Class)
JPAエンティティ(永続化クラス)を用意します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
package baseball; import java.io.Serializable; import javax.persistence.*; import java.util.Date; /** * The persistent class for the m_players database table. * */ @Entity @Table(name="m_players") @NamedQuery(name="MPlayer.findAll", query="SELECT m FROM MPlayer m") public class MPlayer implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private int id; @Temporal(TemporalType.DATE) private Date birthday; private String name; private String prefecture; public MPlayer() { } public int getId() { return this.id; } public void setId(int id) { this.id = id; } public Date getBirthday() { return this.birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public String getPrefecture() { return this.prefecture; } public void setPrefecture(String prefecture) { this.prefecture = prefecture; } } |
MPlayer.java
読み出し (select)、挿入(insert)、更新(update)、削除(delete)
読み出し (select)、挿入(insert)、更新(update)、削除(delete)を行うクラスを作成します。
読み出し (select)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
package baseball; import java.util.List; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import javax.persistence.criteria.CriteriaQuery; public class Find { public void exec() { Configuration config = new Configuration(); config = config.configure(); // 設定の読み込み // セッションファクトリーの作成 SessionFactory sessionfactory = config.buildSessionFactory(); // セッションオープン Session session = sessionfactory.openSession(); // create Criteria CriteriaQuery<MPlayer> criteriaQuery = session.getCriteriaBuilder().createQuery(MPlayer.class); criteriaQuery.from(MPlayer.class); List<MPlayer> list = session.createQuery(criteriaQuery).getResultList(); for (int i = 0; i < list.size(); i++) { // レコードとなるMPlayerオブジェクトを取得 MPlayer player = (MPlayer) list.get(i); // idとname列のデータを表示 System.out.println(player.getId() + ":" + player.getName()); } } } |
挿入(insert)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
package baseball; import java.util.Calendar; import java.util.Date; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; public class Insert { public void exec() { Configuration config = new Configuration(); config = config.configure(); SessionFactory sessionfactory = config.buildSessionFactory(); Session session = sessionfactory.openSession(); Transaction trans = session.beginTransaction(); // 新しいレコードの作成 MPlayer player = new MPlayer(); player.setName("馬場 皐輔"); Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, 1995); cal.set(Calendar.MONTH, Calendar.MAY); cal.set(Calendar.DAY_OF_MONTH, 18); Date dateRepresentation = cal.getTime(); player.setBirthday(dateRepresentation); player.setPrefecture("宮城"); session.save(player); // 挿入実行 trans.commit(); session.close(); } } |
更新(update)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
package baseball; import java.util.Calendar; import java.util.Date; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; public class Update { public void exec() { Configuration config = new Configuration(); config = config.configure(); SessionFactory sessionfactory = config.buildSessionFactory(); Session session = sessionfactory.openSession(); // トランザクションの開始 Transaction trans = session.beginTransaction(); // ID 4であるPlayerオブジェクトを取得 MPlayer player = (MPlayer) session.load(MPlayer.class, Integer.valueOf(4)); player.setName("藤浪 晋太郎"); Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, 1994); cal.set(Calendar.MONTH, Calendar.APRIL); cal.set(Calendar.DAY_OF_MONTH, 12); Date dateRepresentation = cal.getTime(); player.setBirthday(dateRepresentation); player.setPrefecture("大阪"); session.update(player); // UPDATE実行 trans.commit(); // コミット session.close(); // クローズ } } |
削除(delete)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
package baseball; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; public class Delete { public void exec() { Configuration config = new Configuration(); config = config.configure(); SessionFactory sessionfactory = config.buildSessionFactory(); Session session = sessionfactory.openSession(); Transaction trans = session.beginTransaction(); // 削除対象オブジェクトの作成 MPlayer player = new MPlayer(); player.setId(Integer.valueOf(2)); // ID 2であるPlayerオブジェクトをマーク session.delete(player); // 削除実行 trans.commit(); session.close(); } } |
コメント
[…] 私が使っているお勧めのフリーソフトを8個まとめてみました。 これらは主にはサーバー系、ネットワーク系のプログラマやインフラ構築に従事しているエンジニア向けのソフトと言えると思います。 Cygwin (手軽に使… スポンサーリンク Hibernate、JavaのORマッピングフレームワークとは? […]