hibernate相对于spring配置还是略显繁琐的:
对于Eclipse要求:
EclipseEE
数据库,我选用的是
mysql
新件项目:需要建成:dynamic web project
在WEB-INF/lib下需要的jar包:

整个项目的目录结构:

源码:
HelloWorld.java
package com.yy.hello;import org.hibernate.Session;import org.hibernate.Transaction;import persistence.*;public class HelloWorld { public static void main(String[] args) { Session session = HibernateUtil.getSessionFactory().openSession(); Transaction tx = session.beginTransaction(); Message message = new Message("Hello World"); Long msgId = (Long) session.save(message); tx.commit(); session.close(); HibernateUtil.shutdown(); }}
Message.java
package com.yy.hello;public class Message { private Long id; private String text; private Message nextMessage; public Message(){} public Message(String text) { this.text = text; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getText() { return text; } public void setText(String text) { this.text = text; } public Message getNextMessage() { return nextMessage; } public void setNextMessage(Message nextMessage) { this.nextMessage = nextMessage; }}
Message.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="com.yy.hello.Message" table="MESSAGES" > <id name="id" column="MESSAGE_ID"> <generator class="increment"></generator> </id> <property name="text" column="MESSAGE_TEXT"></property> <many-to-one name="nextMessage" cascade="all" column="NEXT_MESSAGE_ID" foreign-key="FK_NEXT_MESSAGE" /> </class></hibernate-mapping>
HibernateUtil.java
package persistence;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;public class HibernateUtil { private static SessionFactory sessionFactory; static{ try{ sessionFactory = new Configuration() .configure() .buildSessionFactory(); } catch (Throwable ex) { throw new ExceptionInInitializerError(ex); } } public static SessionFactory getSessionFactory(){ return sessionFactory; } public static void shutdown(){ getSessionFactory().close(); }}
hibernate.cfg.xml
<!DOCTYPE hibernate-configuration SYSTEM "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_text</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">root</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 让hibernate自动生成表 --> <property name="hibernate.hbm2ddl.auto">create</property> <!-- use the C3P0 connection pool provider --> <property name="hibernate.c3p0.min_size">5</property> <property name="hibernate.c3p0.max_size">20</property> <property name="hibernate.c3p0.timeout">300</property> <property name="hibernate.c3p0.max_statements">50</property> <property name="hibernate.c3p0.idle_test_period">3000</property> <!-- show and print nice SQL on stdout --> <property name="show_sql">true</property> <property name="format_sql">true</property> <!-- List of XML mapping files --> <mapping resource="com/yy/hello/Message.hbm.xml" /> </session-factory></hibernate-configuration>
log4j.properties
log4j.rootLogger=DEBUG,stdout,Rlog4j.logger.org=ERROR, A1log4j.logger.com.gc.action=DEBUG,A2log4j.appender.A1=org.apache.log4j.RollingFileAppenderlog4j.appender.A1.File=org.loglog4j.appender.A1.MaxFileSize=500KBlog4j.appender.A1.MaxBackupIndex=50log4j.appender.A1.Append=truelog4j.appender.A1.layout=org.apache.log4j.PatternLayoutlog4j.appender.A1.layout.ConversionPattern=%d{ISO8601} - [%p] [%C{1}] - %m%nlog4j.appender.A2=org.apache.log4j.RollingFileAppenderlog4j.appender.A2.File=gc.loglog4j.appender.A2.MaxFileSize=500KBlog4j.appender.A2.MaxBackupIndex=50log4j.appender.A2.Append=truelog4j.appender.A2.layout=org.apache.log4j.PatternLayoutlog4j.appender.A2.layout.ConversionPattern=%d{ISO8601} - [%p] [%C{1}] - %m%n#--------------------stdout--------------------------------log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayout# Pattern to output the caller's file name and line number.log4j.appender.stdout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} %c - %m%n#--------------------R--------------------------------#log4j.appender.R=org.apache.log4j.RollingFileAppenderlog4j.appender.R=org.apache.log4j.DailyRollingFileAppender#this log file will be stored in web server's /bin directory,modify to your path which want to store.log4j.appender.R.File=gf.log#log4j.appender.R.datePattern='.'yyyy-MM-dd-HH-mmlog4j.appender.R.datePattern='.'yyyy-MM-ddlog4j.appender.R.append=true## Keep one backup filelog4j.appender.R.layout=org.apache.log4j.PatternLayoutlog4j.appender.R.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} %c - %m%n#[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
注意事项:
hibernate.cfg.xml放在源代码目录中,但是处在任何包之外的。
log4j.properties是放在WEB-INF/classes文件夹下的。
编译的时候,编译HelloWorld.java文件,用Java Application运行。
你需要在mysql中先建立好数据库(但在此不需要预先建立好表)。
至此,登录mysql,便可以发现表已经自动声称,并已经存入了数据。
补充:
将上面的改为注解,在此我将需要修改,并且改后的源文件贴出,读者可自行比较其中的不同之处:
Message.java
package com.yy.hello;import javax.persistence.*;@Entity@Table(name = "TAB_AN")public class Message { @Id @GeneratedValue @Column(name = "MESSAGE_ID") private Long id; @Column(name = "MESSAGE_TEXT") private String text; @ManyToOne(cascade = CascadeType.ALL) @JoinColumn(name = "NEXT_TAB_AN") private Message nextMessage; public Message(){} public Message(String text) { this.text = text; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getText() { return text; } public void setText(String text) { this.text = text; } public Message getNextMessage() { return nextMessage; } public void setNextMessage(Message nextMessage) { this.nextMessage = nextMessage; }}
hibernate.cfg.xml
<!DOCTYPE hibernate-configuration SYSTEM "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/HBDB</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">root</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 让hibernate自动生成表 --> <property name="hibernate.hbm2ddl.auto">create</property> <!-- use the C3P0 connection pool provider --> <property name="hibernate.c3p0.min_size">5</property> <property name="hibernate.c3p0.max_size">20</property> <property name="hibernate.c3p0.timeout">300</property> <property name="hibernate.c3p0.max_statements">50</property> <property name="hibernate.c3p0.idle_test_period">3000</property> <!-- show and print nice SQL on stdout --> <property name="show_sql">true</property> <property name="format_sql">true</property> <!-- List of XML mapping files --> <mapping class="com.yy.hello.Message" /> <mapping package="com/yy/hello" /> </session-factory></hibernate-configuration>
还需要手动删除Message.hbm.xml文件,不需要导入新的包,编译,运行,在数据库里面会发现已经有了新的TAB_AN。