ハイベルナーAnnotations実戦(一)
13978 ワード
ソース:http://www.360doc.com/content/06/0425/12/5136_10878.shtml
--hbm.xmlからAnnotationsまで
Matrixを取得したサイトは、以下の作者の情報とリンクを残してください。著者:icess(作者のブログ:http://blog.matrix.org.cn/page/icess)キーワード:Hibernate Validator
まず、一般的なhbm.xmlマッピングファイルの例を見ましょう。3つのクラスがあります。
HIbernature Util工具類:
ユーザエンティティクラス:Person
ヒベルナ.cfg.xmlのプロファイルは以下の通りです。mysqlデータベースを利用します。
属性は、自動的にデータベースを導入します。生産のddl sql文は以下の通りです。
Person.hbm.xmlファイルは以下の通りです。
mysql>describe person、+-------------------------------------------------------------------------------------------------------------------------------------------------- Field | Type | Null | Key 124 Default 124 Extra+--------------------------------------------------------------------------------------------------ハング | int(11) | NO. | PRI_NULL | autoincrement𞓜name | varrhar(255)イエロー | | NULL | || sex | varrhar(255)イエロー | | NULL | || メッセージ | int(11) | YES | | NULL | || person int(11) | YES | MUL 124 NULL | |+--------+--------------+------+-----+---------+----------------+5ローws in set(0.00 sec)mysql>select*from person;+----------------------------------------------------------------------------++++|id name | sex 124 age person+----------------------------------------------------------------------------++++(+124;) 1|icerain 124; male 124; 19| NULL+-----------------------------------------1 row in set(0.03 sec)
--hbm.xmlからAnnotationsまで
Matrixを取得したサイトは、以下の作者の情報とリンクを残してください。著者:icess(作者のブログ:http://blog.matrix.org.cn/page/icess)キーワード:Hibernate Validator
まず、一般的なhbm.xmlマッピングファイルの例を見ましょう。3つのクラスがあります。
HibernateUtil
.java つまり、Hybernateドキュメントで推奨されているツールクラスです。Person
.javaは耐久性のあるクラスです。Test.javaテスト用のクラスです。全部test.hibernate
にあります。 各クラスのコードは以下の通りです。HIbernature Util工具類:
package test.hibernate;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
public static final SessionFactory sessionFactory;
static {
try {
sessionFactory = new Configuration()
.configure()
.buildSessionFactory();
} catch (HibernateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new ExceptionInInitializerError(e);
}
}
public static final ThreadLocal<Session> session = new ThreadLocal<Session>();
public static Session currentSession() throws HibernateException {
Session s = session.get();
if(s == null) {
s = sessionFactory.openSession();
session.set(s);
}
return s;
}
public static void closeSession() throws HibernateException {
Session s = session.get();
if(s != null) {
s.close();
}
session.set(null);
}
}
ユーザエンティティクラス:Person
package test.hibernate;
import java.util.LinkedList;
import java.util.List;
/**
*
*/
@SuppressWarnings("serial")
public class Person implements java.io.Serializable {
// Fields
private Integer id;
private String name;
private String sex;
private Integer age;
private List list = new LinkedList();
// Collection accessors
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
/** default constructor */
public Person() {
}
/** constructor with id */
public Person(Integer id) {
this.id = id;
}
// Property accessors
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return this.sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return this.age;
}
public void setAge(Integer age) {
this.age = age;
}
}
/*
* Created on
* @author
*/
package test.hibernate;
import java.sql.SQLException;
import org.hibernate.FlushMode;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
public class Test {
public static void main(String [] args) {
Session s = HibernateUtil.currentSession();
Transaction tx = s.beginTransaction();
// Person p = (Person) s.load(Person.class, 1);
// System.out.println(p.getName());
Person p = new Person();
p.setAge(19);
p.setName("icerain");
p.setSex("male");
s.save(p);
s.flush();
/*
Person p2 = (Person) s.get(Person.class, new Integer(1));
System.out.println(p2.getName());
p2.setName("ice..");
s.saveOrUpdate(p2);
s.flush();
Person p3 = (Person) s.get(Person.class, new Integer(2));
System.out.println(p3.getName());
s.delete(p3);
*/
tx.commit();
try {
System.out.println(p.getName());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
HibernateUtil.closeSession();
}
}
ヒベルナ.cfg.xmlのプロファイルは以下の通りです。mysqlデータベースを利用します。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
<property name="hibernate.connection.password"> </property>
<property name="hibernate.connection.url">jdbc:mysql://localhost/ </property>
<property name="hibernate.connection.username"> </property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
<property name="hibernate.transaction.auto_close_session">false</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping resource="test/hibernate/annotation/Person.hbm.xml"/>
</session-factory>
</hibernate-configuration>
このうち、「property name=「hibernate.hbm 2 ddl.aut」を配置しました。udatecreate table person (id integer not null auto_increment, name varchar(255), sex varchar(255), age integer, person integer, primary key (id))
alter table person add index FKC4E39B5511C4A5C2 (person), add constraint FKC4E39B5511C4A5C2 foreign key (person) references person (id)
Person.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="test.hibernate.Person" table="person">
<id name="id" type="integer">
<column name="id" />
<generator class="native"></generator>
</id>
<property name="name" type="string">
<column name="name" />
</property>
<property name="sex" type="string">
<column name="sex" />
</property>
<property name="age" type="integer">
<column name="age" />
</property>
<bag name="list" cascade="all">
<key column="person"></key>
<one-to-many class="test.hibernate.Person"/>
</bag>
</class>
</hibernate-mapping>
以下では、Hibernate Annotationsを利用して、hbm.xmlの設定ファイルが必要でない限り、3つのカテゴリを見てみましょう。また、使用している2つのjarファイルを入れるルートの中にあります。具体的にはどうすればいいですか?参照してください。 ハイベルナーAnnotations中国語ドキュメントhttp://hb.6644.netHibernateUtil.java つまり、Hibernateドキュメントで推奨されているツール類です。Person.javaは恒久的なクラスです。Test.javaテスト用のクラスです。test.hibernation.annotationパッケージにあります。各種類のコードは以下の通りです。 package test.hibernate.annotation;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
public static final SessionFactory sessionFactory;
static {
try {
sessionFactory = new AnnotationConfiguration() // : SessionFactory
.addPackage("test.hibernate.annotation")
.addAnnotatedClass(Person.class)
.configure()
.buildSessionFactory();
//new Configuration().configure().buildSessionFactory();
} catch (HibernateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new ExceptionInInitializerError(e);
}
}
public static final ThreadLocal<Session> session = new ThreadLocal<Session>();
public static Session currentSession() throws HibernateException {
Session s = session.get();
if(s == null) {
s = sessionFactory.openSession();
session.set(s);
}
return s;
}
public static void closeSession() throws HibernateException {
Session s = session.get();
if(s != null) {
s.close();
}
session.set(null);
}
}
package test.hibernate.annotation;
import java.util.LinkedList;
import java.util.List;
import javax.persistence.AccessType;
import javax.persistence.Basic;
import javax.persistence.Entity;
import javax.persistence.GeneratorType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;
/**
*
*/
@SuppressWarnings("serial")
@Entity(access = AccessType.PROPERTY) //
@Table //
public class Person implements java.io.Serializable {
// Fields
private Integer id;
private String name;
private String sex;
private Integer age;
private List list = new LinkedList();
// Constructors
/** default constructor */
public Person() {
}
/** constructor with id */
public Person(Integer id) {
this.id = id;
}
// Property accessors
@Id
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
@Basic
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
@Basic
public String getSex() {
return this.sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Basic
public Integer getAge() {
return this.age;
}
public void setAge(Integer age) {
this.age = age;
}
@Transient // Transient
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
}
このエンティティクラスの属性はデフォルト値を使用しています。Test.javaコードはhbm.xmlマッピングファイルを必要としません。簡単なものではありません。いくつかの単純化は主要目的ではないと思われます。主にEJB 3の恒久化メカニズムを知ることができます。開発の効率を高めることが重要です。はい、この例はもう終わりました。いかがでしたか?バッチに来てください。PS:作成したデータベーステーブルとプログラム実行後のデータベースの状況は以下の通りです。mysql>describe person、+-------------------------------------------------------------------------------------------------------------------------------------------------- Field | Type | Null | Key 124 Default 124 Extra+--------------------------------------------------------------------------------------------------ハング | int(11) | NO. | PRI_NULL | autoincrement𞓜name | varrhar(255)イエロー | | NULL | || sex | varrhar(255)イエロー | | NULL | || メッセージ | int(11) | YES | | NULL | || person int(11) | YES | MUL 124 NULL | |+--------+--------------+------+-----+---------+----------------+5ローws in set(0.00 sec)mysql>select*from person;+----------------------------------------------------------------------------++++|id name | sex 124 age person+----------------------------------------------------------------------------++++(+124;) 1|icerain 124; male 124; 19| NULL+-----------------------------------------1 row in set(0.03 sec)