Hibernate

1月 1, 2003 · Posted in Hibernate · Comment 

Hibernateとは

オープンソースのO/Rマッピング(ORM)フレームワーク。オブジェクト指向+リレーショナルデータベースで開発を行うと、相互間のロジック作成に多大な時間がかかる。Hibernateは永続化層に対する開発者の作業を軽減する目的で作成されている。

O/Rデータベースマッピングフレームワーク

オブジェクト指向とリレーショナルデータベースを用いてシステムを開発すると、インピーダンス・ミスマッチ(Impedance Mismatch)と呼ばれるギャップが発生する。これはオブジェクト指向とリレーショナルデータベースとの考え方が異なるためである。
O/Rマッピングフレームワークとは、このギャップを軽減するためのフレームワークのことで、O/RのOはオブジェクト、Rはリレーショナルを意味している。

入手〜設定

http://www.hibernate.org/からHibernateのバイナリファイルをダウンロードする。

入手したzipファイルを解凍し、hibernate(バージョン番号).jarファイルにクラスパスを通す。

注意事項

2.x→3.0への移行にあたり、パッケージ名が変更になった。
(旧)net.sf.hibernate.* → (新)org.hibernate.*
旧バージョンを利用する場合、パッケージ名を置き換えてください。

Hibernateの利用

リンク

Hibernate – データの追加、更新、削除(insert update delete)

1月 1, 2003 · Posted in Hibernate · Comment 

insert, update, delete

レコードの追加・変更・削除を行う場合、処理をトランザクション管理下におく。

トランザクション管理はorg.hibernate.Transactionインタフェースを利用して行う。

insert

// 挿入するデータ情報(キー)の設定
EmpDto empDto = new EmpDto();
empDto.setName("new commer");
empDto.setSalary(200000);

// 挿入
Transaction trans = session.beginTransaction();
session.save(empDto);
trans.commit();

update

// 更新するデータ情報(キー)の設定
EmpDto empDto = (EmpDto)session.load(EmpDto.class, "100");
empDto.setName("change");

// 更新
Transaction trans = session.beginTransaction();
session.update(empDto);
trans.commit();

delete

// 削除するデータ情報(キー)の設定
EmpDto empDto = new EmpDto();
empDto.setId(new Integer("100"));

// 削除
Transaction trans = session.beginTransaction();
session.delete(empDto);
trans.commit();

リンク

Hibernate – 複数テーブルのマッピング(多対1)

1月 1, 2003 · Posted in Hibernate · Comment 

meny-to-one

多対1のマッピングを行うときは、多の永続化クラスに1の永続化クラスを保持させる。

サンプル

テーブル

以下の2つのテーブルを利用する。

SKILL表(1)

ID NAME
00 Java
01 .NET
02 PHP

MEMBER表(多)

ID NAME SKILLID
00 鬼太郎 00
01 親父 00
02 ねずみ男 02

DTO(永続化クラス)

SkillDto.java

package dto;

public class SkillDto {
    private Integer id;
    private String text;

    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getText() {
        return text;
    }
    public void setText(String text) {
        this.text = text;
    }
}

MemberDto.java

package dto;

public class MemberDto{
    private Integer id;
    private String name;
    private Integer skillId;
    private SkillDto skillDto;

    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getSkillId() {
        return skillId;
    }
    public void setSkillId(Integer skillId) {
        this.skillId = skillId;
    }
    public SkillDto getSkillDto() {
        return skillDto;
    }
    public void setSkillDto(SkillDto skillDto) {
        this.skillDto = skillDto;
    }
}

マッピング情報

skill.hbm.xml

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="dto.SkillDto" table="skill">
        <id name="id" column="id">
            <generator class="assigned" />
        </id>
        <property name="text" type="java.lang.String" column="text"/>
    </class>
</hibernate-mapping>

member.hbm.xml

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
  <class name="dto.MemberDto" table="MEMBER">
    <id name="id" column="id" type="java.lang.Integer" >
        <generator class="assigned" />
    </id>
    <property name="name" type="string" column="NAME" />
    <property name="skillId" type="java.lang.Integer" column="skillid" />
    <many-to-one name ="skillDto" column="skillID"
        class="dto.SkillDto" cascade="all" outer-join="auto"
        update="false" insert="false" />
    </class>
</hibernate-mapping>

クライアント

MenyToOne.java

package client;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import dto.MemberDto;
import dto.SkillDto;

public class MenyToOne{
    public static void main(String args[]) throws Exception{
        Configuration config = new Configuration().configure();
        SessionFactory sessionfactory = config.buildSessionFactory();
        Session session = sessionfactory.openSession();

        List list = session.createCriteria(MemberDto.class).list();
        for(int i = 0; i < list.size(); i++){
            MemberDto member = (MemberDto)list.get(i);
            System.out.print(member.getName());

            SkillDto skillDto = member.getSkillDto();
            System.out.println("\t" + skillDto.getName());
        }
    }
}

はじめにMemberDtoをHibernate経由で取得する。そのMemberオブジェクトは対応するSkillを保持している。

実行結果

鬼太郎    Java
親父    Java
ねずみ男    .NET

« 前ページへ次ページへ »