maven+hibernate+hsqldb 集成

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"  






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值