当前位置: 代码迷 >> Eclipse >> eclipse配备hibernate
  详细解决方案

eclipse配备hibernate

热度:30   发布时间:2016-04-23 12:30:58.0
eclipse配置hibernate
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。
  相关解决方案