1. 通过maven创建一个quickstart 的maven工程,并新建一个src/main/resources的source folder用来存放资源文件。
mvn archetype:generate -DgroupId=maven.demo.start -DartifactId=HibernateDemo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Maven命令执行到Generating Project in Batch mode 卡住,原因是网络带宽不足问题!需要下载一个约4.1M的xml文件。网速好可以多等几分钟,还是不行则参考Solution:Maven命令执行到Generating Project in Batch mode 卡住。 我的是多等了下就好了。
2.修改pom文件,最简单的helloworld只需要增加hibernate和hsqldb(如果安装了mysql等数据库可以用本地数据库,不用下载hsqldb了。)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>maven.demo.start</groupId>
<artifactId>HibernateDemo</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>HibernateDemo</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.11.Final</version>
</dependency>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb-j5</artifactId>
<version>2.2.4</version>
</dependency>
</dependencies>
</project>
3. 新建一个类, 在src/main/java下新建一个maven.demo.start包,并建一个Message 类。
package maven.demo.start;
public class Message {
private Long id;
private String text;
private Message nextMessage;
public Message() {
super();
// TODO Auto-generated constructor stub
}
public Message(String text) {
super();
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;
}
}
4.src/main/ 下创建resources文件夹,在resource下新建Message.hbm.xml,定义Bean到数据库字段的映射关系:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="maven.demo.start.Message" table="MESSAGES">
<id name="id" column="MESSAGE_ID">
<generator class="increment" />
</id>
<property name="text" column="MESSAGE_TEXT" />
<many-to-one
name="nextMessage"
cascade="all"
column="NEXT_MESSAGE_ID"
foreign-key="FK_NEXT_MESSAGE" />
</class>
</hibernate-mapping>
5.src/main/resources下,新建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">
org.hsqldb.jdbcDriver
</property>
<property name="hibernate.connection.url">
jdbc:hsqldb:hsql://localhost
</property>
<property name="hibernate.connection.username">
sa
</property>
<property name="hibernate.dialect">
org.hibernate.dialect.HSQLDialect
</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>
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- List of XML mapping files -->
<mapping resource="Message.hbm.xml" />
</session-factory>
</hibernate-configuration>
6.src/main/java新建 maven.demo.start.HibernateUtil类:
package maven.demo.start;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.service.ServiceRegistry;
public class HibernateUtil {
private static SessionFactory sessionFactory = null;
private static ServiceRegistry serviceRegistry = null;
private static Configuration cfg = null;
static {
cfg = new Configuration().configure();
serviceRegistry = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();
sessionFactory = cfg.buildSessionFactory(serviceRegistry);
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static void shutdown() {
getSessionFactory().close();
}
}
7.src/main/java下新建maven.demo.start.HellowWorld类:
package maven.demo.start;
import java.util.Iterator;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
public class HelloWorld {
public static void main(String[] args) {
System.out.println(System.getProperty("user.dir"));//
// First unit of work
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();
Session newSession = HibernateUtil.getSessionFactory().openSession();
Transaction newTx = newSession.beginTransaction();
List messages = newSession.createQuery("from Message m order by m.text asc").list();
System.out.println(messages.size() + " message(s) found:");
for (Iterator it = messages.iterator(); it.hasNext(); ) {
Message msg = (Message)it.next();
System.out.println(msg.getText());
}
newTx.commit();
newSession.close();
HibernateUtil.shutdown();
}
}
8. 启动hsqldb.Server: cmd进入 hsqldb-j5-2.2.4.jar目录。(一般在 C : \Users\Adminstrator\.m2\repository\org\hsqldb\hsqldb - j5\2 . 2.4 \hsqldb - j5 - 2.2 . 4.jar 路径下,如果修改了maven的仓库地址,则改为对应的repository目录下)
java -cp hsqldb-j5-2.2.4.jar org.hsqldb.Server
9. 启动hsqldbManager: cmd进入 hsqldb-j5-2.2.4.jar目录。(一般在 C : \Users\Adminstrator\.m2\repository\org\hsqldb\hsqldb - j5\2 . 2.4 \hsqldb - j5 - 2.2 . 4.jar 路径下,如果修改了maven的仓库地址,则改为对应的repository目录下 )
java -cp hsqldb-j5-2.2.4.jar org.hsqldb.util.DatabaseManagerSwing -url jdbc:hsqldb:hsql://localhost/ -driver org.hsqldb.jdbcDriver
10.maven package打包: 运行命令 mvn package
11.运行HelloWorld.java。 进入项目目录,使用java命令运行HelloWorld:
java -cp target/HibernateDemo-1.0-SNAPSHOT.jar maven.demo.startHelloWorld
原来mvn package 打包未将项目依赖的jar一起打包到HibernateDemo-1.0-SNAPSHOT.jar。所以用java命令运行HelloWorld类的main方法总是报错。
正确的运行方法是(使用Maven运行Java main的3种方式):
mvn exec:java -Dexec.mainClass="maven.demo.start.HelloWorld"