|
ここで試した環境はWindowsXP Home Edition、
J2SE SDK 1.4.2_01、MySQL 4.0.20、MySQL Connector-J JDBC Driver 3.1alpha、Hibernate 2.1.6です。
-
JavaとMySQLはインストール済みとします。
またJDBCドライバもダウンロードし、CLASSPATHを通しておきます。
-
Hibernateのホームページから、
Hibernateをダウンロードして、適当な場所で展開します。
-
開発・実行時には、最低限次のJARファイルが必要なので、展開したディレクトリと、
その下のlibディレクトリから取り出して適切な場所へ配置し、CLASSPATHを通します。
- hibernate2.jar
- cglib-full-*.jar
- commons-collections-*.jar
- commons-logging-*.jar
- dom4j-*.jar
- encache-*.jar
- jdbc2_0-stdext.jar
- jta.jar
- odmg-3.0.jar
また、Hibernateはたくさんのログメッセージを出力しますが、
これを制御するため、ロギング機構のライブラリJakarta Log4Jも使うと便利です。
そうするには、上記のエントリにlog4j-1.2.8.jarも加えます。
-
Hibernateの設定ファイル、hibernate.cfg.xmlを書きます。
このファイルはCLASSPATHが通った場所に置くと自動的に検索されます。
<?xml version="1.0" ?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd" >
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/udb</property>
<property name="connection.username">urano</property>
<property name="connection.password">xyzyzx</property>
<property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<property name="use_outer_join">true</property>
<mapping resource="shiten1.hbm.xml"/>
</session-factory>
</hibernate-configuration>
|
-
マッピング設定ファイルを書きます。このファイル名はhibernate.cfg.xmlに書いた名前に合わせます。
<?xml version="1.0" ?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<class name="hn1.Shiten" table="SHITEN">
<id name="shitenCode" column="SHITEN_CODE" type="string"><generator class="assigned" /></id>
<property name="shitenName" type="string" column="SHITEN_NAME" />
<property name="areaCode" type="int" column="AREA_CODE" />
<property name="address" type="string" column="ADDRESS" />
<property name="employeeNum" type="int" column="EMPLOYEE_NUM" />
</class>
</hibernate-mapping>
|
-
Log4Jの設定ファイル、log4j.propertiesです。これもCLASSPATHの通った場所に置きます。
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
### direct messages to file hibernate.log ###
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
#log4j.rootLogger=warn, stdout
log4j.rootCategory=warn, stdout
log4j.logger.net.sf.hibernate=info
#log4j.logger.net.sf.hibernate=warn
#log4j.category.net.sf.hibernate=debug
### log just the SQL
#log4j.logger.net.sf.hibernate.SQL=debug
### log JDBC bind parameters ###
#log4j.logger.net.sf.hibernate.type=info
#log4j.logger.net.sf.hibernate.type=warn
### log schema export/update ###
#log4j.logger.net.sf.hibernate.tool.hbm2ddl=debug
#log4j.logger.net.sf.hibernate.tool.hbm2ddl=info
### log cache activity ###
#log4j.logger.net.sf.hibernate.cache=debug
### enable the following line if you want to track down connection ###
### leakages when using DriverManagerConnectionProvider ###
#log4j.logger.net.sf.hibernate.connection.DriverManagerConnectionProvider=trace
|
-
エンティティを表すBeanクラスです。
この例で使う「Shiten」は、5つのプロパティと、それら各々のgetter/setterだけからなります。
/*
* Created on 2004/08/28
*/
package hn1;
import java.io.Serializable;
public class Shiten implements Serializable {
private String shitenCode;
private String shitenName;
private Integer areaCode;
private String address;
private Integer employeeNum;
/**
* @return Returns the address.
*/
public String getAddress() {
return address;
}
/**
* @param address
* The address to set.
*/
public void setAddress(String address) {
this.address = address;
}
/**
* @return Returns the areaCode.
*/
public Integer getAreaCode() {
return areaCode;
}
/**
* @param areaCode
* The areaCode to set.
*/
public void setAreaCode(Integer areaCode) {
this.areaCode = areaCode;
}
/**
* @return Returns the employeeNum.
*/
public Integer getEmployeeNum() {
return employeeNum;
}
/**
* @param employeeNum
* The employeeNum to set.
*/
public void setEmployeeNum(Integer employeeNum) {
this.employeeNum = employeeNum;
}
/**
* @return Returns the shitenCode.
*/
public String getShitenCode() {
return shitenCode;
}
/**
* @param shitenCode
* The shitenCode to set.
*/
public void setShitenCode(String shitenCode) {
this.shitenCode = shitenCode;
}
/**
* @return Returns the shitenName.
*/
public String getShitenName() {
return shitenName;
}
/**
* @param shitenName
* The shitenName to set.
*/
public void setShitenName(String shitenName) {
this.shitenName = shitenName;
}
}
|
-
実際に検索を行うサンプルです。このサンプルは、テーブルSHITENの全件検索を行い、
結果集合をエンティティShitenのリストとして返します。
/*
* Created on 2004/08/28
* 全件検索をするサンプル
*/
package hn1;
import java.util.List;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Session;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.cfg.Configuration;
public class SelectTestApp1 {
public static void main(String[] args) throws HibernateException {
Configuration config = new Configuration();
// XMLファイルにCLASSPATHが通っていればファイル名の指定は不要
config = config.configure();
//config = config.configure(new java.io.File("./conf/hibernate.cfg.xml"));
SessionFactory sessionfactory = config.buildSessionFactory();
Session session = sessionfactory.openSession();
// 全件検索
List list = session.createCriteria(Shiten.class).list();
for (int i = 0; i < list.size(); i++) {
Shiten e = (Shiten)list.get(i);
System.out.println(e.getShitenCode() + ":" + e.getShitenName());
}
}
}
|
-
次にプレースホルダー?を使って、絞込み検索を行うサンプルです。
/*
* Created on 2004/08/28
* プレースホルダー?を使って条件検索をするサンプル
*/
package hn1;
import java.util.List;
import java.util.Iterator;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Query;
import net.sf.hibernate.Session;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.cfg.Configuration;
public class SelectTestApp2a {
public static void main(String[] args) throws HibernateException {
Configuration config = new Configuration();
config = config.configure();
SessionFactory sessionfactory = config.buildSessionFactory();
Session session = sessionfactory.openSession();
// クエリーの文をFROMから始めると、オブジェクトのリストで返します。
// SELECTで始めると、Object[]のリストで返します。
// 次の2つは同じ意味です。
Query q = session.createQuery("SELECT a FROM Shiten a WHERE a.shitenCode = ?");
//Query q = session.createQuery("FROM Shiten a WHERE a.shitenCode = ?");
q.setString(0, "00500");
List list = q.list();
for (int i = 0; i < list.size(); i++) {
Shiten e = (Shiten)list.get(i);
System.out.println(e.getShitenCode() + ":" + e.getShitenName());
}
}
}
|
-
問合せをSELECTで開始し、どのエンティティにもマップされない問合せを行うと、
Object[]のリストで返されます。
Object[]の各要素が、各列のデータに対応しています。
/*
* Created on 2004/08/28
* プレースホルダー?を使って条件検索をするサンプル
*/
package hn1;
import java.util.List;
import java.util.Iterator;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Query;
import net.sf.hibernate.Session;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.cfg.Configuration;
public class SelectTestApp2b {
public static void main(String[] args) throws HibernateException {
Configuration config = new Configuration();
config = config.configure();
SessionFactory sessionfactory = config.buildSessionFactory();
Session session = sessionfactory.openSession();
// 表には必ず別名を指定する必要があり、全ての列に別名をつける必要があります。
// つけないとnet.sf.hibernate.QueryException: undefined alias:
// という例外が発生します。
Query q = session.createQuery(
"SELECT a.shitenName, a.address FROM Shiten a WHERE a.shitenCode = ?");
q.setString(0, "00300");
Iterator iter = q.iterate();
while (iter.hasNext() ) {
Object[] row = (Object[]) iter.next();
String shitenName = (String) row[0];
String address = (String) row[1];
System.out.println("[" + shitenName + "] [" + address + "]");
}
}
}
|
(first uploaded 2004/08/29 last updated (not ever), URANO398)
|