url:
http://www.blogjava.net/zhuguangxiang/archive/2007/02/10/99147.html
本文介绍如何用hibernate写一个hello world 程序,以及说明Hibernate下的对象的识别。
1、配置文件hibernate.cfg.xml:
<? 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 >
<!-- Database connection settings -->
< property name = " connection.driver_class " > com.mysql.jdbc.Driver </ property >
< property name = " connection.url " > jdbc:mysql: // localhost:3306/eg</property>
< property name = " connection.username " > root </ property >
< property name = " connection.password " > 4864452 </ property >
<!-- JDBC connection pool (use the built - in) -->
< property name = " connection.pool_size " > 1 </ property >
<!-- SQL dialect -->
< property name = " dialect " > org.hibernate.dialect.MySQLInnoDBDialect </ property >
<!-- Enable Hibernate ' s automatic session context management -->
< property name = " current_session_context_class " > thread </ property >
<!-- Disable the second - level cache -->
< property name = " cache.provider_class " > org.hibernate.cache.NoCacheProvider </ property >
<!-- Echo all executed SQL to stdout -->
< property name = " show_sql " > true </ property >
<!-- Drop and re - create the database schema on startup
< property name = " hbm2ddl.auto " > create </ property >
-->
< mapping resource = " eg/Message.hbm.xml " />
</ session - factory >
</ hibernate - configuration >
2、源文件:
package eg;
public class Message {
private Long id;
private String text;
private Message nextMessage;
public Message() {}
public Message(String text) {
this .text = text;
}
public void setId(Long id) {
this .id = id;
}
public void setText(String text) {
this .text = text;
}
public void setNextMessage(Message nextMessage) {
this .nextMessage = nextMessage;
}
public Long getId() {
return ( this .id);
}
public String getText() {
return ( this .text);
}
public Message getNextMessage() {
return ( this .nextMessage);
}
}
3、配置文件:Messsage.hbm.xml
<? xml version = " 1.0 " encoding = " utf-8 " ?>
<! DOCTYPE hibernate - mapping PUBLIC
" -//Hibernate/Hibernate Mapping DTD 3.0//EN "
" http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd " >
< hibernate - mapping >
< class
name =" eg.Message "
table = " MESSAGE "
>
< id
name = " id "
column = " MESSAGE_ID "
type = " java.lang.Long "
>
< generator class = " native " />
</ id >
< property
name = " text "
type = " java.lang.String "
update = " true "
insert = " true "
column = " MESSAGE_TEXT "
/>
< many - to - one
name = " nextMessage "
class = " jmuse.eg.Message "
cascade = " all "
outer - join = " auto "
update = " true "
insert = " true "
column = " NEXT_MESSAGE_ID "
/>
</ class >
</ hibernate - mapping >
4、最后的包结构:
+ lib
antlr.jar
cglib.jar
asm.jar
asm - attrs.jars
commons - collections.jar
commons - logging.jar
hibernate3.jar
jta.jar
dom4j.jar
log4j.jar
+src
+ eg
Message.java
Message.hbm.xml
TestMessage.java
hibernate.cfg.ml
log4j.properties
5、测试:
session.beginTransaction();
Message m = new Message( " hello,world " );
session.save(m);
session.getTransaction().commit();
session.close();
你会发现在数据库中有一条信息了,id=1
Hibernate的对象识别是通过对象的Id 来识别的:
如:
我们刚才在数据库中保存了一个Id为1的Message对象。
如果:
session.beginTraction();
Message m = new Message();
m.setId( new Long( 1 ));
m.setText( " This is another greeting " );
session.saveOrUpdate(m);
sesion.getTraction.commit();
你会发现Hibernate会自动的把刚才的对象进行更新,而不是保存一个新的对象。
这个例子有点极端,呵呵。能说明问题就可以了。
http://www.blogjava.net/zhuguangxiang/archive/2007/02/10/99147.html
本文介绍如何用hibernate写一个hello world 程序,以及说明Hibernate下的对象的识别。
1、配置文件hibernate.cfg.xml:
<? 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 >
<!-- Database connection settings -->
< property name = " connection.driver_class " > com.mysql.jdbc.Driver </ property >
< property name = " connection.url " > jdbc:mysql: // localhost:3306/eg</property>
< property name = " connection.username " > root </ property >
< property name = " connection.password " > 4864452 </ property >
<!-- JDBC connection pool (use the built - in) -->
< property name = " connection.pool_size " > 1 </ property >
<!-- SQL dialect -->
< property name = " dialect " > org.hibernate.dialect.MySQLInnoDBDialect </ property >
<!-- Enable Hibernate ' s automatic session context management -->
< property name = " current_session_context_class " > thread </ property >
<!-- Disable the second - level cache -->
< property name = " cache.provider_class " > org.hibernate.cache.NoCacheProvider </ property >
<!-- Echo all executed SQL to stdout -->
< property name = " show_sql " > true </ property >
<!-- Drop and re - create the database schema on startup
< property name = " hbm2ddl.auto " > create </ property >
-->
< mapping resource = " eg/Message.hbm.xml " />
</ session - factory >
</ hibernate - configuration >
2、源文件:
package eg;
public class Message {
private Long id;
private String text;
private Message nextMessage;
public Message() {}
public Message(String text) {
this .text = text;
}
public void setId(Long id) {
this .id = id;
}
public void setText(String text) {
this .text = text;
}
public void setNextMessage(Message nextMessage) {
this .nextMessage = nextMessage;
}
public Long getId() {
return ( this .id);
}
public String getText() {
return ( this .text);
}
public Message getNextMessage() {
return ( this .nextMessage);
}
}
3、配置文件:Messsage.hbm.xml
<? xml version = " 1.0 " encoding = " utf-8 " ?>
<! DOCTYPE hibernate - mapping PUBLIC
" -//Hibernate/Hibernate Mapping DTD 3.0//EN "
" http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd " >
< hibernate - mapping >
< class
name =" eg.Message "
table = " MESSAGE "
>
< id
name = " id "
column = " MESSAGE_ID "
type = " java.lang.Long "
>
< generator class = " native " />
</ id >
< property
name = " text "
type = " java.lang.String "
update = " true "
insert = " true "
column = " MESSAGE_TEXT "
/>
< many - to - one
name = " nextMessage "
class = " jmuse.eg.Message "
cascade = " all "
outer - join = " auto "
update = " true "
insert = " true "
column = " NEXT_MESSAGE_ID "
/>
</ class >
</ hibernate - mapping >
4、最后的包结构:
+ lib
antlr.jar
cglib.jar
asm.jar
asm - attrs.jars
commons - collections.jar
commons - logging.jar
hibernate3.jar
jta.jar
dom4j.jar
log4j.jar
+src
+ eg
Message.java
Message.hbm.xml
TestMessage.java
hibernate.cfg.ml
log4j.properties
5、测试:
session.beginTransaction();
Message m = new Message( " hello,world " );
session.save(m);
session.getTransaction().commit();
session.close();
你会发现在数据库中有一条信息了,id=1
Hibernate的对象识别是通过对象的Id 来识别的:
如:
我们刚才在数据库中保存了一个Id为1的Message对象。
如果:
session.beginTraction();
Message m = new Message();
m.setId( new Long( 1 ));
m.setText( " This is another greeting " );
session.saveOrUpdate(m);
sesion.getTraction.commit();
你会发现Hibernate会自动的把刚才的对象进行更新,而不是保存一个新的对象。
这个例子有点极端,呵呵。能说明问题就可以了。